class JSONAPI::Renderer::ResourcesProcessor
@private
Public Instance Methods
process(resources, include, fields)
click to toggle source
# File lib/jsonapi/renderer/resources_processor.rb, line 7 def process(resources, include, fields) @resources = resources @include = include @fields = fields traverse_resources process_resources [@primary, @included] end
Private Instance Methods
enqueue_resource(res, prefix, include_dir)
click to toggle source
# File lib/jsonapi/renderer/resources_processor.rb, line 67 def enqueue_resource(res, prefix, include_dir) return unless @traversed.add?([res.jsonapi_type, res.jsonapi_id, prefix]) @queue << [res, prefix, include_dir] end
initialize_queue()
click to toggle source
# File lib/jsonapi/renderer/resources_processor.rb, line 31 def initialize_queue @resources.each do |res| @traversed.add([res.jsonapi_type, res.jsonapi_id, '']) traverse_resource(res, @include.keys, true) enqueue_related_resources(res, '', @include) end end
process_resources()
click to toggle source
# File lib/jsonapi/renderer/resources_processor.rb, line 74 def process_resources raise 'Not implemented' end
traverse_queue()
click to toggle source
# File lib/jsonapi/renderer/resources_processor.rb, line 39 def traverse_queue until @queue.empty? res, prefix, include_dir = @queue.shift traverse_resource(res, include_dir.keys, false) enqueue_related_resources(res, prefix, include_dir) end end
traverse_resource(res, include_keys, primary)
click to toggle source
# File lib/jsonapi/renderer/resources_processor.rb, line 47 def traverse_resource(res, include_keys, primary) ri = [res.jsonapi_type, res.jsonapi_id] if @include_rels.include?(ri) @include_rels[ri].merge(include_keys) else @include_rels[ri] = Set.new(include_keys) (primary ? @primary : @included) << res end end
traverse_resources()
click to toggle source
# File lib/jsonapi/renderer/resources_processor.rb, line 20 def traverse_resources @traversed = Set.new # [type, id, prefix] @include_rels = {} # [type, id => Set] @queue = [] @primary = [] @included = [] initialize_queue traverse_queue end