Sha256: 0a4e229a0df4d36c631d305b83c89f02834748fb58cca3546c8814c9a7ac0cd0

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

module Transcriber
  class Resource
    class Relation
      module Response
        def to_resource(parent)
          included = parent.__send__(name)
          return {} unless visible?(parent) and included
          {name => resource_from_included(included)}
        end

        def to_relation(parent)
          {rel: name, href: href(parent)}
        end

        private

        def relation_name(parent)
          relation = parent.class.relations.find do |key|
            key.resource_class == self.resource_class
          end
          relation.name or fail
        end

        def resource_from_included(included)
          options = {root: false}
          one? ?
            included.resource(options)
          : included.map {|r| r.resource(options)}
        end

        def href(parent)
          id_key = parent.class.id_key.name
          has? ?
            "#{Transcriber.host}/#{parent.class.resource_name}/#{parent.send(id_key)}/#{relation_name(parent)}"
          : "#{Transcriber.host}/#{relation_name(parent).to_s.pluralize}/#{parent.send(id_key)}/#{parent.class.resource_name}"
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
transcriber-0.0.26 lib/transcriber/resource/key/relation/response.rb