class Nusii::Utils::JsonApiBuilder
Attributes
data[R]
extra[R]
is_collection[R]
Public Class Methods
new(data, extra)
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 6 def initialize data, extra @is_collection = data.is_a?(Array) @data = data.is_a?(Array) ? data : [data] @extra = extra end
Public Instance Methods
call()
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 12 def call is_collection ? parsed_data : parsed_data.first end
Private Instance Methods
attributes_for(resource_info)
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 24 def attributes_for resource_info {}.tap do |result| result.merge! flat_id_with_attributes_for resource_info result.merge! relationship_attributes_for(resource_info) end end
extract_from_included(resource_type, resource_id)
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 43 def extract_from_included resource_type, resource_id ( parsed_included.present? && parsed_included[resource_type][resource_id] ) || {'id' => resource_id } end
flat_id_with_attributes_for(item)
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 56 def flat_id_with_attributes_for item new_item = item['attributes'] new_item.tap do |new_item_temp| new_item_temp['id'] = item['id'] end end
parsed_data()
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 18 def parsed_data data.each_with_object([]) do |resource_info, result| result << resource_class.new(attributes_for(resource_info)) end end
parsed_included()
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 49 def parsed_included @parsed_included ||= (extra||{}).each_with_object({}) do |item, result| result[item['type']] ||= {} result[item['type']][item['id']] = flat_id_with_attributes_for(item) end end
relationship_attributes_for(resource_info)
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 31 def relationship_attributes_for resource_info (resource_info['relationships']||{}).each_with_object({}) do |(resource_type, resource_data), result| resource_data['data'].each do |related_resource| klass = "Nusii::#{resource_type.classify}".constantize resource_id = related_resource['id'] result[resource_type] ||= [] result[resource_type] << klass.new(extract_from_included(resource_type, resource_id)) end end end
resource_class()
click to toggle source
# File lib/nusii/utils/json_api_builder.rb, line 63 def resource_class "Nusii::#{data.first['type'].classify}".constantize end