/
time.rb
61 lines (54 loc) · 1.58 KB
/
time.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# frozen_string_literal: true
# rubocop:todo all
module Mongoid
class Criteria
module Queryable
module Extensions
# Adds query type-casting behavior to Time class.
module Time
# Evolve the time as a date, UTC midnight.
#
# @example Evolve the time to a date query format.
# time.__evolve_date__
#
# @return [ Time ] The date at midnight UTC.
def __evolve_date__
::Time.utc(year, month, day, 0, 0, 0, 0)
end
# Evolve the time into a utc time.
#
# @example Evolve the time.
# time.__evolve_time__
#
# @return [ Time ] The time in UTC.
def __evolve_time__
getutc
end
module ClassMethods
# Evolve the object to an date.
#
# @example Evolve dates.
#
# @example Evolve string dates.
#
# @example Evolve date ranges.
#
# @param [ Object ] object The object to evolve.
#
# @return [ Time ] The evolved date time.
def evolve(object)
res = begin
object.try(:__evolve_time__)
rescue ArgumentError
nil
end
res.nil? ? object : res
end
end
end
end
end
end
end
::Time.__send__(:include, Mongoid::Criteria::Queryable::Extensions::Time)
::Time.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Time::ClassMethods)