runt 0.7.0 → 0.9.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/.gitignore +19 -0
- data/.travis.yml +5 -0
- data/{CHANGES → CHANGES.txt} +24 -8
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -44
- data/README.md +79 -0
- data/Rakefile +6 -119
- data/doc/tutorial_schedule.md +365 -0
- data/doc/tutorial_sugar.md +170 -0
- data/doc/tutorial_te.md +155 -0
- data/lib/runt.rb +36 -21
- data/lib/runt/dprecision.rb +4 -2
- data/lib/runt/pdate.rb +101 -95
- data/lib/runt/schedule.rb +18 -0
- data/lib/runt/sugar.rb +41 -9
- data/lib/runt/temporalexpression.rb +246 -30
- data/lib/runt/version.rb +3 -0
- data/runt.gemspec +24 -0
- data/site/.cvsignore +1 -0
- data/site/dcl-small.gif +0 -0
- data/site/index-rubforge-www.html +72 -0
- data/site/index.html +75 -60
- data/site/runt-logo.gif +0 -0
- data/site/runt-logo.psd +0 -0
- data/test/baseexpressiontest.rb +10 -8
- data/test/combinedexpressionstest.rb +166 -158
- data/test/daterangetest.rb +4 -6
- data/test/diweektest.rb +32 -32
- data/test/dprecisiontest.rb +2 -4
- data/test/everytetest.rb +6 -0
- data/test/expressionbuildertest.rb +2 -3
- data/test/icalendartest.rb +3 -6
- data/test/minitest_helper.rb +7 -0
- data/test/pdatetest.rb +21 -6
- data/test/redaytest.rb +3 -0
- data/test/reyeartest.rb +1 -1
- data/test/runttest.rb +5 -8
- data/test/scheduletest.rb +13 -14
- data/test/sugartest.rb +28 -6
- data/test/{spectest.rb → temporaldatetest.rb} +14 -4
- data/test/{rspectest.rb → temporalrangetest.rb} +4 -4
- data/test/test_runt.rb +11 -0
- data/test/weekintervaltest.rb +106 -0
- metadata +161 -116
- data/README +0 -106
- data/doc/tutorial_schedule.rdoc +0 -393
- data/doc/tutorial_sugar.rdoc +0 -143
- data/doc/tutorial_te.rdoc +0 -190
- data/setup.rb +0 -1331
data/test/daterangetest.rb
CHANGED
@@ -1,19 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
5
|
# Unit tests for DateRange class
|
8
6
|
#
|
9
7
|
# Author:: Matthew Lipper
|
10
|
-
class DateRangeTest <
|
8
|
+
class DateRangeTest < MiniTest::Unit::TestCase
|
11
9
|
|
12
10
|
include Runt
|
13
11
|
|
14
12
|
def test_sub_range
|
15
|
-
r_start = PDate.
|
16
|
-
r_end = PDate.
|
13
|
+
r_start = PDate.min(2004,2,29,16,24)
|
14
|
+
r_end = PDate.min(2004,3,2,4,22)
|
17
15
|
range = DateRange.new(r_start,r_end)
|
18
16
|
assert(range.min==r_start)
|
19
17
|
assert(range.max==r_end)
|
data/test/diweektest.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'baseexpressiontest'
|
4
|
-
|
5
|
-
# Unit tests for DIWeek class
|
6
|
-
# Author:: Matthew Lipper
|
7
|
-
|
8
|
-
class DIWeekTest < BaseExpressionTest
|
9
|
-
|
10
|
-
def test_day_in_week_te
|
11
|
-
expr = DIWeek.new(Friday)
|
12
|
-
assert expr.include?(@date_20040109), "'Friday' should include #{@date_20040109} which is a Friday"
|
13
|
-
assert expr.include?(@date_20040116), "'Friday' should include #{@date_20040116} which is a Friday"
|
14
|
-
assert !expr.include?(@date_20040125), "'Friday' should not include #{@date_20040125} which is a Sunday"
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_day_in_week_te_to_s
|
18
|
-
assert_equal 'Friday', DIWeek.new(Friday).to_s
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_day_in_week_dates
|
22
|
-
expr = DIWeek.new(Sunday)
|
23
|
-
dates = expr.dates(@date_20050101..@date_20050131)
|
24
|
-
assert dates.size == 5, "There are five Sundays in January, 2005: found #{dates.size}"
|
25
|
-
assert dates.include?(@date_20050102), "Should include #{@date_20050102}"
|
26
|
-
assert dates.include?(@date_20050109), "Should include #{@date_20050109}"
|
27
|
-
assert dates.include?(@date_20050116), "Should include #{@date_20050116}"
|
28
|
-
assert dates.include?(@date_20050123), "Should include #{@date_20050123}"
|
29
|
-
assert dates.include?(@date_20050130), "Should include #{@date_20050130}"
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'baseexpressiontest'
|
4
|
+
|
5
|
+
# Unit tests for DIWeek class
|
6
|
+
# Author:: Matthew Lipper
|
7
|
+
|
8
|
+
class DIWeekTest < BaseExpressionTest
|
9
|
+
|
10
|
+
def test_day_in_week_te
|
11
|
+
expr = DIWeek.new(Friday)
|
12
|
+
assert expr.include?(@date_20040109), "'Friday' should include #{@date_20040109} which is a Friday"
|
13
|
+
assert expr.include?(@date_20040116), "'Friday' should include #{@date_20040116} which is a Friday"
|
14
|
+
assert !expr.include?(@date_20040125), "'Friday' should not include #{@date_20040125} which is a Sunday"
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_day_in_week_te_to_s
|
18
|
+
assert_equal 'Friday', DIWeek.new(Friday).to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_day_in_week_dates
|
22
|
+
expr = DIWeek.new(Sunday)
|
23
|
+
dates = expr.dates(@date_20050101..@date_20050131)
|
24
|
+
assert dates.size == 5, "There are five Sundays in January, 2005: found #{dates.size}"
|
25
|
+
assert dates.include?(@date_20050102), "Should include #{@date_20050102}"
|
26
|
+
assert dates.include?(@date_20050109), "Should include #{@date_20050109}"
|
27
|
+
assert dates.include?(@date_20050116), "Should include #{@date_20050116}"
|
28
|
+
assert dates.include?(@date_20050123), "Should include #{@date_20050123}"
|
29
|
+
assert dates.include?(@date_20050130), "Should include #{@date_20050130}"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/test/dprecisiontest.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
5
|
# Unit tests for DPrecision class
|
8
6
|
#
|
9
7
|
# Author:: Matthew Lipper
|
10
8
|
|
11
|
-
class DPrecisionTest <
|
9
|
+
class DPrecisionTest < MiniTest::Unit::TestCase
|
12
10
|
|
13
11
|
include Runt
|
14
12
|
|
data/test/everytetest.rb
CHANGED
@@ -7,6 +7,12 @@ require 'baseexpressiontest'
|
|
7
7
|
|
8
8
|
class EveryTETest < BaseExpressionTest
|
9
9
|
|
10
|
+
def test_every_other_week
|
11
|
+
date = @pdate_20081112
|
12
|
+
expr = EveryTE.new(date, 14, DPrecision::DAY)
|
13
|
+
assert !expr.include?(date + 7)
|
14
|
+
assert expr.include?(date + 14)
|
15
|
+
end
|
10
16
|
|
11
17
|
def test_every_2_minutes
|
12
18
|
date = @pdate_200401282100
|
data/test/icalendartest.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'date'
|
5
|
-
require 'runt'
|
6
|
-
require 'set'
|
3
|
+
require 'minitest_helper'
|
7
4
|
|
8
|
-
include Runt
|
9
5
|
|
10
6
|
# RFC 2445 is the iCalendar specification. It includes dozens of
|
11
7
|
# specific examples that make great tests for Runt temporal expressions.
|
12
|
-
class ICalendarTest <
|
8
|
+
class ICalendarTest < MiniTest::Unit::TestCase
|
9
|
+
include Runt
|
13
10
|
|
14
11
|
# "Daily for 10 occurences"
|
15
12
|
def test_example_1
|
data/test/pdatetest.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'date'
|
5
|
-
require 'runt'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
5
|
# Unit tests for PDate class
|
8
6
|
# Author:: Matthew Lipper
|
9
|
-
class PDateTest <
|
7
|
+
class PDateTest < MiniTest::Unit::TestCase
|
10
8
|
|
11
9
|
include Runt
|
12
10
|
|
@@ -25,13 +23,24 @@ class PDateTest < Test::Unit::TestCase
|
|
25
23
|
@second_prec = PDate.sec(2004,3,1,0,0,10)
|
26
24
|
end
|
27
25
|
|
26
|
+
def test_pdate_with_native_range
|
27
|
+
start_dt = PDate.min(2013,04,22,8,0)
|
28
|
+
middle_dt = PDate.min(2013,04,22,8,2)
|
29
|
+
end_dt = PDate.min(2013,04,22,8,04)
|
30
|
+
range = start_dt..end_dt
|
31
|
+
assert(range.include?(middle_dt))
|
32
|
+
end
|
33
|
+
|
28
34
|
def test_marshal
|
29
35
|
# Thanks to Jodi Showers for finding/fixing this bug
|
30
36
|
pdate=PDate.new(2004,2,29,22,13,2)
|
31
|
-
|
37
|
+
refute_nil pdate.date_precision
|
32
38
|
data=Marshal.dump pdate
|
33
39
|
obj=Marshal.load data
|
34
|
-
|
40
|
+
refute_nil obj.date_precision
|
41
|
+
#FIXME: marshall broken in 1.9
|
42
|
+
#assert(obj.eql?(pdate))
|
43
|
+
#assert(pdate.eql?(obj))
|
35
44
|
end
|
36
45
|
|
37
46
|
def test_include
|
@@ -144,4 +153,10 @@ class PDateTest < Test::Unit::TestCase
|
|
144
153
|
end
|
145
154
|
end
|
146
155
|
|
156
|
+
def test_parse_with_precision
|
157
|
+
month_parsed = PDate.parse('April 2004', :precision => PDate::MONTH)
|
158
|
+
assert_equal month_parsed, PDate.month(2004,04)
|
159
|
+
refute_equal month_parsed, PDate.year(2004,04)
|
160
|
+
end
|
161
|
+
|
147
162
|
end
|
data/test/redaytest.rb
CHANGED
@@ -35,6 +35,9 @@ class REDayTest < BaseExpressionTest
|
|
35
35
|
expr = REDay.new(8,00,10,00, false)
|
36
36
|
assert !expr.include?(@pdate_20040531), \
|
37
37
|
"Expression #{expr.to_s} created with less_precise_match=false should not include any lower precision argument automatically"
|
38
|
+
## Date class which has no public hour or min methods should not cause an exception
|
39
|
+
assert !expr.include?(@date_19611101), \
|
40
|
+
"Expression #{expr.to_s} created with less_precise_match=false should not hurl when given a Date instance"
|
38
41
|
end
|
39
42
|
|
40
43
|
end
|
data/test/reyeartest.rb
CHANGED
@@ -31,7 +31,7 @@ class REYearTest < BaseExpressionTest
|
|
31
31
|
assert expr.end_day == REYear::NO_DAY, "End day should equal constant NO_DAY"
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
34
|
+
def test_ctor_four_args
|
35
35
|
expr = REYear.new(10,21,12,3)
|
36
36
|
assert expr.start_month == 10, "Start month should equal 10"
|
37
37
|
assert expr.end_month == 12, "End month should equal 12"
|
data/test/runttest.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
6
|
-
require 'pp'
|
3
|
+
require 'minitest_helper'
|
7
4
|
|
8
|
-
class RuntModuleTest <
|
5
|
+
class RuntModuleTest < MiniTest::Unit::TestCase
|
9
6
|
|
10
7
|
def test_last
|
11
8
|
assert Runt::Last == -1
|
@@ -80,19 +77,19 @@ class RuntModuleTest < Test::Unit::TestCase
|
|
80
77
|
|
81
78
|
def test_date_class_dprecision
|
82
79
|
date=Date.today
|
83
|
-
assert_equal(Runt::DPrecision::
|
80
|
+
assert_equal(Runt::DPrecision::DAY,date.date_precision)
|
84
81
|
end
|
85
82
|
|
86
83
|
def test_datetime_class_dprecision
|
87
84
|
date=DateTime.civil
|
88
|
-
assert_equal(Runt::DPrecision::
|
85
|
+
assert_equal(Runt::DPrecision::SEC,date.date_precision)
|
89
86
|
end
|
90
87
|
|
91
88
|
def test_time_plus
|
92
89
|
time=Time.local(2006, 12, 9, 5, 56, 12)
|
93
90
|
# Default precision is minute
|
94
91
|
assert_equal(Runt::PDate.min(2006,12,9,5,56),Runt::DPrecision.to_p(time))
|
95
|
-
|
92
|
+
refute_equal(Time.parse("Sat Dec 09 05:56:00 -0500 2006"),time)
|
96
93
|
end
|
97
94
|
|
98
95
|
end
|
data/test/scheduletest.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
5
|
# Unit tests for Schedule classes
|
8
6
|
# Author:: Matthew Lipper
|
9
|
-
class ScheduleTest <
|
7
|
+
class ScheduleTest < MiniTest::Unit::TestCase
|
10
8
|
|
11
9
|
include Runt
|
12
10
|
|
@@ -87,14 +85,15 @@ class ScheduleTest < Test::Unit::TestCase
|
|
87
85
|
@sched=Schedule.new
|
88
86
|
e1=Event.new("e1")
|
89
87
|
assert(!@sched.include?(e1,nil))
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
assert(
|
88
|
+
#FIXME: Temporarily comment this out since it hangs JRuby 1.9
|
89
|
+
#range=TemporalRange.new(DateRange.new(PDate.new(2006,12,3),PDate.new(2007,1,24)))
|
90
|
+
#in_range=PDate.new(2007,1,4)
|
91
|
+
#assert(range.include?(in_range))
|
92
|
+
#out_of_range=PDate.new(2006,1,4)
|
93
|
+
#assert(!range.include?(out_of_range))
|
94
|
+
#@sched.add(e1,range)
|
95
|
+
#assert(@sched.include?(e1,in_range))
|
96
|
+
#assert(!@sched.include?(e1,out_of_range))
|
98
97
|
end
|
99
98
|
|
100
99
|
def test_dates
|
@@ -113,10 +112,10 @@ class ScheduleTest < Test::Unit::TestCase
|
|
113
112
|
def test_using_a_schedule
|
114
113
|
|
115
114
|
# September 18th - 19th, 2005, 8am - 10am
|
116
|
-
expr1=
|
115
|
+
expr1=TemporalRange.new(DateRange.new(PDate.day(2005,9,18),PDate.day(2005,9,19))) & REDay.new(8,0,10,0)
|
117
116
|
assert(expr1.include?(PDate.min(2005,9,18,8,15)))
|
118
117
|
# September 19th - 20th, 2005, 9am - 11am
|
119
|
-
expr2=
|
118
|
+
expr2=TemporalRange.new(DateRange.new(PDate.day(2005,9,19),PDate.day(2005,9,20))) & REDay.new(9,0,11,0)
|
120
119
|
# Quick sanuty check
|
121
120
|
assert(expr1.overlap?(expr2))
|
122
121
|
# Setup a @schedule w/first expression
|
data/test/sugartest.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'runt/sugar'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
|
-
class SugarTest <
|
5
|
+
class SugarTest < MiniTest::Unit::TestCase
|
8
6
|
include Runt
|
9
7
|
|
10
|
-
def
|
11
|
-
|
8
|
+
def setup
|
9
|
+
@date = PDate.day(2008,7,1)
|
12
10
|
end
|
13
11
|
|
14
12
|
def test_method_missing_should_be_called_for_invalid_name
|
@@ -87,6 +85,30 @@ class SugarTest < Test::Unit::TestCase
|
|
87
85
|
end
|
88
86
|
end
|
89
87
|
|
88
|
+
def test_after_should_define_after_te_with_inclusive_parameter
|
89
|
+
result = self.after(@date, true)
|
90
|
+
assert_expression AfterTE.new(@date, true), result
|
91
|
+
assert result.instance_variable_get("@inclusive")
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_after_should_define_after_te_without_inclusive_parameter
|
95
|
+
result = self.after(@date)
|
96
|
+
assert_expression AfterTE.new(@date), result
|
97
|
+
assert !result.instance_variable_get("@inclusive")
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_before_should_define_before_te_with_inclusive_parameter
|
101
|
+
result = self.before(@date, true)
|
102
|
+
assert_expression BeforeTE.new(@date, true), result
|
103
|
+
assert result.instance_variable_get("@inclusive")
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_before_should_define_before_te_without_inclusive_parameter
|
107
|
+
result = self.before(@date)
|
108
|
+
assert_expression BeforeTE.new(@date), result
|
109
|
+
assert !result.instance_variable_get("@inclusive")
|
110
|
+
end
|
111
|
+
|
90
112
|
private
|
91
113
|
def assert_expression(expected, actual)
|
92
114
|
assert_equal expected.to_s, actual.to_s, \
|
@@ -3,19 +3,29 @@
|
|
3
3
|
|
4
4
|
require 'baseexpressiontest'
|
5
5
|
|
6
|
-
# Unit tests for
|
6
|
+
# Unit tests for TemporalDate class
|
7
7
|
# Author:: Matthew Lipper
|
8
8
|
|
9
|
-
class
|
9
|
+
class TemporalDateTest < BaseExpressionTest
|
10
10
|
|
11
11
|
def setup
|
12
12
|
super
|
13
|
-
@spec =
|
13
|
+
@spec = TemporalDate.new(@stub1)
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_initialize
|
17
17
|
assert_same @stub1, @spec.date_expr, "Expected #{@stub1}, instead got #{@spec.date_expr}"
|
18
18
|
end
|
19
|
+
|
20
|
+
def test_specific_date
|
21
|
+
date_spec = TemporalDate.new(Date.new(2006,06,27))
|
22
|
+
|
23
|
+
assert !date_spec.include?(Date.new(2005,06,27))
|
24
|
+
assert !date_spec.include?(Date.new(2006,06,26))
|
25
|
+
assert date_spec.include?(Date.new(2006,06,27))
|
26
|
+
assert !date_spec.include?(Date.new(2006,06,28))
|
27
|
+
assert !date_spec.include?(Date.new(2007,06,27))
|
28
|
+
end
|
19
29
|
|
20
30
|
def test_include_arg_has_include_method
|
21
31
|
assert !@spec.include?(@stub2), "Expression should not include configured stub"
|
@@ -24,7 +34,7 @@ class SpecTest < BaseExpressionTest
|
|
24
34
|
end
|
25
35
|
|
26
36
|
def test_include_arg_without_include_method
|
27
|
-
@spec =
|
37
|
+
@spec = TemporalDate.new(4)
|
28
38
|
assert !@spec.include?(3), "Expression #{@spec.to_s} should not include 3"
|
29
39
|
assert @spec.include?(4), "Expression #{@spec.to_s} should include 4"
|
30
40
|
end
|
@@ -3,13 +3,13 @@
|
|
3
3
|
|
4
4
|
require 'baseexpressiontest'
|
5
5
|
|
6
|
-
# Unit tests for
|
6
|
+
# Unit tests for TemporalRange class
|
7
7
|
# Author:: Matthew Lipper
|
8
8
|
|
9
|
-
class
|
9
|
+
class TemporalRangeTest < BaseExpressionTest
|
10
10
|
|
11
11
|
def test_include
|
12
|
-
rspec =
|
12
|
+
rspec = TemporalRange.new(@stub1)
|
13
13
|
assert !rspec.include?("Any Object"), "Expression should not include any given argument"
|
14
14
|
@stub1.match = true
|
15
15
|
assert rspec.include?("Any Object"), "Expression should include any given argument"
|
@@ -17,7 +17,7 @@ class RSpecTest < BaseExpressionTest
|
|
17
17
|
|
18
18
|
def test_overlap
|
19
19
|
range = DateRange.new(@date_20050101, @date_20050109)
|
20
|
-
rspec =
|
20
|
+
rspec = TemporalRange.new(range)
|
21
21
|
assert !rspec.include?(@date_20050116), "Expression #{rspec.to_s} should not include #{@date_20050116.to_s}"
|
22
22
|
assert rspec.include?(@date_20050102), "Expression #{rspec.to_s} should include #{@date_20050102.to_s}"
|
23
23
|
end
|