chronic 0.6.4 → 0.6.5
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/HISTORY.md +6 -0
- data/README.md +2 -3
- data/lib/chronic.rb +1 -1
- data/lib/chronic/chronic.rb +3 -1
- data/lib/chronic/handlers.rb +35 -1
- data/test/test_parsing.rb +26 -0
- metadata +3 -3
data/HISTORY.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
# 0.6.5 / 2011-11-04
|
|
2
|
+
|
|
3
|
+
* Fix bug when parsing ordinal repeaters (#73)
|
|
4
|
+
* Added handler support for day_name month_name (@imme5150)
|
|
5
|
+
* Fix bug when parsing strings prefixed with PM
|
|
6
|
+
|
|
1
7
|
# 0.6.4 / 2011-08-08
|
|
2
8
|
|
|
3
9
|
* Fixed bug where 'noon' was parsed as 00:00 rather than 12:00
|
data/README.md
CHANGED
|
@@ -162,14 +162,13 @@ If you'd like to hack on Chronic, start by forking the repo on GitHub:
|
|
|
162
162
|
|
|
163
163
|
https://github.com/mojombo/chronic
|
|
164
164
|
|
|
165
|
-
|
|
166
|
-
your changes merged back into core is as follows:
|
|
165
|
+
The best way to get your changes merged back into core is as follows:
|
|
167
166
|
|
|
168
167
|
1. Clone down your fork
|
|
169
168
|
1. Create a thoughtfully named topic branch to contain your change
|
|
170
169
|
1. Hack away
|
|
171
170
|
1. Add tests and make sure everything still passes by running `rake`
|
|
172
|
-
1. Ensure your tests pass in multiple timezones
|
|
171
|
+
1. Ensure your tests pass in multiple timezones. ie `TZ=utc rake` `TZ=BST rake`
|
|
173
172
|
1. If you are adding new functionality, document it in the README
|
|
174
173
|
1. Do not change the version number, we will do that on our end
|
|
175
174
|
1. If necessary, rebase your commits into logical chunks, without errors
|
data/lib/chronic.rb
CHANGED
data/lib/chronic/chronic.rb
CHANGED
|
@@ -114,7 +114,7 @@ module Chronic
|
|
|
114
114
|
text = Numerizer.numerize(text)
|
|
115
115
|
text.gsub!(/ \-(\d{4})\b/, ' tzminus\1')
|
|
116
116
|
text.gsub!(/([\/\-\,\@])/) { ' ' + $1 + ' ' }
|
|
117
|
-
text.gsub!(
|
|
117
|
+
text.gsub!(/(?:^|\s)0(\d+:\d+\s*pm?\b)/, '\1')
|
|
118
118
|
text.gsub!(/\btoday\b/, 'this day')
|
|
119
119
|
text.gsub!(/\btomm?orr?ow\b/, 'next day')
|
|
120
120
|
text.gsub!(/\byesterday\b/, 'last day')
|
|
@@ -169,6 +169,8 @@ module Chronic
|
|
|
169
169
|
|
|
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
|
+
Handler.new([:repeater_day_name, :repeater_month_name, :scalar_day], :handle_rdn_rmn_sd),
|
|
173
|
+
Handler.new([:repeater_day_name, :repeater_month_name, :ordinal_day], :handle_rdn_rmn_od),
|
|
172
174
|
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),
|
|
173
175
|
Handler.new([:repeater_month_name, :scalar_day, :scalar_year], :handle_rmn_sd_sy),
|
|
174
176
|
Handler.new([:repeater_month_name, :ordinal_day, :scalar_year], :handle_rmn_od_sy),
|
data/lib/chronic/handlers.rb
CHANGED
|
@@ -245,6 +245,40 @@ module Chronic
|
|
|
245
245
|
end
|
|
246
246
|
end
|
|
247
247
|
|
|
248
|
+
# Handle RepeaterDayName RepeaterMonthName OrdinalDay
|
|
249
|
+
def handle_rdn_rmn_od(tokens, options)
|
|
250
|
+
month = tokens[1].get_tag(RepeaterMonthName)
|
|
251
|
+
day = tokens[2].get_tag(OrdinalDay).type
|
|
252
|
+
year = Chronic.now.year
|
|
253
|
+
|
|
254
|
+
return if month_overflow?(year, month.index, day)
|
|
255
|
+
|
|
256
|
+
begin
|
|
257
|
+
start_time = Chronic.time_class.local(year, month.index, day)
|
|
258
|
+
end_time = Chronic.time_class.local(year, month.index, day + 1)
|
|
259
|
+
Span.new(start_time, end_time)
|
|
260
|
+
rescue ArgumentError
|
|
261
|
+
nil
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# Handle RepeaterDayName RepeaterMonthName ScalarDay
|
|
266
|
+
def handle_rdn_rmn_sd(tokens, options)
|
|
267
|
+
month = tokens[1].get_tag(RepeaterMonthName)
|
|
268
|
+
day = tokens[2].get_tag(ScalarDay).type
|
|
269
|
+
year = Chronic.now.year
|
|
270
|
+
|
|
271
|
+
return if month_overflow?(year, month.index, day)
|
|
272
|
+
|
|
273
|
+
begin
|
|
274
|
+
start_time = Chronic.time_class.local(year, month.index, day)
|
|
275
|
+
end_time = Chronic.time_class.local(year, month.index, day + 1)
|
|
276
|
+
Span.new(start_time, end_time)
|
|
277
|
+
rescue ArgumentError
|
|
278
|
+
nil
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
248
282
|
# anchors
|
|
249
283
|
|
|
250
284
|
# Handle repeaters
|
|
@@ -302,7 +336,7 @@ module Chronic
|
|
|
302
336
|
ordinal.times do
|
|
303
337
|
span = repeater.next(:future)
|
|
304
338
|
|
|
305
|
-
if span.begin
|
|
339
|
+
if span.begin >= outer_span.end
|
|
306
340
|
span = nil
|
|
307
341
|
break
|
|
308
342
|
end
|
data/test/test_parsing.rb
CHANGED
|
@@ -238,6 +238,9 @@ class TestParsing < Test::Unit::TestCase
|
|
|
238
238
|
time = parse_now("7/12/11", :endian_precedence => :little)
|
|
239
239
|
assert_equal Time.local(2011, 12, 7, 12), time
|
|
240
240
|
|
|
241
|
+
time = parse_now("9/19/2011 6:05:57 PM")
|
|
242
|
+
assert_equal Time.local(2011, 9, 19, 18, 05, 57), time
|
|
243
|
+
|
|
241
244
|
# month day overflows
|
|
242
245
|
time = parse_now("30/2/2000")
|
|
243
246
|
assert_nil time
|
|
@@ -307,6 +310,19 @@ class TestParsing < Test::Unit::TestCase
|
|
|
307
310
|
end
|
|
308
311
|
|
|
309
312
|
def test_handle_orr
|
|
313
|
+
time = parse_now("5th tuesday in january")
|
|
314
|
+
assert_equal Time.local(2007, 01, 30, 12), time
|
|
315
|
+
|
|
316
|
+
time = parse_now("5th tuesday in february")
|
|
317
|
+
assert_equal nil, time
|
|
318
|
+
|
|
319
|
+
%W(jan feb march april may june july aug sep oct nov dec).each_with_index do |month, index|
|
|
320
|
+
time = parse_now("5th tuesday in #{month}")
|
|
321
|
+
|
|
322
|
+
if time then
|
|
323
|
+
assert_equal time.month, index+1
|
|
324
|
+
end
|
|
325
|
+
end
|
|
310
326
|
end
|
|
311
327
|
|
|
312
328
|
def test_handle_o_r_s_r
|
|
@@ -879,6 +895,16 @@ class TestParsing < Test::Unit::TestCase
|
|
|
879
895
|
assert_equal Time.local(2011, 1, 1, 12, 0), t1
|
|
880
896
|
end
|
|
881
897
|
|
|
898
|
+
def test_handle_rdn_rmn_sd
|
|
899
|
+
time = parse_now("Thu Aug 10")
|
|
900
|
+
assert_equal Time.local(2006, 8, 10, 12), time
|
|
901
|
+
end
|
|
902
|
+
|
|
903
|
+
def test_handle_rdn_rmn_od
|
|
904
|
+
time = parse_now("Thu Aug 10th")
|
|
905
|
+
assert_equal Time.local(2006, 8, 10, 12), time
|
|
906
|
+
end
|
|
907
|
+
|
|
882
908
|
private
|
|
883
909
|
def parse_now(string, options={})
|
|
884
910
|
Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
|
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.5
|
|
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: 2011-
|
|
13
|
+
date: 2011-11-05 00:00:00.000000000Z
|
|
14
14
|
dependencies: []
|
|
15
15
|
description: Chronic is a natural language date/time parser written in pure Ruby.
|
|
16
16
|
email:
|
|
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
106
106
|
version: '0'
|
|
107
107
|
requirements: []
|
|
108
108
|
rubyforge_project: chronic
|
|
109
|
-
rubygems_version: 1.8.
|
|
109
|
+
rubygems_version: 1.8.11
|
|
110
110
|
signing_key:
|
|
111
111
|
specification_version: 3
|
|
112
112
|
summary: Natural language date/time parsing.
|