module Mongoid::Extensions::Range::ClassMethods

Public Instance Methods

demongoize(object) click to toggle source

Convert the object from its mongo friendly ruby type to this type.

@example Demongoize the object.

Range.demongoize({ "min" => 1, "max" => 5 })

@param [ Hash ] object The object to demongoize.

@return [ Range | nil ] The range, or nil if object cannot be represented as range.

# File lib/mongoid/extensions/range.rb, line 54
def demongoize(object)
  return if object.nil?
  if object.is_a?(Hash)
    hash = object.slice('min', 'max', 'exclude_end', :min, :max, :exclude_end)
    unless hash.blank?
      begin
        ::Range.new(hash["min"] || hash[:min],
                    hash["max"] || hash[:max],
                    hash["exclude_end"] || hash[:exclude_end])
      rescue ArgumentError
        nil
      end
    end
  end
end
mongoize(object) click to toggle source

Turn the object from the ruby type we deal with to a Mongo friendly type.

@example Mongoize the object.

Range.mongoize(1..3)

@param [ Object ] object The object to mongoize.

@return [ Hash | nil ] The object mongoized or nil.

# File lib/mongoid/extensions/range.rb, line 79
def mongoize(object)
  return if object.nil?
  case object
  when Hash then __mongoize_hash__(object)
  when Range then __mongoize_range__(object)
  end
end

Private Instance Methods

__mongoize_hash__(object) click to toggle source
# File lib/mongoid/extensions/range.rb, line 89
def __mongoize_hash__(object)
  hash = object.stringify_keys
  hash.slice!('min', 'max', 'exclude_end')
  hash.compact!
  hash.transform_values!(&:mongoize)
  hash.blank? ? nil : hash
end
__mongoize_range__(object) click to toggle source
# File lib/mongoid/extensions/range.rb, line 97
def __mongoize_range__(object)
  hash = {}
  hash['min'] = object.begin.mongoize if object.begin
  hash['max'] = object.end.mongoize if object.end
  if object.respond_to?(:exclude_end?) && object.exclude_end?
    hash['exclude_end'] = true
  end
  hash
end