class JsonapiCompliable::Util::RelationshipPayload
Helper methods for traversing the 'relationships' JSONAPI payloads @api private
Attributes
payload[R]
resource[R]
Public Class Methods
iterate(resource:, relationships: {}, only: [], except: []) { |sideload, relationship_data, sub_relationships| ... }
click to toggle source
# File lib/jsonapi_compliable/util/relationship_payload.rb, line 8 def self.iterate(resource:, relationships: {}, only: [], except: []) instance = new(resource, relationships, only: only, except: except) instance.iterate do |sideload, relationship_data, sub_relationships| yield sideload, relationship_data, sub_relationships end end
new(resource, payload, only: [], except: [])
click to toggle source
# File lib/jsonapi_compliable/util/relationship_payload.rb, line 15 def initialize(resource, payload, only: [], except: []) @resource = resource @payload = payload @only = only @except = except end
Public Instance Methods
iterate() { |payload_for(sl, rp)| ... }
click to toggle source
# File lib/jsonapi_compliable/util/relationship_payload.rb, line 22 def iterate payload.each_pair do |relationship_name, relationship_payload| if sl = resource.sideload(relationship_name.to_sym) if should_yield?(sl.type) if relationship_payload.is_a?(Array) relationship_payload.each do |rp| yield payload_for(sl, rp) end else yield payload_for(sl, relationship_payload) end end end end end
Private Instance Methods
payload_for(sideload, relationship_payload)
click to toggle source
# File lib/jsonapi_compliable/util/relationship_payload.rb, line 45 def payload_for(sideload, relationship_payload) if sideload.polymorphic? type = relationship_payload[:meta][:jsonapi_type] sideload = sideload.polymorphic_child_for_type(type) end relationship_payload[:meta][:method] ||= :update { sideload: sideload, is_polymorphic: !sideload.parent.nil?, primary_key: sideload.primary_key, foreign_key: sideload.foreign_key, attributes: relationship_payload[:attributes], meta: relationship_payload[:meta], relationships: relationship_payload[:relationships] } end
should_yield?(type)
click to toggle source
# File lib/jsonapi_compliable/util/relationship_payload.rb, line 40 def should_yield?(type) (@only.length > 0 && @only.include?(type)) || (@except.length > 0 && !@except.include?(type)) end