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