chronic 0.2.3 → 0.3.0
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 +76 -0
- data/LICENSE +21 -0
- data/README.md +165 -0
- data/Rakefile +145 -18
- data/benchmark/benchmark.rb +13 -0
- data/chronic.gemspec +85 -0
- data/lib/chronic.rb +21 -19
- data/lib/chronic/chronic.rb +59 -49
- data/lib/chronic/grabber.rb +2 -2
- data/lib/chronic/handlers.rb +167 -112
- data/lib/{numerizer → chronic/numerizer}/numerizer.rb +17 -23
- data/lib/chronic/ordinal.rb +6 -6
- data/lib/chronic/pointer.rb +3 -3
- data/lib/chronic/repeater.rb +26 -12
- data/lib/chronic/repeaters/repeater_day.rb +17 -12
- data/lib/chronic/repeaters/repeater_day_name.rb +17 -12
- data/lib/chronic/repeaters/repeater_day_portion.rb +13 -12
- data/lib/chronic/repeaters/repeater_fortnight.rb +14 -9
- data/lib/chronic/repeaters/repeater_hour.rb +15 -10
- data/lib/chronic/repeaters/repeater_minute.rb +15 -10
- data/lib/chronic/repeaters/repeater_month.rb +20 -15
- data/lib/chronic/repeaters/repeater_month_name.rb +21 -16
- data/lib/chronic/repeaters/repeater_season.rb +136 -9
- data/lib/chronic/repeaters/repeater_season_name.rb +38 -17
- data/lib/chronic/repeaters/repeater_second.rb +15 -10
- data/lib/chronic/repeaters/repeater_time.rb +49 -42
- data/lib/chronic/repeaters/repeater_week.rb +16 -11
- data/lib/chronic/repeaters/repeater_weekday.rb +77 -0
- data/lib/chronic/repeaters/repeater_weekend.rb +14 -9
- data/lib/chronic/repeaters/repeater_year.rb +19 -13
- data/lib/chronic/scalar.rb +16 -14
- data/lib/chronic/separator.rb +25 -10
- data/lib/chronic/time_zone.rb +4 -3
- data/test/helper.rb +7 -0
- data/test/test_Chronic.rb +17 -18
- data/test/test_DaylightSavings.rb +118 -0
- data/test/test_Handler.rb +37 -38
- data/test/test_Numerizer.rb +8 -5
- data/test/test_RepeaterDayName.rb +15 -16
- data/test/test_RepeaterFortnight.rb +16 -17
- data/test/test_RepeaterHour.rb +18 -19
- data/test/test_RepeaterMinute.rb +34 -0
- data/test/test_RepeaterMonth.rb +16 -17
- data/test/test_RepeaterMonthName.rb +17 -18
- data/test/test_RepeaterTime.rb +20 -22
- data/test/test_RepeaterWeek.rb +16 -17
- data/test/test_RepeaterWeekday.rb +55 -0
- data/test/test_RepeaterWeekend.rb +21 -22
- data/test/test_RepeaterYear.rb +17 -18
- data/test/test_Span.rb +5 -6
- data/test/test_Time.rb +11 -12
- data/test/test_Token.rb +5 -6
- data/test/test_parsing.rb +300 -204
- metadata +74 -52
- data/History.txt +0 -53
- data/README.txt +0 -149
- data/test/suite.rb +0 -9
data/test/test_Handler.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require 'test/unit'
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
3
2
|
|
4
3
|
class TestHandler < Test::Unit::TestCase
|
5
|
-
|
4
|
+
|
6
5
|
def setup
|
7
6
|
# Wed Aug 16 14:00:00 UTC 2006
|
8
7
|
@now = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
@@ -10,101 +9,101 @@ class TestHandler < Test::Unit::TestCase
|
|
10
9
|
|
11
10
|
def test_handler_class_1
|
12
11
|
handler = Chronic::Handler.new([:repeater], :handler)
|
13
|
-
|
12
|
+
|
14
13
|
tokens = [Chronic::Token.new('friday')]
|
15
14
|
tokens[0].tag(Chronic::RepeaterDayName.new(:friday))
|
16
|
-
|
15
|
+
|
17
16
|
assert handler.match(tokens, Chronic.definitions)
|
18
|
-
|
17
|
+
|
19
18
|
tokens << Chronic::Token.new('afternoon')
|
20
19
|
tokens[1].tag(Chronic::RepeaterDayPortion.new(:afternoon))
|
21
|
-
|
20
|
+
|
22
21
|
assert !handler.match(tokens, Chronic.definitions)
|
23
22
|
end
|
24
|
-
|
23
|
+
|
25
24
|
def test_handler_class_2
|
26
25
|
handler = Chronic::Handler.new([:repeater, :repeater?], :handler)
|
27
|
-
|
26
|
+
|
28
27
|
tokens = [Chronic::Token.new('friday')]
|
29
28
|
tokens[0].tag(Chronic::RepeaterDayName.new(:friday))
|
30
|
-
|
29
|
+
|
31
30
|
assert handler.match(tokens, Chronic.definitions)
|
32
|
-
|
31
|
+
|
33
32
|
tokens << Chronic::Token.new('afternoon')
|
34
33
|
tokens[1].tag(Chronic::RepeaterDayPortion.new(:afternoon))
|
35
|
-
|
34
|
+
|
36
35
|
assert handler.match(tokens, Chronic.definitions)
|
37
|
-
|
36
|
+
|
38
37
|
tokens << Chronic::Token.new('afternoon')
|
39
38
|
tokens[2].tag(Chronic::RepeaterDayPortion.new(:afternoon))
|
40
|
-
|
39
|
+
|
41
40
|
assert !handler.match(tokens, Chronic.definitions)
|
42
41
|
end
|
43
|
-
|
42
|
+
|
44
43
|
def test_handler_class_3
|
45
44
|
handler = Chronic::Handler.new([:repeater, 'time?'], :handler)
|
46
|
-
|
45
|
+
|
47
46
|
tokens = [Chronic::Token.new('friday')]
|
48
47
|
tokens[0].tag(Chronic::RepeaterDayName.new(:friday))
|
49
|
-
|
48
|
+
|
50
49
|
assert handler.match(tokens, Chronic.definitions)
|
51
|
-
|
50
|
+
|
52
51
|
tokens << Chronic::Token.new('afternoon')
|
53
52
|
tokens[1].tag(Chronic::RepeaterDayPortion.new(:afternoon))
|
54
|
-
|
53
|
+
|
55
54
|
assert !handler.match(tokens, Chronic.definitions)
|
56
55
|
end
|
57
|
-
|
56
|
+
|
58
57
|
def test_handler_class_4
|
59
58
|
handler = Chronic::Handler.new([:repeater_month_name, :scalar_day, 'time?'], :handler)
|
60
|
-
|
59
|
+
|
61
60
|
tokens = [Chronic::Token.new('may')]
|
62
61
|
tokens[0].tag(Chronic::RepeaterMonthName.new(:may))
|
63
|
-
|
62
|
+
|
64
63
|
assert !handler.match(tokens, Chronic.definitions)
|
65
|
-
|
64
|
+
|
66
65
|
tokens << Chronic::Token.new('27')
|
67
66
|
tokens[1].tag(Chronic::ScalarDay.new(27))
|
68
|
-
|
67
|
+
|
69
68
|
assert handler.match(tokens, Chronic.definitions)
|
70
69
|
end
|
71
|
-
|
70
|
+
|
72
71
|
def test_handler_class_5
|
73
72
|
handler = Chronic::Handler.new([:repeater, 'time?'], :handler)
|
74
|
-
|
73
|
+
|
75
74
|
tokens = [Chronic::Token.new('friday')]
|
76
75
|
tokens[0].tag(Chronic::RepeaterDayName.new(:friday))
|
77
|
-
|
76
|
+
|
78
77
|
assert handler.match(tokens, Chronic.definitions)
|
79
|
-
|
78
|
+
|
80
79
|
tokens << Chronic::Token.new('5:00')
|
81
80
|
tokens[1].tag(Chronic::RepeaterTime.new('5:00'))
|
82
|
-
|
81
|
+
|
83
82
|
assert handler.match(tokens, Chronic.definitions)
|
84
|
-
|
83
|
+
|
85
84
|
tokens << Chronic::Token.new('pm')
|
86
85
|
tokens[2].tag(Chronic::RepeaterDayPortion.new(:pm))
|
87
|
-
|
86
|
+
|
88
87
|
assert handler.match(tokens, Chronic.definitions)
|
89
88
|
end
|
90
|
-
|
89
|
+
|
91
90
|
def test_handler_class_6
|
92
91
|
handler = Chronic::Handler.new([:scalar, :repeater, :pointer], :handler)
|
93
|
-
|
92
|
+
|
94
93
|
tokens = [Chronic::Token.new('3'),
|
95
94
|
Chronic::Token.new('years'),
|
96
95
|
Chronic::Token.new('past')]
|
97
|
-
|
96
|
+
|
98
97
|
tokens[0].tag(Chronic::Scalar.new(3))
|
99
98
|
tokens[1].tag(Chronic::RepeaterYear.new(:year))
|
100
99
|
tokens[2].tag(Chronic::Pointer.new(:past))
|
101
|
-
|
100
|
+
|
102
101
|
assert handler.match(tokens, Chronic.definitions)
|
103
102
|
end
|
104
|
-
|
103
|
+
|
105
104
|
def test_constantize
|
106
105
|
handler = Chronic::Handler.new([], :handler)
|
107
106
|
assert_equal Chronic::RepeaterTime, handler.constantize(:repeater_time)
|
108
107
|
end
|
109
|
-
|
110
|
-
end
|
108
|
+
|
109
|
+
end
|
data/test/test_Numerizer.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require
|
2
|
-
require 'chronic'
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
3
2
|
|
4
3
|
class ParseNumbersTest < Test::Unit::TestCase
|
5
4
|
|
@@ -23,7 +22,7 @@ class ParseNumbersTest < Test::Unit::TestCase
|
|
23
22
|
100 => 'a hundred',
|
24
23
|
100 => 'one hundred',
|
25
24
|
150 => 'one hundred and fifty',
|
26
|
-
|
25
|
+
# 150 => 'one fifty',
|
27
26
|
200 => 'two-hundred',
|
28
27
|
500 => '5 hundred',
|
29
28
|
999 => 'nine hundred and ninety nine',
|
@@ -40,9 +39,13 @@ class ParseNumbersTest < Test::Unit::TestCase
|
|
40
39
|
1_250_007 => 'one million two hundred fifty thousand and seven',
|
41
40
|
1_000_000_000 => 'one billion',
|
42
41
|
1_000_000_001 => 'one billion and one' }
|
43
|
-
|
42
|
+
|
44
43
|
strings.keys.sort.each do |key|
|
45
44
|
assert_equal key, Numerizer.numerize(strings[key]).to_i
|
46
45
|
end
|
47
46
|
end
|
48
|
-
|
47
|
+
|
48
|
+
def test_edges
|
49
|
+
assert_equal "27 Oct 2006 7:30am", Numerizer.numerize("27 Oct 2006 7:30am")
|
50
|
+
end
|
51
|
+
end
|
@@ -1,18 +1,17 @@
|
|
1
|
-
require
|
2
|
-
require 'test/unit'
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
3
2
|
|
4
3
|
class TestRepeaterDayName < Test::Unit::TestCase
|
5
|
-
|
4
|
+
|
6
5
|
def setup
|
7
6
|
@now = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
8
7
|
end
|
9
|
-
|
8
|
+
|
10
9
|
def test_match
|
11
10
|
token = Chronic::Token.new('saturday')
|
12
11
|
repeater = Chronic::Repeater.scan_for_day_names(token)
|
13
12
|
assert_equal Chronic::RepeaterDayName, repeater.class
|
14
13
|
assert_equal :saturday, repeater.type
|
15
|
-
|
14
|
+
|
16
15
|
token = Chronic::Token.new('sunday')
|
17
16
|
repeater = Chronic::Repeater.scan_for_day_names(token)
|
18
17
|
assert_equal Chronic::RepeaterDayName, repeater.class
|
@@ -22,31 +21,31 @@ class TestRepeaterDayName < Test::Unit::TestCase
|
|
22
21
|
def test_next_future
|
23
22
|
mondays = Chronic::RepeaterDayName.new(:monday)
|
24
23
|
mondays.start = @now
|
25
|
-
|
24
|
+
|
26
25
|
span = mondays.next(:future)
|
27
|
-
|
26
|
+
|
28
27
|
assert_equal Time.local(2006, 8, 21), span.begin
|
29
|
-
assert_equal Time.local(2006, 8, 22), span.end
|
28
|
+
assert_equal Time.local(2006, 8, 22), span.end
|
30
29
|
|
31
30
|
span = mondays.next(:future)
|
32
|
-
|
31
|
+
|
33
32
|
assert_equal Time.local(2006, 8, 28), span.begin
|
34
33
|
assert_equal Time.local(2006, 8, 29), span.end
|
35
34
|
end
|
36
|
-
|
35
|
+
|
37
36
|
def test_next_past
|
38
37
|
mondays = Chronic::RepeaterDayName.new(:monday)
|
39
38
|
mondays.start = @now
|
40
|
-
|
39
|
+
|
41
40
|
span = mondays.next(:past)
|
42
|
-
|
41
|
+
|
43
42
|
assert_equal Time.local(2006, 8, 14), span.begin
|
44
|
-
assert_equal Time.local(2006, 8, 15), span.end
|
43
|
+
assert_equal Time.local(2006, 8, 15), span.end
|
45
44
|
|
46
45
|
span = mondays.next(:past)
|
47
|
-
|
46
|
+
|
48
47
|
assert_equal Time.local(2006, 8, 7), span.begin
|
49
48
|
assert_equal Time.local(2006, 8, 8), span.end
|
50
49
|
end
|
51
|
-
|
52
|
-
end
|
50
|
+
|
51
|
+
end
|
@@ -1,8 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require 'test/unit'
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
3
2
|
|
4
3
|
class TestRepeaterFortnight < Test::Unit::TestCase
|
5
|
-
|
4
|
+
|
6
5
|
def setup
|
7
6
|
@now = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
8
7
|
end
|
@@ -10,54 +9,54 @@ class TestRepeaterFortnight < Test::Unit::TestCase
|
|
10
9
|
def test_next_future
|
11
10
|
fortnights = Chronic::RepeaterFortnight.new(:fortnight)
|
12
11
|
fortnights.start = @now
|
13
|
-
|
12
|
+
|
14
13
|
next_fortnight = fortnights.next(:future)
|
15
14
|
assert_equal Time.local(2006, 8, 20), next_fortnight.begin
|
16
15
|
assert_equal Time.local(2006, 9, 3), next_fortnight.end
|
17
|
-
|
16
|
+
|
18
17
|
next_next_fortnight = fortnights.next(:future)
|
19
18
|
assert_equal Time.local(2006, 9, 3), next_next_fortnight.begin
|
20
19
|
assert_equal Time.local(2006, 9, 17), next_next_fortnight.end
|
21
20
|
end
|
22
|
-
|
21
|
+
|
23
22
|
def test_next_past
|
24
23
|
fortnights = Chronic::RepeaterFortnight.new(:fortnight)
|
25
24
|
fortnights.start = @now
|
26
|
-
|
25
|
+
|
27
26
|
last_fortnight = fortnights.next(:past)
|
28
27
|
assert_equal Time.local(2006, 7, 30), last_fortnight.begin
|
29
28
|
assert_equal Time.local(2006, 8, 13), last_fortnight.end
|
30
|
-
|
29
|
+
|
31
30
|
last_last_fortnight = fortnights.next(:past)
|
32
31
|
assert_equal Time.local(2006, 7, 16), last_last_fortnight.begin
|
33
32
|
assert_equal Time.local(2006, 7, 30), last_last_fortnight.end
|
34
33
|
end
|
35
|
-
|
34
|
+
|
36
35
|
def test_this_future
|
37
36
|
fortnights = Chronic::RepeaterFortnight.new(:fortnight)
|
38
37
|
fortnights.start = @now
|
39
|
-
|
38
|
+
|
40
39
|
this_fortnight = fortnights.this(:future)
|
41
40
|
assert_equal Time.local(2006, 8, 16, 15), this_fortnight.begin
|
42
41
|
assert_equal Time.local(2006, 8, 27), this_fortnight.end
|
43
42
|
end
|
44
|
-
|
43
|
+
|
45
44
|
def test_this_past
|
46
45
|
fortnights = Chronic::RepeaterFortnight.new(:fortnight)
|
47
46
|
fortnights.start = @now
|
48
|
-
|
47
|
+
|
49
48
|
this_fortnight = fortnights.this(:past)
|
50
49
|
assert_equal Time.local(2006, 8, 13, 0), this_fortnight.begin
|
51
50
|
assert_equal Time.local(2006, 8, 16, 14), this_fortnight.end
|
52
51
|
end
|
53
|
-
|
52
|
+
|
54
53
|
def test_offset
|
55
54
|
span = Chronic::Span.new(@now, @now + 1)
|
56
|
-
|
55
|
+
|
57
56
|
offset_span = Chronic::RepeaterWeek.new(:week).offset(span, 3, :future)
|
58
|
-
|
57
|
+
|
59
58
|
assert_equal Time.local(2006, 9, 6, 14), offset_span.begin
|
60
59
|
assert_equal Time.local(2006, 9, 6, 14, 0, 1), offset_span.end
|
61
60
|
end
|
62
|
-
|
63
|
-
end
|
61
|
+
|
62
|
+
end
|
data/test/test_RepeaterHour.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require 'test/unit'
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
3
2
|
|
4
3
|
class TestRepeaterHour < Test::Unit::TestCase
|
5
|
-
|
4
|
+
|
6
5
|
def setup
|
7
6
|
@now = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
8
7
|
end
|
@@ -10,56 +9,56 @@ class TestRepeaterHour < Test::Unit::TestCase
|
|
10
9
|
def test_next_future
|
11
10
|
hours = Chronic::RepeaterHour.new(:hour)
|
12
11
|
hours.start = @now
|
13
|
-
|
12
|
+
|
14
13
|
next_hour = hours.next(:future)
|
15
14
|
assert_equal Time.local(2006, 8, 16, 15), next_hour.begin
|
16
15
|
assert_equal Time.local(2006, 8, 16, 16), next_hour.end
|
17
|
-
|
16
|
+
|
18
17
|
next_next_hour = hours.next(:future)
|
19
18
|
assert_equal Time.local(2006, 8, 16, 16), next_next_hour.begin
|
20
19
|
assert_equal Time.local(2006, 8, 16, 17), next_next_hour.end
|
21
20
|
end
|
22
|
-
|
21
|
+
|
23
22
|
def test_next_past
|
24
23
|
hours = Chronic::RepeaterHour.new(:hour)
|
25
24
|
hours.start = @now
|
26
|
-
|
25
|
+
|
27
26
|
past_hour = hours.next(:past)
|
28
27
|
assert_equal Time.local(2006, 8, 16, 13), past_hour.begin
|
29
28
|
assert_equal Time.local(2006, 8, 16, 14), past_hour.end
|
30
|
-
|
29
|
+
|
31
30
|
past_past_hour = hours.next(:past)
|
32
31
|
assert_equal Time.local(2006, 8, 16, 12), past_past_hour.begin
|
33
32
|
assert_equal Time.local(2006, 8, 16, 13), past_past_hour.end
|
34
33
|
end
|
35
|
-
|
34
|
+
|
36
35
|
def test_this
|
37
36
|
@now = Time.local(2006, 8, 16, 14, 30)
|
38
|
-
|
37
|
+
|
39
38
|
hours = Chronic::RepeaterHour.new(:hour)
|
40
39
|
hours.start = @now
|
41
|
-
|
40
|
+
|
42
41
|
this_hour = hours.this(:future)
|
43
42
|
assert_equal Time.local(2006, 8, 16, 14, 31), this_hour.begin
|
44
43
|
assert_equal Time.local(2006, 8, 16, 15), this_hour.end
|
45
|
-
|
44
|
+
|
46
45
|
this_hour = hours.this(:past)
|
47
46
|
assert_equal Time.local(2006, 8, 16, 14), this_hour.begin
|
48
47
|
assert_equal Time.local(2006, 8, 16, 14, 30), this_hour.end
|
49
48
|
end
|
50
|
-
|
49
|
+
|
51
50
|
def test_offset
|
52
51
|
span = Chronic::Span.new(@now, @now + 1)
|
53
|
-
|
52
|
+
|
54
53
|
offset_span = Chronic::RepeaterHour.new(:hour).offset(span, 3, :future)
|
55
|
-
|
54
|
+
|
56
55
|
assert_equal Time.local(2006, 8, 16, 17), offset_span.begin
|
57
56
|
assert_equal Time.local(2006, 8, 16, 17, 0, 1), offset_span.end
|
58
|
-
|
57
|
+
|
59
58
|
offset_span = Chronic::RepeaterHour.new(:hour).offset(span, 24, :past)
|
60
|
-
|
59
|
+
|
61
60
|
assert_equal Time.local(2006, 8, 15, 14), offset_span.begin
|
62
61
|
assert_equal Time.local(2006, 8, 15, 14, 0, 1), offset_span.end
|
63
62
|
end
|
64
|
-
|
65
|
-
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
2
|
+
|
3
|
+
class TestRepeaterMinute < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@now = Time.local(2008, 6, 25, 7, 15, 30, 0)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_next_future
|
10
|
+
minutes = Chronic::RepeaterMinute.new(:minute)
|
11
|
+
minutes.start = @now
|
12
|
+
|
13
|
+
next_minute = minutes.next(:future)
|
14
|
+
assert_equal Time.local(2008, 6, 25, 7, 16), next_minute.begin
|
15
|
+
assert_equal Time.local(2008, 6, 25, 7, 17), next_minute.end
|
16
|
+
|
17
|
+
next_next_minute = minutes.next(:future)
|
18
|
+
assert_equal Time.local(2008, 6, 25, 7, 17), next_next_minute.begin
|
19
|
+
assert_equal Time.local(2008, 6, 25, 7, 18), next_next_minute.end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_next_past
|
23
|
+
minutes = Chronic::RepeaterMinute.new(:minute)
|
24
|
+
minutes.start = @now
|
25
|
+
|
26
|
+
prev_minute = minutes.next(:past)
|
27
|
+
assert_equal Time.local(2008, 6, 25, 7, 14), prev_minute.begin
|
28
|
+
assert_equal Time.local(2008, 6, 25, 7, 15), prev_minute.end
|
29
|
+
|
30
|
+
prev_prev_minute = minutes.next(:past)
|
31
|
+
assert_equal Time.local(2008, 6, 25, 7, 13), prev_prev_minute.begin
|
32
|
+
assert_equal Time.local(2008, 6, 25, 7, 14), prev_prev_minute.end
|
33
|
+
end
|
34
|
+
end
|
data/test/test_RepeaterMonth.rb
CHANGED
@@ -1,47 +1,46 @@
|
|
1
|
-
require
|
2
|
-
require 'test/unit'
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
3
2
|
|
4
3
|
class TestRepeaterMonth < Test::Unit::TestCase
|
5
|
-
|
4
|
+
|
6
5
|
def setup
|
7
6
|
# Wed Aug 16 14:00:00 2006
|
8
7
|
@now = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
9
8
|
end
|
10
|
-
|
9
|
+
|
11
10
|
def test_offset_by
|
12
11
|
# future
|
13
|
-
|
12
|
+
|
14
13
|
time = Chronic::RepeaterMonth.new(:month).offset_by(@now, 1, :future)
|
15
14
|
assert_equal Time.local(2006, 9, 16, 14), time
|
16
|
-
|
15
|
+
|
17
16
|
time = Chronic::RepeaterMonth.new(:month).offset_by(@now, 5, :future)
|
18
17
|
assert_equal Time.local(2007, 1, 16, 14), time
|
19
|
-
|
18
|
+
|
20
19
|
# past
|
21
|
-
|
20
|
+
|
22
21
|
time = Chronic::RepeaterMonth.new(:month).offset_by(@now, 1, :past)
|
23
22
|
assert_equal Time.local(2006, 7, 16, 14), time
|
24
|
-
|
23
|
+
|
25
24
|
time = Chronic::RepeaterMonth.new(:month).offset_by(@now, 10, :past)
|
26
25
|
assert_equal Time.local(2005, 10, 16, 14), time
|
27
26
|
end
|
28
|
-
|
27
|
+
|
29
28
|
def test_offset
|
30
29
|
# future
|
31
|
-
|
30
|
+
|
32
31
|
span = Chronic::Span.new(@now, @now + 60)
|
33
32
|
offset_span = Chronic::RepeaterMonth.new(:month).offset(span, 1, :future)
|
34
|
-
|
33
|
+
|
35
34
|
assert_equal Time.local(2006, 9, 16, 14), offset_span.begin
|
36
35
|
assert_equal Time.local(2006, 9, 16, 14, 1), offset_span.end
|
37
|
-
|
36
|
+
|
38
37
|
# past
|
39
|
-
|
38
|
+
|
40
39
|
span = Chronic::Span.new(@now, @now + 60)
|
41
40
|
offset_span = Chronic::RepeaterMonth.new(:month).offset(span, 1, :past)
|
42
|
-
|
41
|
+
|
43
42
|
assert_equal Time.local(2006, 7, 16, 14), offset_span.begin
|
44
43
|
assert_equal Time.local(2006, 7, 16, 14, 1), offset_span.end
|
45
44
|
end
|
46
|
-
|
47
|
-
end
|
45
|
+
|
46
|
+
end
|