Sha256: b61777207f0a5daaccc576324d0ea82337ed4fbf5db5ab72be2069ad796e1706
Contents?: true
Size: 1.9 KB
Versions: 1
Compression:
Stored size: 1.9 KB
Contents
# frozen_string_literal: true module Dayman module Parsers class Base def initialize(resource:, response:) @resource = resource @raw_response = response end private def parsed_response @parsed_response ||= begin return if @raw_response.blank? JSON.parse(@raw_response).deep_symbolize_keys end end def resource_class_for(item) return if item.nil? item[:type].classify.safe_constantize end def response_item_to_object(item) return unless resource_class = resource_class_for(item) resource_class.new(item.slice(:id, :attributes)) end def build_relationship(resource, relationship_name, relationship_content) return unless resource.respond_to?(relationship_name) if relationship_content.is_a?(Array) build_collection_relationship(resource, relationship_name, relationship_content) else build_member_relationship(resource, relationship_name, relationship_content) end end def build_collection_relationship(resource, relationship_name, relationship_content) relationship_content.each do |relationship_item| included_item = find_included_item(relationship_item) next unless object = response_item_to_object(included_item) resource.send(relationship_name) << object end end def build_member_relationship(resource, relationship_name, relationship_content) included_item = find_included_item(relationship_content) return unless object = response_item_to_object(included_item) resource.send("#{relationship_name}=", object) end def find_included_item(relationship_item) parsed_response[:included].find do |e| e.slice(:id, :type) == relationship_item[:data].slice(:id, :type) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dayman-0.1.1 | lib/dayman/parsers/base.rb |