class AbcJsonapi::IncludedResource
Attributes
includes[R]
includes_result[R]
resource[R]
serializer_namespace[R]
Public Class Methods
new(resource:, includes:, serializer_namespace:)
click to toggle source
# File lib/abc_jsonapi/included_resource.rb, line 5 def initialize(resource:, includes:, serializer_namespace:) @includes_result = [] @resource = resource @includes = includes @serializer_namespace = serializer_namespace end
Public Instance Methods
get_included_records(resource, include_chain)
click to toggle source
# File lib/abc_jsonapi/included_resource.rb, line 20 def get_included_records(resource, include_chain) return if resource.blank? || include_chain.empty? # Get first include name of include_chain and delete it from include_chain inc_resource_name = include_chain.shift # Check if include name is exist in relationships array. Take it or return nil resource_class_name = resource.is_a?(Enumerable) ? resource[0].class.name : resource.class.name relationship = serializer(resource_class_name).relationships.find { |h| h[:name] == inc_resource_name.to_sym } return if relationship.blank? # Get included resource if resource.is_a?(Enumerable) resource = resource.map{ |res| res.public_send(inc_resource_name) }.flatten.reject(&:blank?).uniq{ |item| item.id } else resource = resource.public_send(inc_resource_name) end return if resource.blank? @includes_result << serializer(inc_resource_name).new(resource).serializable_hash[:data] # If resource is a collection call get_included_records for each. Otherwise send whole resource if resource.is_a?(Enumerable) resource.each do |single_res| get_included_records(single_res, include_chain.dup) end else get_included_records(resource, include_chain) end end
serializable_hash()
click to toggle source
# File lib/abc_jsonapi/included_resource.rb, line 12 def serializable_hash includes.each do |include_path| include_chain = include_path.split('.') get_included_records(resource, include_chain.dup) end includes_result.flatten end
serializer(included_resource_name)
click to toggle source
# File lib/abc_jsonapi/included_resource.rb, line 51 def serializer(included_resource_name) (serializer_namespace + included_resource_name.to_s.classify + 'Serializer').constantize end