gforces-chronik 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.
Files changed (47) hide show
  1. data/README +161 -0
  2. data/lib/chronik.rb +100 -0
  3. data/lib/chronik/chronik.rb +249 -0
  4. data/lib/chronik/grabber.rb +26 -0
  5. data/lib/chronik/handlers.rb +524 -0
  6. data/lib/chronik/ordinal.rb +40 -0
  7. data/lib/chronik/pointer.rb +27 -0
  8. data/lib/chronik/repeater.rb +129 -0
  9. data/lib/chronik/repeaters/repeater_day.rb +52 -0
  10. data/lib/chronik/repeaters/repeater_day_name.rb +51 -0
  11. data/lib/chronik/repeaters/repeater_day_portion.rb +94 -0
  12. data/lib/chronik/repeaters/repeater_fortnight.rb +70 -0
  13. data/lib/chronik/repeaters/repeater_hour.rb +57 -0
  14. data/lib/chronik/repeaters/repeater_minute.rb +57 -0
  15. data/lib/chronik/repeaters/repeater_month.rb +66 -0
  16. data/lib/chronik/repeaters/repeater_month_name.rb +98 -0
  17. data/lib/chronik/repeaters/repeater_season.rb +150 -0
  18. data/lib/chronik/repeaters/repeater_season_name.rb +45 -0
  19. data/lib/chronik/repeaters/repeater_second.rb +41 -0
  20. data/lib/chronik/repeaters/repeater_time.rb +124 -0
  21. data/lib/chronik/repeaters/repeater_week.rb +73 -0
  22. data/lib/chronik/repeaters/repeater_weekday.rb +77 -0
  23. data/lib/chronik/repeaters/repeater_weekend.rb +65 -0
  24. data/lib/chronik/repeaters/repeater_year.rb +64 -0
  25. data/lib/chronik/scalar.rb +76 -0
  26. data/lib/chronik/separator.rb +91 -0
  27. data/lib/chronik/time_zone.rb +23 -0
  28. data/lib/numerizer/numerizer.rb +100 -0
  29. data/test/suite.rb +9 -0
  30. data/test/test_Chronik.rb +50 -0
  31. data/test/test_Handler.rb +110 -0
  32. data/test/test_Numerizer.rb +38 -0
  33. data/test/test_RepeaterDayName.rb +52 -0
  34. data/test/test_RepeaterFortnight.rb +63 -0
  35. data/test/test_RepeaterHour.rb +65 -0
  36. data/test/test_RepeaterMonth.rb +47 -0
  37. data/test/test_RepeaterMonthName.rb +57 -0
  38. data/test/test_RepeaterTime.rb +72 -0
  39. data/test/test_RepeaterWeek.rb +63 -0
  40. data/test/test_RepeaterWeekday.rb +56 -0
  41. data/test/test_RepeaterWeekend.rb +75 -0
  42. data/test/test_RepeaterYear.rb +63 -0
  43. data/test/test_Span.rb +24 -0
  44. data/test/test_Time.rb +50 -0
  45. data/test/test_Token.rb +26 -0
  46. data/test/test_parsing.rb +711 -0
  47. metadata +103 -0
