module Mongoid::Criteria::Queryable::Expandable

This module encapsulates methods that expand various high level query forms to the MongoDB hash condition selector syntax.

@example Example high level form.

Band.where(:foo.gt => 5)

@api private

Private Instance Methods

expand_condition_to_array_values(criterion) click to toggle source

Expand criterion values to arrays, to be used with operators that take an array as argument such as $in.

@example Convert all the values to arrays.

selectable.with_array_values({ key: 1...4 })

@param [ Hash ] criterion The criterion.

@return [ Hash ] The $in friendly criterion with array values.

@api private

# File lib/mongoid/criteria/queryable/expandable.rb, line 56
def expand_condition_to_array_values(criterion)
  if criterion.nil?
    raise ArgumentError, 'Criterion cannot be nil here'
  end

  Hash[criterion.map do |key, value|
    [key, value.__array__]
  end]
end
expand_one_condition(field, value) click to toggle source

Expands the specified condition to MongoDB syntax.

This method is meant to be called when processing the items of a condition hash and the key and the value of each item are already available separately.

The following parameter forms are accepted:

  • field is a string or symbol; value is the field query expresision

  • field is a Key instance; value is the field query expression

  • field is a string corresponding to a MongoDB operator; value is the operator value expression.

This method expands the field-value combination to the MongoDB selector syntax and returns an array of [expanded key, expanded value]. The expanded key is converted to a string if it wasn’t already a string.

@param [ String | Symbol | Key ] field The field to expand. @param [ Object ] value The field’s value.

@return [ Array<String, Object> ] The expanded field and value.

# File lib/mongoid/criteria/queryable/expandable.rb, line 40
def expand_one_condition(field, value)
  kv = field.__expr_part__(value.__expand_complex__, negating?)
  [kv.keys.first.to_s, kv.values.first]
end