class JSONAPI::Record::Parser
Attributes
document[R]
Public Class Methods
new(document)
click to toggle source
@param document [JSONAPI::Types::Info, JSONAPI::Types::Success, JSONAPI::Types::Failure]
# File lib/jsonapi/record/parser.rb, line 19 def initialize(document) @document = document end
parse(document)
click to toggle source
@param document [JSONAPI::Types::Info, JSONAPI::Types::Success, JSONAPI::Types::Failure] @return [Hash]
# File lib/jsonapi/record/parser.rb, line 12 def self.parse(document) new(document).send(:parse) end
Private Instance Methods
included_resources()
click to toggle source
# File lib/jsonapi/record/parser.rb, line 91 def included_resources (document.included || []) end
parse()
click to toggle source
# File lib/jsonapi/record/parser.rb, line 23 def parse case document when Types::Info then parse_info_document when Types::Success then parse_success_document when Types::Failure then parse_failure_document end end
parse_failure_document()
click to toggle source
# File lib/jsonapi/record/parser.rb, line 44 def parse_failure_document { response_errors: document.errors } end
parse_info_document()
click to toggle source
# File lib/jsonapi/record/parser.rb, line 31 def parse_info_document { top_level_meta: document.meta } end
parse_relationship(relationship)
click to toggle source
# File lib/jsonapi/record/parser.rb, line 71 def parse_relationship(relationship) case relationship.data when Array parse_relationship_to_many(relationship) when Types::ResourceIdentifier parse_relationship_to_one(relationship) end end
parse_relationship_to_many(relationship)
click to toggle source
# File lib/jsonapi/record/parser.rb, line 86 def parse_relationship_to_many(relationship) related_resources_for(relationship) .map { |resource| parse_resource(resource) } end
parse_relationship_to_one(relationship)
click to toggle source
# File lib/jsonapi/record/parser.rb, line 80 def parse_relationship_to_one(relationship) if (resource = related_resources_for(relationship).first) # rubocop:disable Style/GuardClause parse_resource(resource) end end
parse_relationships(relationships)
click to toggle source
# File lib/jsonapi/record/parser.rb, line 63 def parse_relationships(relationships) return {} if included_resources.empty? || relationships.nil? relationships.each_with_object({}) do |(name, relationship), hash| hash[name] = parse_relationship(relationship) end end
parse_resource(resource)
click to toggle source
# File lib/jsonapi/record/parser.rb, line 48 def parse_resource(resource) { top_level_meta: document.meta, top_level_links: document.links, **resource.attributes.slice(:id, :relationships, :links, :meta), **resource.resource_attributes, **parse_relationships(resource.relationships), persisted: true }.compact end
parse_resource_collection(collection)
click to toggle source
# File lib/jsonapi/record/parser.rb, line 59 def parse_resource_collection(collection) collection.map { |resource| parse_resource(resource) } end
parse_success_document()
click to toggle source
# File lib/jsonapi/record/parser.rb, line 35 def parse_success_document case document.data when Array then parse_resource_collection(document.data) when Types::Resource then parse_resource(document.data) when NilClass {} end end