class Compendium::CollectionQuery

A CollectionQuery is a Query which runs once for each in a given set of criteria

Attributes

collection[RW]

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/compendium/collection_query.rb, line 8
def initialize(*)
  super
  self.collection = prepare_collection(@options[:collection])
end

Public Instance Methods

run(params, context = self) click to toggle source
# File lib/compendium/collection_query.rb, line 13
def run(params, context = self)
  collection_values = get_collection_values(context, params)

  results = collection_values.inject({}) do |r, (key, value)|
    res = collect_results(context, params, key, value)
    r[key] = res unless res.empty?
    r
  end

  # A CollectionQuery's results will be a ResultSet of ResultSets
  @results = ResultSet.new(results)
end

Private Instance Methods

get_collection_values(context, params) click to toggle source
# File lib/compendium/collection_query.rb, line 28
def get_collection_values(context, params)
  self.collection = get_associated_query(collection) if collection.is_a?(Symbol)

  if collection.is_a?(Query)
    collection.run(params, context) unless collection.ran?
    collection.results
  elsif collection.is_a?(Proc)
    prepare_collection(collection.call(params))
  else
    collection
  end
end
prepare_collection(collection) click to toggle source
# File lib/compendium/collection_query.rb, line 41
def prepare_collection(collection)
  return collection if collection.is_a?(Query) || collection.is_a?(Symbol) || collection.is_a?(Proc)
  collection.is_a?(Hash) ? collection : Hash[collection.zip(collection)]
end