class Apiphobic::JsonApi::Relationship
Attributes
data_class[RW]
name[RW]
raw_relationship[RW]
Public Class Methods
new(name:, data:, data_class: nil)
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 14 def initialize(name:, data:, data_class: nil) self.name = name self.raw_relationship = data self.data_class = data_class || data.class end
Public Instance Methods
to_rails_attributes()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 20 def to_rails_attributes __send__("#{embedded}_#{type}_to_rails_attributes") end
Private Instance Methods
data()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 117 def data raw_relationship[:data] end
embedded()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 81 def embedded if referenced? 'referenced' elsif embedded? 'embedded' elsif !has_data? 'empty' end end
embedded?()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 107 def embedded? return false unless has_data? Array(data)[0][:attributes] end
embedded_has_many_to_rails_attributes()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 38 def embedded_has_many_to_rails_attributes attribute = "#{name.pluralize}_attributes".to_sym has_many_attributes = data.map do |datum| relationship_attributes_to_rails_attributes(datum) end with_data_class(attribute, has_many_attributes) end
embedded_has_one_to_rails_attributes()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 26 def embedded_has_one_to_rails_attributes attribute = "#{name.singularize}_attributes".to_sym with_data_class(attribute, relationship_attributes_to_rails_attributes(data)) end
empty_empty_to_rails_attributes()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 56 def empty_empty_to_rails_attributes attribute = name.to_sym with_data_class(attribute, nil) end
empty_has_many_to_rails_attributes()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 62 def empty_has_many_to_rails_attributes attribute = "#{name.singularize}_ids".to_sym with_data_class(attribute, []) end
has_data?()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 113 def has_data? @has_data ||= Array(data).compact.any? end
has_many?()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 91 def has_many? data.is_a?(::Array) end
has_one?()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 95 def has_one? data.is_a?(::Hash) || data.is_a?(::ActionController::Parameters) rescue NameError false end
referenced?()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 101 def referenced? return false unless has_data? !Array(data)[0][:attributes] end
referenced_has_many_to_rails_attributes()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 48 def referenced_has_many_to_rails_attributes attribute = "#{name.singularize}_ids".to_sym has_many_attributes = data.map { |d| d[:id] } with_data_class(attribute, has_many_attributes) end
referenced_has_one_to_rails_attributes()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 32 def referenced_has_one_to_rails_attributes attribute = "#{name.singularize}_id".to_sym with_data_class(attribute, data[:id]) end
relationship_attributes_to_rails_attributes(other)
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 68 def relationship_attributes_to_rails_attributes(other) other[:attributes].dup.tap do |attrs| attrs.delete(:__id__) attrs[:id] = other[:id] if other[:id] end end
type()
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 75 def type return 'has_many' if has_many? return 'has_one' if has_one? return 'empty' unless has_data? end
with_data_class(key, value)
click to toggle source
# File lib/apiphobic/json_api/relationship.rb, line 121 def with_data_class(key, value) if data_class == ::Hash { key => value } elsif data_class == ::ActionController::Parameters ::ActionController::Parameters.new(key => value).tap(&:permit!) end rescue NameError { key => value } end