Sha256: 801b80e67a27bdbb88e9b073b2d17379dc284caffa05fdd483a551c69bbcc6c3

Contents?: true

Size: 1.12 KB

Versions: 4

Compression:

Stored size: 1.12 KB

Contents

module Yaks
  class Mapper
    class Association
      include Equalizer.new(:name, :mapper, :rel)

      attr_reader :name, :mapper, :rel, :collection_mapper

      def initialize(name, mapper, rel, collection_mapper)
        @name, @mapper, @rel, @collection_mapper =
          name, mapper, rel, collection_mapper
      end

      # @param [#call] lookup
      #   A callable that can retrieve an association by its name
      # @return Array[rel, resource]
      #   Returns the rel (registered type or URI) + the associated, mapped resource
      def create_subresource(parent_mapper, lookup, context)
        [
          map_rel(parent_mapper, context.fetch(:policy)),
          map_resource(lookup[name], context)
        ]
      end

      def map_rel(parent_mapper, policy)
        return @rel unless @rel.equal?(Undefined)
        policy.derive_rel_from_association(parent_mapper, self)
      end

      def association_mapper(policy)
        return @mapper unless @mapper.equal?(Undefined)
        policy.derive_mapper_from_association(self)
      end

      # @abstract
      def map_resource(object, context)
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
yaks-0.4.2 lib/yaks/mapper/association.rb
yaks-0.4.1 lib/yaks/mapper/association.rb
yaks-0.4.0 lib/yaks/mapper/association.rb
yaks-0.4.0.rc1 lib/yaks/mapper/association.rb