class Caprese::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/caprese/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/caprese/adapter/json_api/relationship.rb, line 15 def as_json hash = {} if association.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 end
Private Instance Methods
data_for(association)
click to toggle source
TODO(BF): Avoid db hit on belong_to_ releationship by using foreign_key on self
# File lib/caprese/adapter/json_api/relationship.rb, line 38 def data_for(association) if association.collection? data_for_many(association) else data_for_one(association) end end
data_for_many(association)
click to toggle source
# File lib/caprese/adapter/json_api/relationship.rb, line 58 def data_for_many(association) # TODO(BF): Process relationship without evaluating lazy_association collection_serializer = association.lazy_association.serializer if collection_serializer.respond_to?(:each) collection_serializer.map do |serializer| ResourceIdentifier.new(serializer, serializable_resource_options).as_json end elsif (virtual_value = association.virtual_value) virtual_value else [] end end
data_for_one(association)
click to toggle source
# File lib/caprese/adapter/json_api/relationship.rb, line 46 def data_for_one(association) # TODO(BF): Process relationship without evaluating lazy_association serializer = association.lazy_association.serializer if (virtual_value = association.virtual_value) virtual_value elsif serializer && association.object ResourceIdentifier.new(serializer, serializable_resource_options).as_json else nil end end
links_for(association)
click to toggle source
# File lib/caprese/adapter/json_api/relationship.rb, line 72 def links_for(association) association.links.each_with_object({}) do |(key, value), hash| result = Link.new(parent_serializer, value).as_json hash[key] = result if result end end
meta_for(association)
click to toggle source
# File lib/caprese/adapter/json_api/relationship.rb, line 79 def meta_for(association) meta = association.meta meta.respond_to?(:call) ? parent_serializer.instance_eval(&meta) : meta end