Sha256: a34a7584784c9b2a2ba248102cd99c48c4e820aa38f72de547c5e1e7a8b3ea56

Contents?: true

Size: 1.25 KB

Versions: 8

Compression:

Stored size: 1.25 KB

Contents

module JSONAPIonify::Api
  module Resource::Builders
    class RelationshipBuilder < BaseBuilder
      include IdentityHelper
      delegate :type, to: :resource, prefix: true
      delegate :request, :includes, to: :context

      attr_reader :relationship, :related_resource, :context, :instance

      def initialize(resource, relationship:, context:, instance:)
        super(resource)
        @relationship = relationship
        @context = context
        @instance = instance
        @related_resource = resource.relationship(relationship.name)
      end

      def build
        Objects::Relationship.new.tap do |rel|
          rel[:links] = related_resource.build_links(build_url)
          rel[:data] = build_data if includes.present?
        end
      end

      private

      def build_data
        case relationship
        when Relationship::Many
          resolution.map do |child|
            relationship.build_resource_identifier(child)
          end
        when Relationship::One
          relationship.build_resource_identifier resolution
        end
      end

      def resolution
        instance.instance_exec(
          relationship.name,
          instance,
          context,
          &relationship.resolve
        )
      end

    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
jsonapionify-0.11.11 lib/jsonapionify/api/resource/builders/relationship_builder.rb
jsonapionify-0.11.10 lib/jsonapionify/api/resource/builders/relationship_builder.rb
jsonapionify-0.11.9 lib/jsonapionify/api/resource/builders/relationship_builder.rb
jsonapionify-0.11.8 lib/jsonapionify/api/resource/builders/relationship_builder.rb
jsonapionify-0.11.7 lib/jsonapionify/api/resource/builders/relationship_builder.rb
jsonapionify-0.11.6 lib/jsonapionify/api/resource/builders/relationship_builder.rb
jsonapionify-0.11.5 lib/jsonapionify/api/resource/builders/relationship_builder.rb
jsonapionify-0.11.0 lib/jsonapionify/api/resource/builders/relationship_builder.rb