class ActiveModelSerializers::Adapter::JsonApi::Relationship

Attributes

association[R]
parent_serializer[R]
serializable_resource_options[R]

Public Class Methods

new(parent_serializer, serializable_resource_options, association) click to toggle source

{jsonapi.org/format/#document-resource-object-related-resource-links Document Resource Object Related Resource Links} {jsonapi.org/format/#document-links Document Links} {jsonapi.org/format/#document-resource-object-linkage Document Resource Relationship Linkage} {jsonapi.org/format/#document-meta Document Meta}

# File lib/active_model_serializers/adapter/json_api/relationship.rb, line 9
def initialize(parent_serializer, serializable_resource_options, association)
  @parent_serializer = parent_serializer
  @association = association
  @serializable_resource_options = serializable_resource_options
end

Public Instance Methods

as_json() click to toggle source
# File lib/active_model_serializers/adapter/json_api/relationship.rb, line 15
def as_json
  hash = {}

  if association.options[:include_data]
    hash[:data] = data_for(association)
  end

  links = links_for(association)
  hash[:links] = links if links.any?

  meta = meta_for(association)
  hash[:meta] = meta if meta
  hash[:meta] = {} if hash.empty?

  hash
end

Private Instance Methods

data_for(association) click to toggle source
# File lib/active_model_serializers/adapter/json_api/relationship.rb, line 38
def data_for(association)
  serializer = association.serializer
  if serializer.respond_to?(:each)
    serializer.map { |s| ResourceIdentifier.new(s, serializable_resource_options).as_json }
  elsif (virtual_value = association.options[:virtual_value])
    virtual_value
  elsif serializer && serializer.object
    ResourceIdentifier.new(serializer, serializable_resource_options).as_json
  end
end
meta_for(association) click to toggle source
# File lib/active_model_serializers/adapter/json_api/relationship.rb, line 56
def meta_for(association)
  meta = association.meta
  meta.respond_to?(:call) ? parent_serializer.instance_eval(&meta) : meta
end