tod 2.1.1 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +4 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +25 -22
- data/README.markdown +48 -4
- data/gemfiles/5.2.gemfile +5 -0
- data/lib/tod.rb +2 -0
- data/lib/tod/conversions.rb +2 -2
- data/lib/tod/railtie.rb +9 -0
- data/lib/tod/time_of_day.rb +43 -15
- data/lib/tod/time_of_day_type.rb +11 -0
- data/lib/tod/version.rb +1 -1
- data/test/tod/conversion_test.rb +7 -0
- data/test/tod/time_of_day_serializable_attribute_test.rb +19 -0
- data/test/tod/time_of_day_test.rb +51 -8
- data/tod.gemspec +1 -1
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5b81b1887eee62d6f7a98bf6281f16da3cffd47206925beca789a94b91c3e7c2
|
4
|
+
data.tar.gz: 662b50760caef5be2bf7e41b1b59ced86ece56b8d46b10aa6fe7cd24e33cb869
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b97d86a5945a3f274b3674b11bd4f09add9ca409e4512ddba81c107acc8e5bc339896fa7b94a5da7d9e61bf8d579e7c866b0473dfc86ef3e6cd2b63c0174964
|
7
|
+
data.tar.gz: f539df0792da43d8a45244e9ba978732d59c02ffc36406047725c7209a44e1958926647b05bdb9c7d51a5d1417d6f2f396246e9aeba63bb17b017b87756a9195
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,37 +1,40 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tod (2.
|
4
|
+
tod (2.2.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
activemodel (5.0
|
10
|
-
activesupport (= 5.0
|
11
|
-
activerecord (5.0
|
12
|
-
activemodel (= 5.0
|
13
|
-
activesupport (= 5.0
|
14
|
-
arel (
|
15
|
-
activesupport (5.0
|
9
|
+
activemodel (5.2.0)
|
10
|
+
activesupport (= 5.2.0)
|
11
|
+
activerecord (5.2.0)
|
12
|
+
activemodel (= 5.2.0)
|
13
|
+
activesupport (= 5.2.0)
|
14
|
+
arel (>= 9.0)
|
15
|
+
activesupport (5.2.0)
|
16
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
-
i18n (
|
17
|
+
i18n (>= 0.7, < 2)
|
18
18
|
minitest (~> 5.1)
|
19
19
|
tzinfo (~> 1.1)
|
20
|
-
arel (
|
21
|
-
|
20
|
+
arel (9.0.0)
|
21
|
+
byebug (10.0.2)
|
22
|
+
coderay (1.1.2)
|
22
23
|
concurrent-ruby (1.0.5)
|
23
|
-
i18n (0.
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
i18n (1.0.1)
|
25
|
+
concurrent-ruby (~> 1.0)
|
26
|
+
method_source (0.9.0)
|
27
|
+
minitest (5.11.3)
|
28
|
+
pry (0.11.3)
|
27
29
|
coderay (~> 1.1.0)
|
28
|
-
method_source (~> 0.
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
method_source (~> 0.9.0)
|
31
|
+
pry-byebug (3.6.0)
|
32
|
+
byebug (~> 10.0)
|
33
|
+
pry (~> 0.10)
|
34
|
+
rake (12.3.1)
|
32
35
|
sqlite3 (1.3.13)
|
33
36
|
thread_safe (0.3.6)
|
34
|
-
tzinfo (1.2.
|
37
|
+
tzinfo (1.2.5)
|
35
38
|
thread_safe (~> 0.1)
|
36
39
|
|
37
40
|
PLATFORMS
|
@@ -41,11 +44,11 @@ DEPENDENCIES
|
|
41
44
|
activerecord (>= 3.0.0)
|
42
45
|
arel
|
43
46
|
minitest
|
44
|
-
pry
|
47
|
+
pry-byebug
|
45
48
|
rake
|
46
49
|
sqlite3
|
47
50
|
tod!
|
48
51
|
tzinfo
|
49
52
|
|
50
53
|
BUNDLED WITH
|
51
|
-
1.
|
54
|
+
1.16.3
|
data/README.markdown
CHANGED
@@ -54,6 +54,12 @@ parsable.
|
|
54
54
|
Tod::TimeOfDay.try_parse "3:30pm" # => 15:30:00
|
55
55
|
Tod::TimeOfDay.try_parse "foo" # => nil
|
56
56
|
|
57
|
+
You can also give a block to parse to handle special input with your own logic.
|
58
|
+
|
59
|
+
Tod::TimeOfDay.parse "25" do |time_string|
|
60
|
+
Tod::TimeOfDay.new(time_string.to_i % 24)
|
61
|
+
end # => 01:00:00
|
62
|
+
|
57
63
|
Values can be tested with Tod::TimeOfDay.parsable? to see if they can be parsed.
|
58
64
|
|
59
65
|
Tod::TimeOfDay.parsable? "3:30pm" # => true
|
@@ -62,7 +68,7 @@ Values can be tested with Tod::TimeOfDay.parsable? to see if they can be parsed.
|
|
62
68
|
Adding or subtracting time
|
63
69
|
-----------------------------
|
64
70
|
|
65
|
-
Seconds can be added to or subtracted Tod::TimeOfDay objects. Time correctly wraps
|
71
|
+
Seconds can be added to or subtracted from Tod::TimeOfDay objects. Time correctly wraps
|
66
72
|
around midnight.
|
67
73
|
|
68
74
|
Tod::TimeOfDay.new(8) + 3600 # => 09:00:00
|
@@ -89,6 +95,19 @@ Format strings are passed to Time#strftime.
|
|
89
95
|
Tod::TimeOfDay.new(17,15).strftime("%I:%M %p") # => "05:15 PM"
|
90
96
|
Tod::TimeOfDay.new(22,5,15).strftime("%I:%M:%S %p") # => "10:05:15 PM"
|
91
97
|
|
98
|
+
Or a Rails style `to_formatted_s` is aliased to `to_s`.
|
99
|
+
|
100
|
+
Tod::TimeOfDay.new(8,30).to_s(:short) # => "8:30 am"
|
101
|
+
|
102
|
+
Or [i18n](https://github.com/svenfuchs/i18n) in a Rails ERB view.
|
103
|
+
|
104
|
+
<%= l Tod::TimeOfDay.new(8, 30), format: :short %>
|
105
|
+
|
106
|
+
Add new formatters to `Tod::TimeOfDay::FORMATS`.
|
107
|
+
|
108
|
+
Tod::TimeOfDay::FORMATS[:seconds_only] = "%S"
|
109
|
+
Tod::TimeOfDay.new(8,30,57).to_s(:seconds_only) # => "57"
|
110
|
+
|
92
111
|
Rounding
|
93
112
|
----------
|
94
113
|
|
@@ -101,7 +120,8 @@ Round to the given nearest number of seconds.
|
|
101
120
|
Convenience methods for dates and times
|
102
121
|
---------------------------------------
|
103
122
|
|
104
|
-
Pass a date to Tod::TimeOfDay#on and it will return a time with that date and time
|
123
|
+
Pass a date to Tod::TimeOfDay#on and it will return a time with that date and time,
|
124
|
+
in the time zone of the ruby runtime (`Time.now.zone`).
|
105
125
|
|
106
126
|
tod = Tod::TimeOfDay.new 8, 30 # => 08:30:00
|
107
127
|
tod.on Date.today # => 2010-12-29 08:30:00 -0600
|
@@ -193,13 +213,26 @@ Contains?
|
|
193
213
|
Rails Time Zone Support
|
194
214
|
=======================
|
195
215
|
|
196
|
-
If Rails time zone support is loaded, Date#on and Tod::TimeOfDay#at will automatically use Time.zone.
|
216
|
+
If Rails time zone support is loaded, Date#on and Tod::TimeOfDay#at (when given a Date) will automatically use Time.zone.
|
197
217
|
|
198
|
-
|
218
|
+
When Tod::TimeOfDay#on is given a `Time` or `Time`-like object like `ActiveSupport::TimeWithZone`,
|
219
|
+
Tod will ignore the specified timezone and return the time on that date in UTC. In order to
|
220
|
+
produce an object with the correct time and time zone, pass in an
|
221
|
+
`ActiveSupport::TimeZone` object. Date#at has analogous behavior.
|
222
|
+
|
223
|
+
time = Time.now.in_time_zone("US/Eastern") # => Mon, 24 Sep 2018 05:07:23 EDT -04:00
|
224
|
+
tod.on time # => Mon, 24 Sep 2018 08:30:00 UTC +00:00
|
225
|
+
tod.on time, time.time_zone # => Mon, 24 Sep 2018 08:30:00 EDT -04:00
|
226
|
+
tod.on time, Time.find_zone!("US/Mountain") # => Mon, 24 Sep 2018 08:30:00 MDT -06:00
|
227
|
+
Date.tomorrow.at tod, Time.find_zone!("US/Mountain") # => Tue, 25 Sep 2018 08:30:00 MDT -06:00
|
228
|
+
|
229
|
+
ActiveRecord Serializable Attribute Support
|
199
230
|
=======================
|
200
231
|
Tod::TimeOfDay implements a custom serialization contract for ActiveRecord serialize which allows to store Tod::TimeOfDay directly
|
201
232
|
in a column of the time type.
|
233
|
+
|
202
234
|
Example:
|
235
|
+
|
203
236
|
```ruby
|
204
237
|
class Order < ActiveRecord::Base
|
205
238
|
serialize :time, Tod::TimeOfDay
|
@@ -208,6 +241,17 @@ order = Order.create(time: Tod::TimeOfDay.new(9,30))
|
|
208
241
|
order.time # => 09:30:00
|
209
242
|
```
|
210
243
|
|
244
|
+
By default Rails 5.1 treats database `time` values as if time zones are
|
245
|
+
meaningful. Tod::TimeOfDay cannot correctly save and restore values when Rails
|
246
|
+
automatically shifts values based on time zone and the normal `serialize`
|
247
|
+
interface is not able to override this behavior. To correctly serialize
|
248
|
+
Tod::TimeOfDay values with Rails 5.1 time zone handling must be disabled for
|
249
|
+
database `time` types. This can be done with the following config:
|
250
|
+
|
251
|
+
```
|
252
|
+
config.active_record.time_zone_aware_types = [:datetime]
|
253
|
+
```
|
254
|
+
|
211
255
|
MongoDB Support
|
212
256
|
===============
|
213
257
|
|
data/lib/tod.rb
CHANGED
data/lib/tod/conversions.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Tod
|
2
|
-
def TimeOfDay(obj_or_string)
|
2
|
+
def TimeOfDay(obj_or_string, &block)
|
3
3
|
if obj_or_string.is_a?(TimeOfDay)
|
4
4
|
obj_or_string
|
5
5
|
elsif obj_or_string.respond_to?(:to_time_of_day)
|
@@ -9,7 +9,7 @@ module Tod
|
|
9
9
|
elsif obj_or_string.is_a?(Date)
|
10
10
|
TimeOfDay.new 0
|
11
11
|
else
|
12
|
-
TimeOfDay.parse(obj_or_string)
|
12
|
+
TimeOfDay.parse(obj_or_string, &block)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
data/lib/tod/railtie.rb
ADDED
data/lib/tod/time_of_day.rb
CHANGED
@@ -9,7 +9,7 @@ module Tod
|
|
9
9
|
|
10
10
|
PARSE_24H_REGEX = /
|
11
11
|
\A
|
12
|
-
([01]?\d|2[0-
|
12
|
+
([01]?\d|2[0-4])
|
13
13
|
:?
|
14
14
|
([0-5]\d)?
|
15
15
|
:?
|
@@ -42,12 +42,21 @@ module Tod
|
|
42
42
|
NUM_SECONDS_IN_HOUR = 3600
|
43
43
|
NUM_SECONDS_IN_MINUTE = 60
|
44
44
|
|
45
|
+
FORMATS = {
|
46
|
+
short: "%-l:%M %P",
|
47
|
+
medium: "%-l:%M:%S %P",
|
48
|
+
time: "%H:%M"
|
49
|
+
}
|
50
|
+
|
45
51
|
def initialize(h, m=0, s=0)
|
46
52
|
@hour = Integer(h)
|
47
53
|
@minute = Integer(m)
|
48
54
|
@second = Integer(s)
|
49
55
|
|
50
|
-
raise ArgumentError, "hour must be between 0 and
|
56
|
+
raise ArgumentError, "hour must be between 0 and 24" unless (0..24).include?(@hour)
|
57
|
+
if @hour == 24 && (@minute != 0 || @second != 0)
|
58
|
+
raise ArgumentError, "hour can only be 24 when minute and second are 0"
|
59
|
+
end
|
51
60
|
raise ArgumentError, "minute must be between 0 and 59" unless (0..59).include?(@minute)
|
52
61
|
raise ArgumentError, "second must be between 0 and 59" unless (0..59).include?(@second)
|
53
62
|
|
@@ -78,12 +87,24 @@ module Tod
|
|
78
87
|
|
79
88
|
# Formats identically to Time#strftime
|
80
89
|
def strftime(format_string)
|
90
|
+
# Special case 2400 because strftime will load TimeOfDay into Time which
|
91
|
+
# will convert 24 to 0
|
92
|
+
format_string.gsub!(/%H|%k/, '24') if @hour == 24
|
81
93
|
Time.local(2000,1,1, @hour, @minute, @second).strftime(format_string)
|
82
94
|
end
|
83
95
|
|
84
|
-
def
|
85
|
-
|
96
|
+
def to_formatted_s(format = :default)
|
97
|
+
if formatter = FORMATS[format]
|
98
|
+
if formatter.respond_to?(:call)
|
99
|
+
formatter.call(self).to_s
|
100
|
+
else
|
101
|
+
strftime(formatter)
|
102
|
+
end
|
103
|
+
else
|
104
|
+
strftime "%H:%M:%S"
|
105
|
+
end
|
86
106
|
end
|
107
|
+
alias_method :to_s, :to_formatted_s
|
87
108
|
|
88
109
|
# Return a new TimeOfDay num_seconds greater than self. It will wrap around
|
89
110
|
# at midnight.
|
@@ -112,6 +133,7 @@ module Tod
|
|
112
133
|
# TimeOfDay.from_second_of_day(3600) == TimeOfDay.new(1) # => true
|
113
134
|
def self.from_second_of_day(second_of_day)
|
114
135
|
second_of_day = Integer(second_of_day)
|
136
|
+
return new 24 if second_of_day == NUM_SECONDS_IN_DAY
|
115
137
|
remaining_seconds = second_of_day % NUM_SECONDS_IN_DAY
|
116
138
|
hour = remaining_seconds / NUM_SECONDS_IN_HOUR
|
117
139
|
remaining_seconds -= hour * NUM_SECONDS_IN_HOUR
|
@@ -138,8 +160,10 @@ module Tod
|
|
138
160
|
# TimeOfDay.parse "3:25:58" # => 03:25:58
|
139
161
|
# TimeOfDay.parse "515p" # => 17:15:00
|
140
162
|
# TimeOfDay.parse "151253" # => 15:12:53
|
163
|
+
# You can give a block, that is called with the input if the string is not parsable.
|
164
|
+
# If no block is given an ArgumentError is raised if try_parse returns nil.
|
141
165
|
def self.parse(tod_string)
|
142
|
-
try_parse(tod_string) || (raise
|
166
|
+
try_parse(tod_string) || (block_given? ? yield(tod_string) : raise(ArgumentError, "Invalid time of day string"))
|
143
167
|
end
|
144
168
|
|
145
169
|
# Same as parse(), but return nil if not parsable (instead of raising an error)
|
@@ -178,19 +202,23 @@ module Tod
|
|
178
202
|
end
|
179
203
|
|
180
204
|
def self.dump(time_of_day)
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
205
|
+
time_of_day =
|
206
|
+
if time_of_day.is_a? Hash
|
207
|
+
# rails multiparam attribute
|
208
|
+
# get hour, minute and second and construct new TimeOfDay object
|
209
|
+
::Tod::TimeOfDay.new(time_of_day[4], time_of_day[5], time_of_day[6])
|
210
|
+
else
|
211
|
+
# return nil, if input is not parsable
|
212
|
+
Tod::TimeOfDay(time_of_day){}
|
213
|
+
end
|
214
|
+
time_of_day.to_s if time_of_day
|
190
215
|
end
|
191
216
|
|
192
217
|
def self.load(time)
|
193
|
-
|
218
|
+
if time && !time.to_s.empty?
|
219
|
+
return ::Tod::TimeOfDay.new(24) if time.respond_to?(:day) && time.day == 2 && time.hour == 0 && time.min == 0 && time.sec == 0
|
220
|
+
::Tod::TimeOfDay(time)
|
221
|
+
end
|
194
222
|
end
|
195
223
|
end
|
196
224
|
end
|
data/lib/tod/version.rb
CHANGED
data/test/tod/conversion_test.rb
CHANGED
@@ -19,6 +19,18 @@ describe "TimeOfDay with ActiveRecord Serializable Attribute" do
|
|
19
19
|
order = Order.create!({"time(4i)" => "8", "time(5i)" => "6", "time(6i)" => "5"})
|
20
20
|
assert_equal Tod::TimeOfDay.new(8,6,5), order.time
|
21
21
|
end
|
22
|
+
|
23
|
+
it "should not raise Exception on access of unparsable values" do
|
24
|
+
order = Order.new(time: 'unparsable')
|
25
|
+
order.time
|
26
|
+
assert order.valid?
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should dump unparsable values to nil" do
|
30
|
+
assert_nil Tod::TimeOfDay.dump('')
|
31
|
+
assert_nil Tod::TimeOfDay.dump('unparsable')
|
32
|
+
assert_nil Tod::TimeOfDay.dump(nil)
|
33
|
+
end
|
22
34
|
end
|
23
35
|
|
24
36
|
describe ".load" do
|
@@ -41,6 +53,13 @@ describe "TimeOfDay with ActiveRecord Serializable Attribute" do
|
|
41
53
|
order.reload
|
42
54
|
assert_nil order.time
|
43
55
|
end
|
56
|
+
|
57
|
+
it "dump 24:00:00 and get it back" do
|
58
|
+
time_of_day = Tod::TimeOfDay.new(24, 0, 0)
|
59
|
+
order = Order.create!(time: time_of_day)
|
60
|
+
order.reload
|
61
|
+
assert_equal Tod::TimeOfDay.new(24), order.time
|
62
|
+
end
|
44
63
|
end
|
45
64
|
|
46
65
|
describe "Order.where" do
|
@@ -4,7 +4,7 @@ describe "TimeOfDay" do
|
|
4
4
|
describe "#initialize" do
|
5
5
|
it "blocks invalid hours" do
|
6
6
|
assert_raises(ArgumentError) { Tod::TimeOfDay.new(-1) }
|
7
|
-
assert_raises(ArgumentError) { Tod::TimeOfDay.new
|
7
|
+
assert_raises(ArgumentError) { Tod::TimeOfDay.new 25 }
|
8
8
|
end
|
9
9
|
|
10
10
|
it "blocks invalid minutes" do
|
@@ -31,6 +31,10 @@ describe "TimeOfDay" do
|
|
31
31
|
assert_equal 86399, Tod::TimeOfDay.new(23,59,59).second_of_day
|
32
32
|
end
|
33
33
|
|
34
|
+
it "is 86400 at beginning of next day" do
|
35
|
+
assert_equal 86400, Tod::TimeOfDay.new(24,0,0).second_of_day
|
36
|
+
end
|
37
|
+
|
34
38
|
it "have alias to_i" do
|
35
39
|
tod = Tod::TimeOfDay.new(0,0,0)
|
36
40
|
assert_equal tod.method(:second_of_day), tod.method(:to_i)
|
@@ -84,9 +88,12 @@ describe "TimeOfDay" do
|
|
84
88
|
should_parse "12a", 0, 0, 0
|
85
89
|
should_parse "12p", 12, 0, 0
|
86
90
|
|
91
|
+
should_parse "24:00:00", 24, 0, 0
|
92
|
+
should_parse "24:00", 24, 0, 0
|
93
|
+
should_parse "24", 24, 0, 0
|
94
|
+
should_parse "2400", 24, 0, 0
|
95
|
+
|
87
96
|
should_not_parse "-1:30"
|
88
|
-
should_not_parse "24:00:00"
|
89
|
-
should_not_parse "24"
|
90
97
|
should_not_parse "00:60"
|
91
98
|
should_not_parse "00:00:60"
|
92
99
|
should_not_parse "13a"
|
@@ -102,6 +109,11 @@ describe "TimeOfDay" do
|
|
102
109
|
assert_raises(ArgumentError) { Tod::TimeOfDay.parse(nil) }
|
103
110
|
end
|
104
111
|
|
112
|
+
it "executes block on parsing failure and return result instead" do
|
113
|
+
assert_equal Tod::TimeOfDay.new(1), Tod::TimeOfDay.parse('25:00:00') { Tod::TimeOfDay.new(1) }
|
114
|
+
assert_equal Tod::TimeOfDay.new(1), Tod::TimeOfDay.parse('25:00:00') { |time_string| Tod::TimeOfDay.parse(time_string.sub('25', '01')) }
|
115
|
+
end
|
116
|
+
|
105
117
|
it "provides spaceship operator" do
|
106
118
|
assert_equal(-1, Tod::TimeOfDay.new(8,0,0) <=> Tod::TimeOfDay.new(9,0,0))
|
107
119
|
assert_equal 0, Tod::TimeOfDay.new(9,0,0) <=> Tod::TimeOfDay.new(9,0,0)
|
@@ -123,7 +135,7 @@ describe "TimeOfDay" do
|
|
123
135
|
assert_equal Tod::TimeOfDay.new(8,20,0), Tod::TimeOfDay.new(8,20,00).round(300)
|
124
136
|
assert_equal Tod::TimeOfDay.new(9,0,0), Tod::TimeOfDay.new(8,58,00).round(300)
|
125
137
|
assert_equal Tod::TimeOfDay.new(8,0,0), Tod::TimeOfDay.new(8,02,29).round(300)
|
126
|
-
assert_equal Tod::TimeOfDay.new(
|
138
|
+
assert_equal Tod::TimeOfDay.new(24,0,0), Tod::TimeOfDay.new(23,58,29).round(300)
|
127
139
|
end
|
128
140
|
end
|
129
141
|
|
@@ -133,10 +145,41 @@ describe "TimeOfDay" do
|
|
133
145
|
end
|
134
146
|
end
|
135
147
|
|
148
|
+
describe "to_formatted_s" do
|
149
|
+
it "has a default format" do
|
150
|
+
assert_equal "08:15:30", Tod::TimeOfDay.new(8,15,30).to_formatted_s
|
151
|
+
assert_equal "22:10:45", Tod::TimeOfDay.new(22,10,45).to_formatted_s
|
152
|
+
end
|
153
|
+
|
154
|
+
it "has a short format" do
|
155
|
+
assert_equal "8:15 am", Tod::TimeOfDay.new(8,15,30).to_formatted_s(:short)
|
156
|
+
assert_equal "10:10 pm", Tod::TimeOfDay.new(22,10,45).to_formatted_s(:short)
|
157
|
+
end
|
158
|
+
|
159
|
+
it "has a medium format" do
|
160
|
+
assert_equal "8:15:30 am", Tod::TimeOfDay.new(8,15,30).to_formatted_s(:medium)
|
161
|
+
assert_equal "10:10:45 pm", Tod::TimeOfDay.new(22,10,45).to_formatted_s(:medium)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "has an ActiveSupport compatible time format" do
|
165
|
+
assert_equal "08:15", Tod::TimeOfDay.new(8,15,30).to_formatted_s(:time)
|
166
|
+
assert_equal "22:10", Tod::TimeOfDay.new(22,10,45).to_formatted_s(:time)
|
167
|
+
end
|
168
|
+
|
169
|
+
it "evaluates custom lambda lambda formats" do
|
170
|
+
begin
|
171
|
+
Tod::TimeOfDay::FORMATS[:lambda] = -> (t) { t.strftime("%H%M 😎") }
|
172
|
+
assert_equal "1337 😎", Tod::TimeOfDay.new(13,37).to_formatted_s(:lambda)
|
173
|
+
ensure
|
174
|
+
Tod::TimeOfDay::FORMATS.delete(:lambda)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
136
179
|
describe "to_s" do
|
137
|
-
it "
|
138
|
-
|
139
|
-
assert_equal
|
180
|
+
it "is aliased to to_formatted_s" do
|
181
|
+
t = Tod::TimeOfDay.new(8,15,30)
|
182
|
+
assert_equal t.to_formatted_s, t.to_s
|
140
183
|
end
|
141
184
|
end
|
142
185
|
|
@@ -215,7 +258,7 @@ describe "TimeOfDay" do
|
|
215
258
|
end
|
216
259
|
|
217
260
|
it "handles positive numbers a day or more away" do
|
218
|
-
assert_equal Tod::TimeOfDay.new(
|
261
|
+
assert_equal Tod::TimeOfDay.new(24,0,0), Tod::TimeOfDay.from_second_of_day(86400)
|
219
262
|
assert_equal Tod::TimeOfDay.new(0,0,30), Tod::TimeOfDay.from_second_of_day(86430)
|
220
263
|
assert_equal Tod::TimeOfDay.new(0,1,30), Tod::TimeOfDay.from_second_of_day(86490)
|
221
264
|
assert_equal Tod::TimeOfDay.new(1,1,5), Tod::TimeOfDay.from_second_of_day(90065)
|
data/tod.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.add_development_dependency "rake"
|
19
19
|
s.add_development_dependency "activerecord", ">= 3.0.0"
|
20
20
|
s.add_development_dependency "sqlite3"
|
21
|
-
s.add_development_dependency "pry"
|
21
|
+
s.add_development_dependency "pry-byebug"
|
22
22
|
s.add_development_dependency "arel"
|
23
23
|
|
24
24
|
s.files = `git ls-files`.split("\n")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jack Christensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: pry
|
84
|
+
name: pry-byebug
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -128,15 +128,18 @@ files:
|
|
128
128
|
- gemfiles/4.1.gemfile
|
129
129
|
- gemfiles/4.2.gemfile
|
130
130
|
- gemfiles/5.0.gemfile
|
131
|
+
- gemfiles/5.2.gemfile
|
131
132
|
- lib/tod.rb
|
132
133
|
- lib/tod/arel_extensions.rb
|
133
134
|
- lib/tod/conversions.rb
|
134
135
|
- lib/tod/core_extensions.rb
|
135
136
|
- lib/tod/date_extensions.rb
|
136
137
|
- lib/tod/mongoization.rb
|
138
|
+
- lib/tod/railtie.rb
|
137
139
|
- lib/tod/shift.rb
|
138
140
|
- lib/tod/time_extensions.rb
|
139
141
|
- lib/tod/time_of_day.rb
|
142
|
+
- lib/tod/time_of_day_type.rb
|
140
143
|
- lib/tod/version.rb
|
141
144
|
- test/support/active_record.rb
|
142
145
|
- test/test_helper.rb
|
@@ -168,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
171
|
version: '0'
|
169
172
|
requirements: []
|
170
173
|
rubyforge_project:
|
171
|
-
rubygems_version: 2.
|
174
|
+
rubygems_version: 2.7.6
|
172
175
|
signing_key:
|
173
176
|
specification_version: 4
|
174
177
|
summary: Supplies TimeOfDay and Shift class
|