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