@@ -0,0 +1,38 @@
1
+ require 'test/unit'
2
+ require 'chronik'
3
+
4
+ class ParseNumbersTest < Test::Unit::TestCase
5
+
6
+ def test_straight_parsing
7
+ strings = { 1 => 'jeden',
8
+ 5 => 'pięć',
9
+ 10 => 'dziesięć',
10
+ 11 => 'jedenaście',
11
+ 12 => 'dwanaście',
12
+ 13 => 'trzynaście',
13
+ 14 => 'czternaście',
14
+ 15 => 'piętnaście',
15
+ 16 => 'szesnaście',
16
+ 17 => 'siedemnaście',
17
+ 18 => 'osiemnaście',
18
+ 19 => 'dziewiętnaście',
19
+ 20 => 'dwadzieścia',
20
+ 27 => 'dwadzieścia siedem',
21
+ 31 => 'trzydzieści jeden',
22
+ 59 => 'pięćdziesiąt dziewięć',
23
+ 100 => 'sto',
24
+ 150 => 'sto pięćdziesiąt',
25
+ 200 => 'dwieście',
26
+ 500 => 'pięćset',
27
+ 999 => 'dziewięćset dziewięćdziesiąt dziewięć',
28
+ 1_000 => 'tysiąc'
29
+ }
30
+ strings.keys.sort.each do |key|
31
+ assert_equal key, Numerizer.numerize(strings[key]).to_i
32
+ end
33
+ end
34
+
35
+ def test_edges
36
+ assert_equal "27 Oct 2006 7:30am", Numerizer.numerize("27 Oct 2006 7:30am")
37
+ end
38
+ end
@@ -0,0 +1,52 @@
1
+ require 'chronik'
2
+ require 'test/unit'
3
+
4
+ class TestRepeaterDayName < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @now = Time.local(2006, 8, 16, 14, 0, 0, 0)
8
+ end
9
+
10
+ def test_match
11
+ token = Chronik::Token.new('saturday')
12
+ repeater = Chronik::Repeater.scan_for_day_names(token)
13
+ assert_equal Chronik::RepeaterDayName, repeater.class
14
+ assert_equal :saturday, repeater.type
15
+
16
+ token = Chronik::Token.new('sunday')
17
+ repeater = Chronik::Repeater.scan_for_day_names(token)
18
+ assert_equal Chronik::RepeaterDayName, repeater.class
19
+ assert_equal :sunday, repeater.type
20
+ end
21
+
22
+ def test_next_future
23
+ mondays = Chronik::RepeaterDayName.new(:monday)
24
+ mondays.start = @now
25
+
26
+ span = mondays.next(:future)
27
+
28
+ assert_equal Time.local(2006, 8, 21), span.begin
29
+ assert_equal Time.local(2006, 8, 22), span.end
30
+
31
+ span = mondays.next(:future)
32
+
33
+ assert_equal Time.local(2006, 8, 28), span.begin
34
+ assert_equal Time.local(2006, 8, 29), span.end
35
+ end
36
+
37
+ def test_next_past
38
+ mondays = Chronik::RepeaterDayName.new(:monday)
39
+ mondays.start = @now
40
+
41
+ span = mondays.next(:past)
42
+
43
+ assert_equal Time.local(2006, 8, 14), span.begin
44
+ assert_equal Time.local(2006, 8, 15), span.end
45
+
46
+ span = mondays.next(:past)
47
+
48
+ assert_equal Time.local(2006, 8, 7), span.begin
49
+ assert_equal Time.local(2006, 8, 8), span.end
50
+ end
51
+
52
+ end
@@ -0,0 +1,63 @@
1
+ require 'chronik'
2
+ require 'test/unit'
3
+
4
+ class TestRepeaterFortnight < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @now = Time.local(2006, 8, 16, 14, 0, 0, 0)
8
+ end
9
+
10
+ def test_next_future
11
+ fortnights = Chronik::RepeaterFortnight.new(:fortnight)
12
+ fortnights.start = @now
13
+
14
+ next_fortnight = fortnights.next(:future)
15
+ assert_equal Time.local(2006, 8, 20), next_fortnight.begin
16
+ assert_equal Time.local(2006, 9, 3), next_fortnight.end
17
+
18
+ next_next_fortnight = fortnights.next(:future)
19
+ assert_equal Time.local(2006, 9, 3), next_next_fortnight.begin
20
+ assert_equal Time.local(2006, 9, 17), next_next_fortnight.end
21
+ end
22
+
23
+ def test_next_past
24
+ fortnights = Chronik::RepeaterFortnight.new(:fortnight)
25
+ fortnights.start = @now
26
+
27
+ last_fortnight = fortnights.next(:past)
28
+ assert_equal Time.local(2006, 7, 30), last_fortnight.begin
29
+ assert_equal Time.local(2006, 8, 13), last_fortnight.end
30
+
31
+ last_last_fortnight = fortnights.next(:past)
32
+ assert_equal Time.local(2006, 7, 16), last_last_fortnight.begin
33
+ assert_equal Time.local(2006, 7, 30), last_last_fortnight.end
34
+ end
35
+
36
+ def test_this_future
37
+ fortnights = Chronik::RepeaterFortnight.new(:fortnight)
38
+ fortnights.start = @now
39
+
40
+ this_fortnight = fortnights.this(:future)
41
+ assert_equal Time.local(2006, 8, 16, 15), this_fortnight.begin
42
+ assert_equal Time.local(2006, 8, 27), this_fortnight.end
43
+ end
44
+
45
+ def test_this_past
46
+ fortnights = Chronik::RepeaterFortnight.new(:fortnight)
47
+ fortnights.start = @now
48
+
49
+ this_fortnight = fortnights.this(:past)
50
+ assert_equal Time.local(2006, 8, 13, 0), this_fortnight.begin
51
+ assert_equal Time.local(2006, 8, 16, 14), this_fortnight.end
52
+ end
53
+
54
+ def test_offset
55
+ span = Chronik::Span.new(@now, @now + 1)
56
+
57
+ offset_span = Chronik::RepeaterWeek.new(:week).offset(span, 3, :future)
58
+
59
+ assert_equal Time.local(2006, 9, 6, 14), offset_span.begin
60
+ assert_equal Time.local(2006, 9, 6, 14, 0, 1), offset_span.end
61
+ end
62
+
63
+ end
@@ -0,0 +1,65 @@
1
+ require 'chronik'
2
+ require 'test/unit'
3
+
4
+ class TestRepeaterHour < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @now = Time.local(2006, 8, 16, 14, 0, 0, 0)
8
+ end
9
+
10
+ def test_next_future
11
+ hours = Chronik::RepeaterHour.new(:hour)
12
+ hours.start = @now
13
+
14
+ next_hour = hours.next(:future)
15
+ assert_equal Time.local(2006, 8, 16, 15), next_hour.begin
16
+ assert_equal Time.local(2006, 8, 16, 16), next_hour.end
17
+
18
+ next_next_hour = hours.next(:future)
19
+ assert_equal Time.local(2006, 8, 16, 16), next_next_hour.begin
20
+ assert_equal Time.local(2006, 8, 16, 17), next_next_hour.end
21
+ end
22
+
23
+ def test_next_past
24
+ hours = Chronik::RepeaterHour.new(:hour)
25
+ hours.start = @now
26
+
27
+ past_hour = hours.next(:past)
28
+ assert_equal Time.local(2006, 8, 16, 13), past_hour.begin
29
+ assert_equal Time.local(2006, 8, 16, 14), past_hour.end
30
+
31
+ past_past_hour = hours.next(:past)
32
+ assert_equal Time.local(2006, 8, 16, 12), past_past_hour.begin
33
+ assert_equal Time.local(2006, 8, 16, 13), past_past_hour.end
34
+ end
35
+
36
+ def test_this
37
+ @now = Time.local(2006, 8, 16, 14, 30)
38
+
39
+ hours = Chronik::RepeaterHour.new(:hour)
40
+ hours.start = @now
41
+
42
+ this_hour = hours.this(:future)
43
+ assert_equal Time.local(2006, 8, 16, 14, 31), this_hour.begin
44
+ assert_equal Time.local(2006, 8, 16, 15), this_hour.end
45
+
46
+ this_hour = hours.this(:past)
47
+ assert_equal Time.local(2006, 8, 16, 14), this_hour.begin
48
+ assert_equal Time.local(2006, 8, 16, 14, 30), this_hour.end
49
+ end
50
+
51
+ def test_offset
52
+ span = Chronik::Span.new(@now, @now + 1)
53
+
54
+ offset_span = Chronik::RepeaterHour.new(:hour).offset(span, 3, :future)
55
+
56
+ assert_equal Time.local(2006, 8, 16, 17), offset_span.begin
57
+ assert_equal Time.local(2006, 8, 16, 17, 0, 1), offset_span.end
58
+
59
+ offset_span = Chronik::RepeaterHour.new(:hour).offset(span, 24, :past)
60
+
61
+ assert_equal Time.local(2006, 8, 15, 14), offset_span.begin
62
+ assert_equal Time.local(2006, 8, 15, 14, 0, 1), offset_span.end
63
+ end
64
+
65
+ end
@@ -0,0 +1,47 @@
1
+ require 'chronik'
2
+ require 'test/unit'
3
+
4
+ class TestRepeaterMonth < Test::Unit::TestCase
5
+
6
+ def setup
7
+ # Wed Aug 16 14:00:00 2006
8
+ @now = Time.local(2006, 8, 16, 14, 0, 0, 0)
9
+ end
10
+
11
+ def test_offset_by
12
+ # future
13
+
14
+ time = Chronik::RepeaterMonth.new(:month).offset_by(@now, 1, :future)
15
+ assert_equal Time.local(2006, 9, 16, 14), time
16
+
17
+ time = Chronik::RepeaterMonth.new(:month).offset_by(@now, 5, :future)
18
+ assert_equal Time.local(2007, 1, 16, 14), time
19
+
20
+ # past
21
+
22
+ time = Chronik::RepeaterMonth.new(:month).offset_by(@now, 1, :past)
23
+ assert_equal Time.local(2006, 7, 16, 14), time
24
+
25
+ time = Chronik::RepeaterMonth.new(:month).offset_by(@now, 10, :past)
26
+ assert_equal Time.local(2005, 10, 16, 14), time
27
+ end
28
+
29
+ def test_offset
30
+ # future
31
+
32
+ span = Chronik::Span.new(@now, @now + 60)
33
+ offset_span = Chronik::RepeaterMonth.new(:month).offset(span, 1, :future)
34
+
35
+ assert_equal Time.local(2006, 9, 16, 14), offset_span.begin
36
+ assert_equal Time.local(2006, 9, 16, 14, 1), offset_span.end
37
+
38
+ # past
39
+
40
+ span = Chronik::Span.new(@now, @now + 60)
41
+ offset_span = Chronik::RepeaterMonth.new(:month).offset(span, 1, :past)
42
+
43
+ assert_equal Time.local(2006, 7, 16, 14), offset_span.begin
44
+ assert_equal Time.local(2006, 7, 16, 14, 1), offset_span.end
45
+ end
46
+
47
+ end
@@ -0,0 +1,57 @@
1
+ require 'chronik'
2
+ require 'test/unit'
3
+
4
+ class TestRepeaterMonthName < Test::Unit::TestCase
5
+
6
+ def setup
7
+ # Wed Aug 16 14:00:00 2006
8
+ @now = Time.local(2006, 8, 16, 14, 0, 0, 0)
9
+ end
10
+
11
+ def test_next
12
+ # future
13
+
14
+ mays = Chronik::RepeaterMonthName.new(:may)
15
+ mays.start = @now
16
+
17
+ next_may = mays.next(:future)
18
+ assert_equal Time.local(2007, 5), next_may.begin
19
+ assert_equal Time.local(2007, 6), next_may.end
20
+
21
+ next_next_may = mays.next(:future)
22
+ assert_equal Time.local(2008, 5), next_next_may.begin
23
+ assert_equal Time.local(2008, 6), next_next_may.end
24
+
25
+ decembers = Chronik::RepeaterMonthName.new(:december)
26
+ decembers.start = @now
27
+
28
+ next_december = decembers.next(:future)
29
+ assert_equal Time.local(2006, 12), next_december.begin
30
+ assert_equal Time.local(2007, 1), next_december.end
31
+
32
+ # past
33
+
34
+ mays = Chronik::RepeaterMonthName.new(:may)
35
+ mays.start = @now
36
+
37
+ assert_equal Time.local(2006, 5), mays.next(:past).begin
38
+ assert_equal Time.local(2005, 5), mays.next(:past).begin
39
+ end
40
+
41
+ def test_this
42
+ octobers = Chronik::RepeaterMonthName.new(:october)
43
+ octobers.start = @now
44
+
45
+ this_october = octobers.this(:future)
46
+ assert_equal Time.local(2006, 10, 1), this_october.begin
47
+ assert_equal Time.local(2006, 11, 1), this_october.end
48
+
49
+ aprils = Chronik::RepeaterMonthName.new(:april)
50
+ aprils.start = @now
51
+
52
+ this_april = aprils.this(:past)
53
+ assert_equal Time.local(2006, 4, 1), this_april.begin
54
+ assert_equal Time.local(2006, 5, 1), this_april.end
55
+ end
56
+
57
+ end
@@ -0,0 +1,72 @@
1
+ require 'chronik'
2
+ require 'test/unit'
3
+
4
+ class TestRepeaterTime < Test::Unit::TestCase
5
+
6
+ def setup
7
+ # Wed Aug 16 14:00:00 2006
8
+ @now = Time.local(2006, 8, 16, 14, 0, 0, 0)
9
+ end
10
+
11
+ def test_next_future
12
+ t = Chronik::RepeaterTime.new('4:00')
13
+ t.start = @now
14
+
15
+ assert_equal Time.local(2006, 8, 16, 16), t.next(:future).begin
16
+ assert_equal Time.local(2006, 8, 17, 4), t.next(:future).begin
17
+
18
+ t = Chronik::RepeaterTime.new('13:00')
19
+ t.start = @now
20
+
21
+ assert_equal Time.local(2006, 8, 17, 13), t.next(:future).begin
22
+ assert_equal Time.local(2006, 8, 18, 13), t.next(:future).begin
23
+
24
+ t = Chronik::RepeaterTime.new('0400')
25
+ t.start = @now
26
+
27
+ assert_equal Time.local(2006, 8, 17, 4), t.next(:future).begin
28
+ assert_equal Time.local(2006, 8, 18, 4), t.next(:future).begin
29
+ end
30
+
31
+ def test_next_past
32
+ t = Chronik::RepeaterTime.new('4:00')
33
+ t.start = @now
34
+
35
+ assert_equal Time.local(2006, 8, 16, 4), t.next(:past).begin
36
+ assert_equal Time.local(2006, 8, 15, 16), t.next(:past).begin
37
+
38
+ t = Chronik::RepeaterTime.new('13:00')
39
+ t.start = @now
40
+
41
+ assert_equal Time.local(2006, 8, 16, 13), t.next(:past).begin
42
+ assert_equal Time.local(2006, 8, 15, 13), t.next(:past).begin
43
+ end
44
+
45
+ def test_type
46
+ t1 = Chronik::RepeaterTime.new('4')
47
+ assert_equal 14_400, t1.type.time
48
+
49
+ t1 = Chronik::RepeaterTime.new('14')
50
+ assert_equal 50_400, t1.type.time
51
+
52
+ t1 = Chronik::RepeaterTime.new('4:00')
53
+ assert_equal 14_400, t1.type.time
54
+
55
+ t1 = Chronik::RepeaterTime.new('4:30')
56
+ assert_equal 16_200, t1.type.time
57
+
58
+ t1 = Chronik::RepeaterTime.new('1400')
59
+ assert_equal 50_400, t1.type.time
60
+
61
+ t1 = Chronik::RepeaterTime.new('0400')
62
+ assert_equal 14_400, t1.type.time
63
+
64
+ t1 = Chronik::RepeaterTime.new('04')
65
+ assert_equal 14_400, t1.type.time
66
+
67
+ t1 = Chronik::RepeaterTime.new('400')
68
+ assert_equal 14_400, t1.type.time
69
+ end
70
+
71
+
72
+ end
@@ -0,0 +1,63 @@
1
+ require 'chronik'
2
+ require 'test/unit'
3
+
4
+ class TestRepeaterWeek < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @now = Time.local(2006, 8, 16, 14, 0, 0, 0)
8
+ end
9
+
10
+ def test_next_future
11
+ weeks = Chronik::RepeaterWeek.new(:week)
12
+ weeks.start = @now
13
+
14
+ next_week = weeks.next(:future)
15
+ assert_equal Time.local(2006, 8, 20), next_week.begin
16
+ assert_equal Time.local(2006, 8, 27), next_week.end
17
+
18
+ next_next_week = weeks.next(:future)
19
+ assert_equal Time.local(2006, 8, 27), next_next_week.begin
20
+ assert_equal Time.local(2006, 9, 3), next_next_week.end
21
+ end
22
+
23
+ def test_next_past
24
+ weeks = Chronik::RepeaterWeek.new(:week)
25
+ weeks.start = @now
26
+
27
+ last_week = weeks.next(:past)
28
+ assert_equal Time.local(2006, 8, 6), last_week.begin
29
+ assert_equal Time.local(2006, 8, 13), last_week.end
30
+
31
+ last_last_week = weeks.next(:past)
32
+ assert_equal Time.local(2006, 7, 30), last_last_week.begin
33
+ assert_equal Time.local(2006, 8, 6), last_last_week.end
34
+ end
35
+
36
+ def test_this_future
37
+ weeks = Chronik::RepeaterWeek.new(:week)
38
+ weeks.start = @now
39
+
40
+ this_week = weeks.this(:future)
41
+ assert_equal Time.local(2006, 8, 16, 15), this_week.begin
42
+ assert_equal Time.local(2006, 8, 20), this_week.end
43
+ end
44
+
45
+ def test_this_past
46
+ weeks = Chronik::RepeaterWeek.new(:week)
47
+ weeks.start = @now
48
+
49
+ this_week = weeks.this(:past)
50
+ assert_equal Time.local(2006, 8, 13, 0), this_week.begin
51
+ assert_equal Time.local(2006, 8, 16, 14), this_week.end
52
+ end
53
+
54
+ def test_offset
55
+ span = Chronik::Span.new(@now, @now + 1)
56
+
57
+ offset_span = Chronik::RepeaterWeek.new(:week).offset(span, 3, :future)
58
+
59
+ assert_equal Time.local(2006, 9, 6, 14), offset_span.begin
60
+ assert_equal Time.local(2006, 9, 6, 14, 0, 1), offset_span.end
61
+ end
62
+
63
+ end