module Mongoid::Extensions::Time::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.

Time.demongoize(object)

@param [ Time ] object The time from Mongo.

@return [ Time | nil ] The object as a time.

# File lib/mongoid/extensions/time.rb, line 41
def demongoize(object)
  return if object.blank?
  time = if object.acts_like?(:time)
    Mongoid::Config.use_utc? ? object : object.getlocal
  elsif object.acts_like?(:date)
    ::Date.demongoize(object).to_time
  elsif object.is_a?(String)
    begin
      object.__mongoize_time__
    rescue ArgumentError
      nil
    end
  elsif object.is_a?(BSON::Timestamp)
    ::Time.at(object.seconds)
  end

  return if time.nil?

  time.in_time_zone(Mongoid.time_zone)
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.

Time.mongoize("2012-1-1")

@param [ Object ] object The object to mongoize.

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

# File lib/mongoid/extensions/time.rb, line 71
def mongoize(object)
  return if object.blank?
  begin
    time = object.respond_to?(:__mongoize_time__) ? object.__mongoize_time__ : nil
  rescue ArgumentError
    return
  end

  if time.acts_like?(:time)
    if object.respond_to?(:sec_fraction)
      ::Time.at(time.to_i, object.sec_fraction * 10**6).utc
    elsif time.respond_to?(:subsec)
      ::Time.at(time.to_i, time.subsec * 10**6).utc
    else
      ::Time.at(time.to_i, time.usec).utc
    end
  end
end