tod 1.5.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +25 -35
- data/MIT-LICENSE +1 -1
- data/README.markdown +138 -59
- data/lib/tod.rb +0 -10
- data/lib/tod/conversions.rb +9 -11
- data/lib/tod/core_extensions.rb +2 -0
- data/lib/tod/date_extensions.rb +15 -0
- data/lib/tod/mongoization.rb +10 -1
- data/lib/tod/shift.rb +35 -21
- data/lib/tod/time_extensions.rb +9 -0
- data/lib/tod/version.rb +1 -1
- data/test/support/active_record.rb +2 -2
- data/test/test_helper.rb +5 -3
- data/test/tod/conversion_test.rb +29 -25
- data/test/tod/date_test.rb +11 -12
- data/test/tod/shift_test.rb +132 -57
- data/test/tod/time_of_day_serializable_attribute_test.rb +14 -10
- data/test/tod/time_of_day_test.rb +94 -97
- data/test/tod/time_of_day_time_zone_with_active_support_test.rb +23 -9
- data/test/tod/time_test.rb +4 -4
- data/tod.gemspec +1 -3
- metadata +6 -34
- data/lib/tod/date.rb +0 -11
- data/lib/tod/time.rb +0 -5
- data/test/tod/a_a_a_time_of_day_time_zone_without_active_support_test.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ea9182b8d4d70181c761c96a87a97bc3ac8c316
|
4
|
+
data.tar.gz: 846e0db24fb222b1e445e50eb5a6623b020ee82f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50d7a807b6cbee926593c019abba1ee47f2c9f13ca00f1cf85a7a1213a70951db5b490b02ceb10e93b40784d9243ba71ee68fa0f3ed6d51c327cc687abae066e
|
7
|
+
data.tar.gz: abdea735146667ace0f136b4040b2f9fd762ec1e2179febd7e51e608ef68827c62bdd720a2222aba77a1e3d8a0249979fce3bc5c83e491d05d44448935938c10
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 2.0.0 (April 18, 2015)
|
2
|
+
|
3
|
+
* Shift now supports exclusive ends like a Ruby range
|
4
|
+
* Add Shift#overlaps? (Michael Amor Righi)
|
5
|
+
* Add Shift#contains? (Michael Amor Righi)
|
6
|
+
* Do not pollute global namespace
|
7
|
+
|
1
8
|
# 1.5.0 (January 15, 2015)
|
2
9
|
|
3
10
|
* Fix: return nil unless other is comparable (Peter Yates)
|
data/Gemfile.lock
CHANGED
@@ -1,52 +1,42 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tod (1.
|
4
|
+
tod (1.5.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
activemodel (
|
10
|
-
activesupport (=
|
11
|
-
builder (~> 3.
|
12
|
-
activerecord (
|
13
|
-
activemodel (=
|
14
|
-
activesupport (=
|
15
|
-
arel (~>
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
builder (3.
|
24
|
-
i18n (0.
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
shoulda-matchers (~> 1.0, >= 1.4.1)
|
33
|
-
shoulda-context (1.1.1)
|
34
|
-
shoulda-matchers (1.5.6)
|
35
|
-
activesupport (>= 3.0.0)
|
36
|
-
bourne (~> 1.3)
|
37
|
-
sqlite3 (1.3.7)
|
38
|
-
test-unit (2.5.4)
|
39
|
-
tzinfo (0.3.37)
|
9
|
+
activemodel (4.2.0)
|
10
|
+
activesupport (= 4.2.0)
|
11
|
+
builder (~> 3.1)
|
12
|
+
activerecord (4.2.0)
|
13
|
+
activemodel (= 4.2.0)
|
14
|
+
activesupport (= 4.2.0)
|
15
|
+
arel (~> 6.0)
|
16
|
+
activesupport (4.2.0)
|
17
|
+
i18n (~> 0.7)
|
18
|
+
json (~> 1.7, >= 1.7.7)
|
19
|
+
minitest (~> 5.1)
|
20
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
21
|
+
tzinfo (~> 1.1)
|
22
|
+
arel (6.0.0)
|
23
|
+
builder (3.2.2)
|
24
|
+
i18n (0.7.0)
|
25
|
+
json (1.8.2)
|
26
|
+
minitest (5.5.1)
|
27
|
+
rake (10.4.2)
|
28
|
+
sqlite3 (1.3.10)
|
29
|
+
thread_safe (0.3.4)
|
30
|
+
tzinfo (1.2.2)
|
31
|
+
thread_safe (~> 0.1)
|
40
32
|
|
41
33
|
PLATFORMS
|
42
34
|
ruby
|
43
35
|
|
44
36
|
DEPENDENCIES
|
45
37
|
activerecord (>= 3.0.0)
|
46
|
-
|
38
|
+
minitest
|
47
39
|
rake
|
48
|
-
shoulda
|
49
40
|
sqlite3
|
50
|
-
test-unit
|
51
41
|
tod!
|
52
42
|
tzinfo
|
data/MIT-LICENSE
CHANGED
data/README.markdown
CHANGED
@@ -24,8 +24,8 @@ Loading Tod
|
|
24
24
|
Creating from hour, minute, and second
|
25
25
|
--------------------------------------
|
26
26
|
|
27
|
-
TimeOfDay.new 8 # => 08:00:00
|
28
|
-
TimeOfDay.new 8, 15, 30 # => 08:15:30
|
27
|
+
Tod::TimeOfDay.new 8 # => 08:00:00
|
28
|
+
Tod::TimeOfDay.new 8, 15, 30 # => 08:15:30
|
29
29
|
|
30
30
|
Parsing text
|
31
31
|
------------
|
@@ -33,70 +33,74 @@ Parsing text
|
|
33
33
|
Strings only need to contain an hour. Minutes, seconds, AM or PM, and colons
|
34
34
|
are all optional.
|
35
35
|
|
36
|
-
TimeOfDay.parse "8" # => 08:00:00
|
37
|
-
TimeOfDay.parse "8am" # => 08:00:00
|
38
|
-
TimeOfDay.parse "8pm" # => 20:00:00
|
39
|
-
TimeOfDay.parse "8p" # => 20:00:00
|
40
|
-
TimeOfDay.parse "9:30" # => 09:30:00
|
41
|
-
TimeOfDay.parse "15:30" # => 15:30:00
|
42
|
-
TimeOfDay.parse "3:30pm" # => 15:30:00
|
43
|
-
TimeOfDay.parse "1230" # => 12:30:00
|
44
|
-
TimeOfDay.parse "3:25:58" # => 03:25:58
|
45
|
-
TimeOfDay.parse "515p" # => 17:15:00
|
46
|
-
TimeOfDay.parse "151253" # => 15:12:53
|
47
|
-
TimeOfDay.parse "noon" # => 12:00:00
|
48
|
-
TimeOfDay.parse "midnight" # => 00:00:00
|
49
|
-
|
50
|
-
TimeOfDay.parse raises an ArgumentError
|
51
|
-
parsable. TimeOfDay.try_parse will instead return nil if the argument is not
|
36
|
+
Tod::TimeOfDay.parse "8" # => 08:00:00
|
37
|
+
Tod::TimeOfDay.parse "8am" # => 08:00:00
|
38
|
+
Tod::TimeOfDay.parse "8pm" # => 20:00:00
|
39
|
+
Tod::TimeOfDay.parse "8p" # => 20:00:00
|
40
|
+
Tod::TimeOfDay.parse "9:30" # => 09:30:00
|
41
|
+
Tod::TimeOfDay.parse "15:30" # => 15:30:00
|
42
|
+
Tod::TimeOfDay.parse "3:30pm" # => 15:30:00
|
43
|
+
Tod::TimeOfDay.parse "1230" # => 12:30:00
|
44
|
+
Tod::TimeOfDay.parse "3:25:58" # => 03:25:58
|
45
|
+
Tod::TimeOfDay.parse "515p" # => 17:15:00
|
46
|
+
Tod::TimeOfDay.parse "151253" # => 15:12:53
|
47
|
+
Tod::TimeOfDay.parse "noon" # => 12:00:00
|
48
|
+
Tod::TimeOfDay.parse "midnight" # => 00:00:00
|
49
|
+
|
50
|
+
Tod::TimeOfDay.parse raises an ArgumentError if the argument to parse is not
|
51
|
+
parsable. Tod::TimeOfDay.try_parse will instead return nil if the argument is not
|
52
52
|
parsable.
|
53
53
|
|
54
|
-
TimeOfDay.try_parse "3:30pm" # => 15:30:00
|
55
|
-
TimeOfDay.try_parse "foo" # => nil
|
54
|
+
Tod::TimeOfDay.try_parse "3:30pm" # => 15:30:00
|
55
|
+
Tod::TimeOfDay.try_parse "foo" # => nil
|
56
56
|
|
57
|
-
Values can be tested with TimeOfDay.parsable? to see if they can be parsed.
|
57
|
+
Values can be tested with Tod::TimeOfDay.parsable? to see if they can be parsed.
|
58
58
|
|
59
|
-
TimeOfDay.parsable? "3:30pm" # => true
|
60
|
-
TimeOfDay.parsable? "foo" # => false
|
59
|
+
Tod::TimeOfDay.parsable? "3:30pm" # => true
|
60
|
+
Tod::TimeOfDay.parsable? "foo" # => false
|
61
61
|
|
62
62
|
Adding or subtracting time
|
63
63
|
-----------------------------
|
64
64
|
|
65
|
-
Seconds can be added to or subtracted TimeOfDay objects. Time correctly wraps
|
65
|
+
Seconds can be added to or subtracted Tod::TimeOfDay objects. Time correctly wraps
|
66
66
|
around midnight.
|
67
67
|
|
68
|
-
TimeOfDay.new(8) + 3600 # => 09:00:00
|
69
|
-
TimeOfDay.new(8) - 3600 # => 07:00:00
|
70
|
-
TimeOfDay.new(0) - 30 # => 23:59:30
|
71
|
-
TimeOfDay.new(23,59,45) + 30 # => 00:00:15
|
68
|
+
Tod::TimeOfDay.new(8) + 3600 # => 09:00:00
|
69
|
+
Tod::TimeOfDay.new(8) - 3600 # => 07:00:00
|
70
|
+
Tod::TimeOfDay.new(0) - 30 # => 23:59:30
|
71
|
+
Tod::TimeOfDay.new(23,59,45) + 30 # => 00:00:15
|
72
72
|
|
73
73
|
Comparing
|
74
74
|
--------------------
|
75
75
|
|
76
|
-
TimeOfDay includes Comparable.
|
76
|
+
Tod::TimeOfDay includes Comparable.
|
77
77
|
|
78
|
-
TimeOfDay.new(8) < TimeOfDay.new(9) # => true
|
79
|
-
TimeOfDay.new(8) == TimeOfDay.new(9) # => false
|
80
|
-
TimeOfDay.new(9) == TimeOfDay.new(9) # => true
|
81
|
-
TimeOfDay.new(10) > TimeOfDay.new(9) # => true
|
78
|
+
Tod::TimeOfDay.new(8) < Tod::TimeOfDay.new(9) # => true
|
79
|
+
Tod::TimeOfDay.new(8) == Tod::TimeOfDay.new(9) # => false
|
80
|
+
Tod::TimeOfDay.new(9) == Tod::TimeOfDay.new(9) # => true
|
81
|
+
Tod::TimeOfDay.new(10) > Tod::TimeOfDay.new(9) # => true
|
82
82
|
|
83
83
|
Formatting
|
84
84
|
----------
|
85
85
|
|
86
86
|
Format strings are passed to Time#strftime.
|
87
87
|
|
88
|
-
TimeOfDay.new(8,30).strftime("%H:%M") # => "08:30"
|
89
|
-
TimeOfDay.new(17,15).strftime("%I:%M %p") # => "05:15 PM"
|
90
|
-
TimeOfDay.new(22,5,15).strftime("%I:%M:%S %p") # => "10:05:15 PM"
|
88
|
+
Tod::TimeOfDay.new(8,30).strftime("%H:%M") # => "08:30"
|
89
|
+
Tod::TimeOfDay.new(17,15).strftime("%I:%M %p") # => "05:15 PM"
|
90
|
+
Tod::TimeOfDay.new(22,5,15).strftime("%I:%M:%S %p") # => "10:05:15 PM"
|
91
91
|
|
92
92
|
Convenience methods for dates and times
|
93
93
|
---------------------------------------
|
94
94
|
|
95
|
-
|
96
|
-
then require 'tod/time_of_day' instead of 'tod'.
|
95
|
+
Pass a date to Tod::TimeOfDay#on and it will return a time with that date and time.
|
97
96
|
|
98
|
-
tod = TimeOfDay.new 8, 30
|
97
|
+
tod = Tod::TimeOfDay.new 8, 30 # => 08:30:00
|
99
98
|
tod.on Date.today # => 2010-12-29 08:30:00 -0600
|
99
|
+
|
100
|
+
Tod offers Date#at and Time#to_time_of_day. Require 'tod/core_extensions' to enable.
|
101
|
+
|
102
|
+
require 'tod/core_extensions'
|
103
|
+
tod = Tod::TimeOfDay.new 8, 30 # => 08:30:00
|
100
104
|
Date.today.at tod # => 2010-12-29 08:30:00 -0600
|
101
105
|
Time.now.to_time_of_day # => 16:30:43
|
102
106
|
DateTime.now.to_time_of_day # => 16:30:43
|
@@ -106,57 +110,132 @@ Conversion method
|
|
106
110
|
|
107
111
|
Tod provides a conversion method which will handle a variety of input types:
|
108
112
|
|
109
|
-
TimeOfDay(TimeOfDay.new(8, 30)) # => 08:30:00
|
110
|
-
TimeOfDay("09:45") # => 09:45:00
|
111
|
-
TimeOfDay(Time.new(2014, 1, 1, 12, 30)) # => 12:30:00
|
112
|
-
TimeOfDay(Date.new(2014, 1, 1)) # => 00:00:00
|
113
|
+
Tod::TimeOfDay(Tod::TimeOfDay.new(8, 30)) # => 08:30:00
|
114
|
+
Tod::TimeOfDay("09:45") # => 09:45:00
|
115
|
+
Tod::TimeOfDay(Time.new(2014, 1, 1, 12, 30)) # => 12:30:00
|
116
|
+
Tod::TimeOfDay(Date.new(2014, 1, 1)) # => 00:00:00
|
113
117
|
|
114
118
|
|
115
119
|
Shifts
|
116
120
|
=======================
|
117
121
|
|
118
|
-
|
119
|
-
|
120
|
-
|
122
|
+
Tod::Shift is a range-like object that represents a period of time, using a
|
123
|
+
beginning and ending Tod::TimeOfDay. Allows to calculate its duration and to
|
124
|
+
determine if a Tod::TimeOfDay is included inside the shift. For nightly shifts
|
125
|
+
(when beginning time is greater than ending time), it supposes the shift ends
|
126
|
+
the following day. Tod::Shift behaves like a Ruby range in that it defaults to
|
127
|
+
inclusive endings. For exclusive endings, pass true as the third argument
|
128
|
+
(like a Ruby range).
|
121
129
|
|
122
|
-
Creating from TimeOfDay
|
130
|
+
Creating from Tod::TimeOfDay
|
123
131
|
--------------------------------------
|
124
132
|
|
125
|
-
Shift.new(TimeOfDay.new(9), TimeOfDay.new(17))
|
126
|
-
Shift.new(TimeOfDay.new(22), TimeOfDay.new(4))
|
133
|
+
Tod::Shift.new(Tod::TimeOfDay.new(9), Tod::TimeOfDay.new(17))
|
134
|
+
Tod::Shift.new(Tod::TimeOfDay.new(22), Tod::TimeOfDay.new(4))
|
127
135
|
|
128
136
|
Duration
|
129
137
|
--------------------
|
130
138
|
|
131
|
-
Shift.new(TimeOfDay.new(9), TimeOfDay.new(17)).duration # => 28800
|
132
|
-
Shift.new(TimeOfDay.new(20), TimeOfDay.new(2)).duration # => 21600
|
139
|
+
Tod::Shift.new(Tod::TimeOfDay.new(9), Tod::TimeOfDay.new(17)).duration # => 28800
|
140
|
+
Tod::Shift.new(Tod::TimeOfDay.new(20), Tod::TimeOfDay.new(2)).duration # => 21600
|
133
141
|
|
134
142
|
Include?
|
135
143
|
--------------------
|
136
144
|
|
137
|
-
Shift.new(TimeOfDay.new(9), TimeOfDay.new(17)).include?(TimeOfDay.new(12)) # => true
|
138
|
-
Shift.new(TimeOfDay.new(9), TimeOfDay.new(17)).include?(TimeOfDay.new(7)) # => false
|
139
|
-
Shift.new(TimeOfDay.new(20), TimeOfDay.new(4)).include?(TimeOfDay.new(2)) # => true
|
140
|
-
Shift.new(TimeOfDay.new(20), TimeOfDay.new(4)).include?(TimeOfDay.new(18)) # => false
|
145
|
+
Tod::Shift.new(Tod::TimeOfDay.new(9), Tod::TimeOfDay.new(17)).include?(Tod::TimeOfDay.new(12)) # => true
|
146
|
+
Tod::Shift.new(Tod::TimeOfDay.new(9), Tod::TimeOfDay.new(17)).include?(Tod::TimeOfDay.new(7)) # => false
|
147
|
+
Tod::Shift.new(Tod::TimeOfDay.new(20), Tod::TimeOfDay.new(4)).include?(Tod::TimeOfDay.new(2)) # => true
|
148
|
+
Tod::Shift.new(Tod::TimeOfDay.new(20), Tod::TimeOfDay.new(4)).include?(Tod::TimeOfDay.new(18)) # => false
|
149
|
+
|
150
|
+
#include? respects exclusive endings.
|
151
|
+
|
152
|
+
Tod::Shift.new(Tod::TimeOfDay.new(5), Tod::TimeOfDay.new(9)).include?(Tod::TimeOfDay.new(9)) # => true
|
153
|
+
Tod::Shift.new(Tod::TimeOfDay.new(5), Tod::TimeOfDay.new(9), true).include?(Tod::TimeOfDay.new(9)) # => false
|
154
|
+
|
155
|
+
|
156
|
+
Overlap?
|
157
|
+
--------------------
|
158
|
+
|
159
|
+
breakfast = Tod::Shift.new(Tod::TimeOfDay.new(8), Tod::TimeOfDay.new(11))
|
160
|
+
lunch = Tod::Shift.new(Tod::TimeOfDay.new(10), Tod::TimeOfDay.new(14))
|
161
|
+
breakfast.overlaps?(lunch) # => true
|
162
|
+
lunch.overlaps?(breakfast) # => true
|
163
|
+
|
164
|
+
dinner = Tod::Shift.new(Tod::TimeOfDay.new(18), Tod::TimeOfDay.new(20))
|
165
|
+
dinner.overlaps?(lunch) # => false
|
166
|
+
|
167
|
+
# Exclude ending
|
168
|
+
morning_shift = Tod::Shift.new(Tod::TimeOfDay.new(9), Tod::TimeOfDay.new(17), true)
|
169
|
+
evening_shift = Tod::Shift.new(Tod::TimeOfDay.new(17), Tod::TimeOfDay.new(1), true)
|
170
|
+
morning_shift.overlaps?(evening_shift) # => false
|
171
|
+
|
172
|
+
|
173
|
+
Contains?
|
174
|
+
--------------------
|
175
|
+
workday = Shift.new(TimeOfDay.new(9), TimeOfDay.new(17))
|
176
|
+
lunch = Shift.new(TimeOfDay.new(10), TimeOfDay.new(14))
|
177
|
+
workday.contains?(lunch) # => true
|
178
|
+
lunch.contains?(workday) # => false
|
179
|
+
|
180
|
+
dinner = Shift.new(TimeOfDay.new(18), TimeOfDay.new(20))
|
181
|
+
dinner.overlaps?(lunch) # => false
|
182
|
+
|
141
183
|
|
142
184
|
Rails Time Zone Support
|
143
185
|
=======================
|
144
186
|
|
145
|
-
If Rails time zone support is loaded, Date#on and TimeOfDay#at will automatically use Time.zone.
|
187
|
+
If Rails time zone support is loaded, Date#on and Tod::TimeOfDay#at will automatically use Time.zone.
|
146
188
|
|
147
189
|
Active Record Serializable Attribute Support
|
148
190
|
=======================
|
149
|
-
TimeOfDay implements a custom serialization contract for
|
191
|
+
Tod::TimeOfDay implements a custom serialization contract for ActiveRecord serialize which allows to store Tod::TimeOfDay directly
|
150
192
|
in a column of the time type.
|
151
193
|
Example:
|
152
194
|
```ruby
|
153
195
|
class Order < ActiveRecord::Base
|
154
196
|
serialize :time, Tod::TimeOfDay
|
155
197
|
end
|
156
|
-
order = Order.create(time: TimeOfDay.new(9,30))
|
198
|
+
order = Order.create(time: Tod::TimeOfDay.new(9,30))
|
157
199
|
order.time # => 09:30:00
|
158
200
|
```
|
159
201
|
|
202
|
+
MongoDB Support
|
203
|
+
===============
|
204
|
+
|
205
|
+
Tod includes optional serialization support for Tod::TimeOfDay to be serialized to MongoDB.
|
206
|
+
|
207
|
+
```
|
208
|
+
require 'tod/mongoization'
|
209
|
+
```
|
210
|
+
|
211
|
+
Upgrading from Versions Prior to 2.0.0
|
212
|
+
======================================
|
213
|
+
|
214
|
+
Tod has a new focus on not polluting the global namespace.
|
215
|
+
|
216
|
+
Tod no longer puts Tod::TimeOfDay and Tod::Shift in the global namespace by default. You can either fully qualify access to these classes or include Tod in the global namespace.
|
217
|
+
|
218
|
+
```
|
219
|
+
require 'tod'
|
220
|
+
include Tod # TimeOfDay and Shift are now in the global namespace like in versions prior to 2.0.0
|
221
|
+
```
|
222
|
+
|
223
|
+
Tod no longer automatically extends the Time and Date classes. Require them explicitly.
|
224
|
+
|
225
|
+
```
|
226
|
+
require 'tod/core_extensions'
|
227
|
+
tod = Tod::TimeOfDay.new 8, 30 # => 08:30:00
|
228
|
+
Date.today.at tod # => 2010-12-29 08:30:00 -0600
|
229
|
+
Time.now.to_time_of_day # => 16:30:43
|
230
|
+
DateTime.now.to_time_of_day # => 16:30:43
|
231
|
+
```
|
232
|
+
|
233
|
+
Tod no longer automatically includes MongoDB serialization methods in Tod::TimeOfDay. Require them explicitly.
|
234
|
+
|
235
|
+
```
|
236
|
+
require 'tod/mongoization'
|
237
|
+
```
|
238
|
+
|
160
239
|
Compatibility
|
161
240
|
=============
|
162
241
|
|
@@ -168,4 +247,4 @@ Tod is compatible with Ruby 1.9.3, 2.0.0, 2.1.8, and 2.2.0. It is tested against
|
|
168
247
|
License
|
169
248
|
=======
|
170
249
|
|
171
|
-
Copyright (c) 2010-
|
250
|
+
Copyright (c) 2010-2015 Jack Christensen, released under the MIT license
|
data/lib/tod.rb
CHANGED
@@ -1,13 +1,3 @@
|
|
1
1
|
require 'tod/time_of_day'
|
2
|
-
require 'tod/date'
|
3
|
-
require 'tod/time'
|
4
2
|
require 'tod/shift'
|
5
3
|
require 'tod/conversions'
|
6
|
-
require 'tod/mongoization'
|
7
|
-
|
8
|
-
include Tod
|
9
|
-
include Tod::Conversions
|
10
|
-
class TimeOfDay
|
11
|
-
include(Tod::Mongoization)
|
12
|
-
extend(Tod::Mongoization::ClassMethods)
|
13
|
-
end
|
data/lib/tod/conversions.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
module Tod
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
obj_or_string.to_time_of_day
|
10
|
-
else
|
11
|
-
TimeOfDay.parse(obj_or_string)
|
12
|
-
end
|
2
|
+
def TimeOfDay(obj_or_string)
|
3
|
+
if obj_or_string.is_a?(TimeOfDay)
|
4
|
+
obj_or_string
|
5
|
+
elsif obj_or_string.respond_to?(:to_time_of_day)
|
6
|
+
obj_or_string.to_time_of_day
|
7
|
+
else
|
8
|
+
TimeOfDay.parse(obj_or_string)
|
13
9
|
end
|
14
10
|
end
|
11
|
+
|
12
|
+
module_function :TimeOfDay
|
15
13
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Tod
|
2
|
+
module DateExtensions
|
3
|
+
# Returns a local Time instance with this date and time_of_day
|
4
|
+
# Pass in time_zone to use ActiveSupport::TimeZone
|
5
|
+
def at(time_of_day, time_zone=Tod::TimeOfDay.time_zone)
|
6
|
+
time_zone.local year, month, day, time_of_day.hour, time_of_day.minute, time_of_day.second
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_time_of_day
|
10
|
+
Tod::TimeOfDay.new hour, minute, second
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Date.send :include, Tod::DateExtensions
|
data/lib/tod/mongoization.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'tod/time_of_day'
|
2
|
+
|
1
3
|
module Tod
|
2
4
|
module Mongoization
|
3
5
|
|
@@ -33,4 +35,11 @@ module Tod
|
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
36
|
-
end
|
38
|
+
end
|
39
|
+
|
40
|
+
module Tod
|
41
|
+
class TimeOfDay
|
42
|
+
include(Tod::Mongoization)
|
43
|
+
extend(Tod::Mongoization::ClassMethods)
|
44
|
+
end
|
45
|
+
end
|