chronic 0.6.6 → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/HISTORY.md +5 -0
- data/lib/chronic.rb +1 -1
- data/lib/chronic/chronic.rb +1 -0
- data/lib/chronic/handlers.rb +33 -2
- data/test/test_parsing.rb +26 -0
- metadata +2 -2
data/.gitignore
CHANGED
data/HISTORY.md
CHANGED
data/lib/chronic.rb
CHANGED
data/lib/chronic/chronic.rb
CHANGED
@@ -170,6 +170,7 @@ module Chronic
|
|
170
170
|
:date => [
|
171
171
|
Handler.new([:repeater_day_name, :repeater_month_name, :scalar_day, :repeater_time, :separator_slash_or_dash?, :time_zone, :scalar_year], :handle_rdn_rmn_sd_t_tz_sy),
|
172
172
|
Handler.new([:repeater_day_name, :repeater_month_name, :scalar_day], :handle_rdn_rmn_sd),
|
173
|
+
Handler.new([:repeater_day_name, :repeater_month_name, :scalar_day, :scalar_year], :handle_rdn_rmn_sd_sy),
|
173
174
|
Handler.new([:repeater_day_name, :repeater_month_name, :ordinal_day], :handle_rdn_rmn_od),
|
174
175
|
Handler.new([:scalar_year, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_day, :repeater_time, :time_zone], :handle_sy_sm_sd_t_tz),
|
175
176
|
Handler.new([:repeater_month_name, :scalar_day, :scalar_year], :handle_rmn_sd_sy),
|
data/lib/chronic/handlers.rb
CHANGED
@@ -255,7 +255,7 @@ module Chronic
|
|
255
255
|
|
256
256
|
begin
|
257
257
|
start_time = Chronic.time_class.local(year, month.index, day)
|
258
|
-
end_time =
|
258
|
+
end_time = time_with_rollover(year, month.index, day + 1)
|
259
259
|
Span.new(start_time, end_time)
|
260
260
|
rescue ArgumentError
|
261
261
|
nil
|
@@ -272,7 +272,24 @@ module Chronic
|
|
272
272
|
|
273
273
|
begin
|
274
274
|
start_time = Chronic.time_class.local(year, month.index, day)
|
275
|
-
end_time =
|
275
|
+
end_time = time_with_rollover(year, month.index, day + 1)
|
276
|
+
Span.new(start_time, end_time)
|
277
|
+
rescue ArgumentError
|
278
|
+
nil
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
# Handle RepeaterDayName RepeaterMonthName ScalarDay ScalarYear
|
283
|
+
def handle_rdn_rmn_sd_sy(tokens, options)
|
284
|
+
month = tokens[1].get_tag(RepeaterMonthName)
|
285
|
+
day = tokens[2].get_tag(ScalarDay).type
|
286
|
+
year = tokens[3].get_tag(ScalarYear).type
|
287
|
+
|
288
|
+
return if month_overflow?(year, month.index, day)
|
289
|
+
|
290
|
+
begin
|
291
|
+
start_time = Chronic.time_class.local(year, month.index, day)
|
292
|
+
end_time = time_with_rollover(year, month.index, day + 1)
|
276
293
|
Span.new(start_time, end_time)
|
277
294
|
rescue ArgumentError
|
278
295
|
nil
|
@@ -435,6 +452,20 @@ module Chronic
|
|
435
452
|
end
|
436
453
|
end
|
437
454
|
|
455
|
+
def time_with_rollover(year, month, day)
|
456
|
+
date_parts =
|
457
|
+
if month_overflow?(year, month, day)
|
458
|
+
if month == 12
|
459
|
+
[year + 1, 1, 1]
|
460
|
+
else
|
461
|
+
[year, month + 1, 1]
|
462
|
+
end
|
463
|
+
else
|
464
|
+
[year, month, day]
|
465
|
+
end
|
466
|
+
Chronic.time_class.local(*date_parts)
|
467
|
+
end
|
468
|
+
|
438
469
|
def dealias_and_disambiguate_times(tokens, options)
|
439
470
|
# handle aliases of am/pm
|
440
471
|
# 5:00 in the morning -> 5:00 am
|
data/test/test_parsing.rb
CHANGED
@@ -926,11 +926,37 @@ class TestParsing < Test::Unit::TestCase
|
|
926
926
|
def test_handle_rdn_rmn_sd
|
927
927
|
time = parse_now("Thu Aug 10")
|
928
928
|
assert_equal Time.local(2006, 8, 10, 12), time
|
929
|
+
|
930
|
+
time = parse_now("Thursday July 31")
|
931
|
+
assert_equal Time.local(2006, 7, 31, 12), time
|
932
|
+
|
933
|
+
time = parse_now("Thursday December 31")
|
934
|
+
assert_equal Time.local(2006, 12, 31, 12), time
|
935
|
+
end
|
936
|
+
|
937
|
+
def test_handle_rdn_rmn_sd_sy
|
938
|
+
time = parse_now("Thu Aug 10 2006")
|
939
|
+
assert_equal Time.local(2006, 8, 10, 12), time
|
940
|
+
|
941
|
+
time = parse_now("Thursday July 31 2006")
|
942
|
+
assert_equal Time.local(2006, 7, 31, 12), time
|
943
|
+
|
944
|
+
time = parse_now("Thursday December 31 2006")
|
945
|
+
assert_equal Time.local(2006, 12, 31, 12), time
|
946
|
+
|
947
|
+
time = parse_now("Thursday December 30 2006")
|
948
|
+
assert_equal Time.local(2006, 12, 30, 12), time
|
929
949
|
end
|
930
950
|
|
931
951
|
def test_handle_rdn_rmn_od
|
932
952
|
time = parse_now("Thu Aug 10th")
|
933
953
|
assert_equal Time.local(2006, 8, 10, 12), time
|
954
|
+
|
955
|
+
time = parse_now("Thursday July 31st")
|
956
|
+
assert_equal Time.local(2006, 7, 31, 12), time
|
957
|
+
|
958
|
+
time = parse_now("Thursday December 31st")
|
959
|
+
assert_equal Time.local(2006, 12, 31, 12), time
|
934
960
|
end
|
935
961
|
|
936
962
|
private
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chronic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2012-02-01 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: Chronic is a natural language date/time parser written in pure Ruby.
|
16
16
|
email:
|