class Graphiti::Util::SerializerRelationship

Public Class Methods

new(resource_class, serializer, sideload) click to toggle source
# File lib/graphiti/util/serializer_relationships.rb, line 28
def initialize(resource_class, serializer, sideload)
  @resource_class = resource_class
  @serializer = serializer
  @sideload = sideload
end

Public Instance Methods

apply() click to toggle source
# File lib/graphiti/util/serializer_relationships.rb, line 34
def apply
  @serializer.relationship(@sideload.name, &block)
end

Private Instance Methods

block() click to toggle source
# File lib/graphiti/util/serializer_relationships.rb, line 46
def block
  link_ref = link?
  sideload_ref = @sideload
  data_proc_ref = data_proc
  self_ref = self
  validate_link! if eagerly_validate_links?

  proc do
    data { instance_eval(&data_proc_ref) }

    # include relationship links for belongs_to relationships
    # https://github.com/graphiti-api/graphiti/issues/167
    linkage always: sideload_ref.always_include_resource_ids?

    if link_ref
      if @proxy.query.links?
        self_ref.send(:validate_link!) unless self_ref.send(:eagerly_validate_links?)

        link(:related) do
          ::Graphiti::Util::Link.new(sideload_ref, @object).generate
        end
      end
    end
  end
end
data_proc() click to toggle source
# File lib/graphiti/util/serializer_relationships.rb, line 72
def data_proc
  sideload_ref = @sideload
  ->(_) {
    if (records = @object.public_send(sideload_ref.association_name))
      if records.respond_to?(:to_ary)
        records.each { |r| sideload_ref.resource.decorate_record(r) }
      else
        sideload_ref.resource.decorate_record(records)
      end

      records
    end
  }
end