class JSONAPI::Deserializable::Relationship

Attributes

has_many_block[RW]
has_one_block[RW]

Public Class Methods

call(payload) click to toggle source
# File lib/jsonapi/deserializable/relationship.rb, line 18
def self.call(payload)
  new(payload).to_h
end
inherited(klass) click to toggle source
Calls superclass method
# File lib/jsonapi/deserializable/relationship.rb, line 12
def self.inherited(klass)
  super
  klass.has_one_block  = has_one_block
  klass.has_many_block = has_many_block
end
new(payload) click to toggle source
# File lib/jsonapi/deserializable/relationship.rb, line 22
def initialize(payload)
  @document = payload
  @data = payload['data']
  deserialize!

  freeze
end

Public Instance Methods

to_h()
Alias for: to_hash
to_hash() click to toggle source
# File lib/jsonapi/deserializable/relationship.rb, line 30
def to_hash
  @hash
end
Also aliased as: to_h

Private Instance Methods

deserialize!() click to toggle source
# File lib/jsonapi/deserializable/relationship.rb, line 37
def deserialize!
  @hash =
    if @data.is_a?(Array)
      deserialize_has_many
    elsif @data.nil? || @data.is_a?(Hash)
      deserialize_has_one
    end
end
deserialize_has_many() click to toggle source
# File lib/jsonapi/deserializable/relationship.rb, line 54
def deserialize_has_many
  block = self.class.has_many_block
  return {} unless block && @data.is_a?(Array)
  ids = @data.map { |ri| ri['id'] }
  types = @data.map { |ri| ri['type'] }
  block.call(@document, ids, types)
end
deserialize_has_one() click to toggle source
# File lib/jsonapi/deserializable/relationship.rb, line 46
def deserialize_has_one
  block = self.class.has_one_block
  return {} unless block
  id = @data && @data['id']
  type = @data && @data['type']
  block.call(@document, id, type)
end