chronic 0.6.6 → 0.6.7
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|