module Journey::Resource::WhereMultiple

Public Class Methods

count_multiple(c) click to toggle source
# File lib/journey/resource/where_multiple.rb, line 29
def self.count_multiple(c)
  # TODO refactor me to re-use all the same recursive query logic in `where_multiple`
  clauses = c.dup

  query = clauses.delete(:query)
  query_keys_with_array_values = query.map do |key, value|
    key if value.is_a?(Array)
  end.compact

  if branch_key = query_keys_with_array_values.first
    consistent_query = query.except(branch_key)
    value_branches = query[branch_key]

    value_branches.map do |value|
      branch_query = consistent_query.merge(branch_key => value)
      count_multiple(clauses.merge(query: branch_query))
    end.sum

  else
    count(clauses.merge(query: query))
  end

end
where_multiple(c) click to toggle source
# File lib/journey/resource/where_multiple.rb, line 7
def self.where_multiple(c)
  clauses = c.dup

  query = clauses.delete(:query)
  query_keys_with_array_values = query.map do |key, value|
    key if value.is_a?(Array)
  end.compact

  if branch_key = query_keys_with_array_values.first
    consistent_query = query.except(branch_key)
    value_branches = query[branch_key]

    value_branches.map do |value|
      branch_query = consistent_query.merge(branch_key => value)
      where_multiple(clauses.merge(query: branch_query))
    end.map(&:to_a).sum

  else
    where(clauses.merge(query: query))
  end
end