class JSONApi::RelationshipSerializer

Public Instance Methods

as_json(object, **options) click to toggle source
# File lib/json_api/relationship_serializer.rb, line 5
def as_json(object, **options)
  serializer =
    (options[:to] == :many ? ToManySerializer : ToOneSerializer).new

  data  = serializer.data_for(object, options)
  links = serializer.links_for(object, options)

  result = {}
  result[:data]  = data  unless data.nil?  || data.empty?
  result[:links] = links unless links.nil? || links.empty?

  if result.empty?
    nil
  else
    result
  end
end

Protected Instance Methods

key_base_for(options) click to toggle source
# File lib/json_api/relationship_serializer.rb, line 35
def key_base_for(options)
  options[:name].to_s.singularize
end
key_for(options) click to toggle source
# File lib/json_api/relationship_serializer.rb, line 39
def key_for(options)
  key_base_for(options)
end
relationship_for(object, **options) click to toggle source
# File lib/json_api/relationship_serializer.rb, line 43
def relationship_for(object, **options)
  object.send(options[:key] || key_for(options))
end
resource_identifier_for(type_name, id) click to toggle source
# File lib/json_api/relationship_serializer.rb, line 47
def resource_identifier_for(type_name, id)
  return nil if id.nil? || id == ""

  {
    type: Utils.canonicalize_type_name(type_name),
    id:   Utils.canonicalize_id(id)
  }
end
type_for(object, options) click to toggle source
# File lib/json_api/relationship_serializer.rb, line 25
def type_for(object, options)
  if options[:polymorphic]
    foreign_type_key =
      options[:foreign_type_key] ||  "#{key_base_for(options)}_type"
    object.send(foreign_type_key)
  else
    options[:type] || options[:name]
  end
end