module Mongoid::Criteria::Queryable::Extensions::Range

Adds query type-casting behavior to Range class.

Public Instance Methods

__array__() click to toggle source

Get the range as an array.

@example Get the range as an array.

1...3.__array__

@return [ Array ] The range as an array.

# File lib/mongoid/criteria/queryable/extensions/range.rb, line 18
def __array__
  to_a
end
__evolve_date__() click to toggle source

Convert the range to a $gte/$lte mongo friendly query for dates.

@example Evolve the range.

(11231312..213123131).__evolve_date__

@return [ Hash ] The $gte/$lte range query with times at UTC midnight.

# File lib/mongoid/criteria/queryable/extensions/range.rb, line 28
def __evolve_date__
  __evolve_range_naive__.transform_values! {|v| v&.__evolve_date__ }
end
__evolve_range__(serializer: nil) click to toggle source

Convert the range to a $gte/$lte mongo friendly query.

@example Evolve the range.

(11231312..213123131).__evolve_range__

@param [ Object ] serializer The optional serializer for the field.

@return [ Hash ] The $gte/$lte range query.

@api private

# File lib/mongoid/criteria/queryable/extensions/range.rb, line 52
def __evolve_range__(serializer: nil)
  __evolve_range_naive__.transform_values! do |value|
    if serializer
      serializer.evolve(value)
    else
      case value
      when Time, DateTime then value.__evolve_time__
      when Date then value.__evolve_date__
      else value
      end
    end
  end
end
__evolve_time__() click to toggle source

Convert the range to a $gte/$lte mongo friendly query for times.

@example Evolve the range.

(11231312..213123131).__evolve_date__

@return [ Hash ] The $gte/$lte range query with times in UTC.

# File lib/mongoid/criteria/queryable/extensions/range.rb, line 38
def __evolve_time__
  __evolve_range_naive__.transform_values! {|v| v&.__evolve_time__ }
end

Private Instance Methods

__evolve_range_naive__() click to toggle source

@note This method’s return value will be mutated by the _evolve*__

methods, therefore it must always return new objects.

@api private

# File lib/mongoid/criteria/queryable/extensions/range.rb, line 72
def __evolve_range_naive__
  hash = {}
  hash['$gte'] = self.begin if self.begin
  hash[exclude_end? ? "$lt" : "$lte"] = self.end if self.end
  hash
end