runt 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +153 -125
- data/LICENSE.txt +43 -43
- data/README +106 -100
- data/Rakefile +122 -122
- data/TODO +13 -13
- data/doc/tutorial_schedule.rdoc +393 -393
- data/doc/tutorial_sugar.rdoc +143 -0
- data/doc/tutorial_te.rdoc +190 -190
- data/examples/payment_report.rb +59 -0
- data/examples/payment_reporttest.rb +49 -0
- data/examples/reminder.rb +63 -63
- data/lib/runt.rb +237 -219
- data/lib/runt/daterange.rb +74 -74
- data/lib/runt/dprecision.rb +150 -141
- data/lib/runt/expressionbuilder.rb +65 -0
- data/lib/runt/pdate.rb +165 -153
- data/lib/runt/schedule.rb +88 -88
- data/lib/runt/sugar.rb +171 -0
- data/lib/runt/temporalexpression.rb +789 -777
- data/setup.rb +1331 -1331
- data/site/blue-robot3.css +131 -131
- data/site/dcl-small.gif +0 -0
- data/site/index.html +72 -94
- data/site/runt-logo.gif +0 -0
- data/site/runt-logo.psd +0 -0
- data/test/aftertetest.rb +31 -0
- data/test/beforetetest.rb +31 -0
- data/test/daterangetest.rb +89 -89
- data/test/dprecisiontest.rb +58 -55
- data/test/expressionbuildertest.rb +64 -0
- data/test/icalendartest.rb +621 -41
- data/test/pdatetest.rb +147 -117
- data/test/redaytest.rb +10 -0
- data/test/reyeartest.rb +99 -98
- data/test/runttest.rb +98 -101
- data/test/scheduletest.rb +148 -148
- data/test/sugartest.rb +104 -0
- data/test/temporalexpressiontest.rb +76 -76
- metadata +112 -95
data/test/runttest.rb
CHANGED
@@ -1,101 +1,98 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
6
|
-
require 'pp'
|
7
|
-
|
8
|
-
class RuntModuleTest < Test::Unit::TestCase
|
9
|
-
|
10
|
-
def test_last
|
11
|
-
assert Runt::Last == -1
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_last_of
|
15
|
-
assert Runt::Last_of == -1
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_second_to_last
|
19
|
-
assert Runt::Second_to_last == -2
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_ordinals
|
23
|
-
#1.upto(31){ |n| puts Runt.ordinalize(n); }
|
24
|
-
assert_equal '1st', Runt.ordinalize(1)
|
25
|
-
assert_equal '33rd', Runt.ordinalize(33)
|
26
|
-
assert_equal '50th', Runt.ordinalize(50)
|
27
|
-
assert_equal '2nd', Runt.ordinalize(2)
|
28
|
-
assert_equal 'second to last', Runt.ordinalize(-2)
|
29
|
-
assert_equal 'last', Runt.ordinalize(-1)
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_day_name
|
33
|
-
i=0
|
34
|
-
Date::DAYNAMES.each do |n|
|
35
|
-
assert_equal Date::DAYNAMES[i], Runt.day_name(i)
|
36
|
-
i=i+1
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_month_name
|
41
|
-
i=0
|
42
|
-
Date::MONTHNAMES.each do |n|
|
43
|
-
assert_equal Date::MONTHNAMES[i], Runt.month_name(i)
|
44
|
-
i=i+1
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_strftime
|
49
|
-
d=DateTime.new(2006,2,26,14,45)
|
50
|
-
assert_equal '02:45PM', Runt.format_time(d)
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_numeric_class_additions
|
54
|
-
assert_equal 0.000001, 1.microsecond
|
55
|
-
assert_equal 0.000001, 1.microseconds
|
56
|
-
assert_equal 0.001, 1.millisecond
|
57
|
-
assert_equal 0.001, 1.milliseconds
|
58
|
-
assert_equal 7, 7.second
|
59
|
-
assert_equal 7, 7.seconds
|
60
|
-
assert_equal 60, 1.minute
|
61
|
-
assert_equal 60, 1.minutes
|
62
|
-
assert_equal 3600, 1.hour
|
63
|
-
assert_equal 3600, 1.hours
|
64
|
-
assert_equal 86400, 1.day
|
65
|
-
assert_equal 86400, 1.days
|
66
|
-
assert_equal 604800, 1.week
|
67
|
-
assert_equal 604800, 1.weeks
|
68
|
-
assert_equal 2592000, 1.month
|
69
|
-
assert_equal 2592000, 1.months
|
70
|
-
assert_equal 31536000, 1.year
|
71
|
-
assert_equal 31536000, 1.years
|
72
|
-
assert_equal 315360000, 1.decade
|
73
|
-
assert_equal 315360000, 1.decades
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_time_class_dprecision
|
77
|
-
time=Time.parse('Monday 06 November 2006 07:38')
|
78
|
-
assert_equal(Runt::DPrecision::DEFAULT,time.date_precision)
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_date_class_dprecision
|
82
|
-
date=Date.today
|
83
|
-
assert_equal(Runt::DPrecision::DEFAULT,date.date_precision)
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_datetime_class_dprecision
|
87
|
-
date=DateTime.civil
|
88
|
-
assert_equal(Runt::DPrecision::DEFAULT,date.date_precision)
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_time_plus
|
92
|
-
time=Time.
|
93
|
-
# Default precision is minute
|
94
|
-
assert_equal(Runt::PDate.min(2006,12,9,5,56),Runt::DPrecision.to_p(time))
|
95
|
-
assert_not_equal(Time.parse("Sat Dec 09 05:56:00 -0500 2006"),time)
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'runt'
|
5
|
+
require 'date'
|
6
|
+
require 'pp'
|
7
|
+
|
8
|
+
class RuntModuleTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_last
|
11
|
+
assert Runt::Last == -1
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_last_of
|
15
|
+
assert Runt::Last_of == -1
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_second_to_last
|
19
|
+
assert Runt::Second_to_last == -2
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_ordinals
|
23
|
+
#1.upto(31){ |n| puts Runt.ordinalize(n); }
|
24
|
+
assert_equal '1st', Runt.ordinalize(1)
|
25
|
+
assert_equal '33rd', Runt.ordinalize(33)
|
26
|
+
assert_equal '50th', Runt.ordinalize(50)
|
27
|
+
assert_equal '2nd', Runt.ordinalize(2)
|
28
|
+
assert_equal 'second to last', Runt.ordinalize(-2)
|
29
|
+
assert_equal 'last', Runt.ordinalize(-1)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_day_name
|
33
|
+
i=0
|
34
|
+
Date::DAYNAMES.each do |n|
|
35
|
+
assert_equal Date::DAYNAMES[i], Runt.day_name(i)
|
36
|
+
i=i+1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_month_name
|
41
|
+
i=0
|
42
|
+
Date::MONTHNAMES.each do |n|
|
43
|
+
assert_equal Date::MONTHNAMES[i], Runt.month_name(i)
|
44
|
+
i=i+1
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_strftime
|
49
|
+
d=DateTime.new(2006,2,26,14,45)
|
50
|
+
assert_equal '02:45PM', Runt.format_time(d)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_numeric_class_additions
|
54
|
+
assert_equal 0.000001, 1.microsecond
|
55
|
+
assert_equal 0.000001, 1.microseconds
|
56
|
+
assert_equal 0.001, 1.millisecond
|
57
|
+
assert_equal 0.001, 1.milliseconds
|
58
|
+
assert_equal 7, 7.second
|
59
|
+
assert_equal 7, 7.seconds
|
60
|
+
assert_equal 60, 1.minute
|
61
|
+
assert_equal 60, 1.minutes
|
62
|
+
assert_equal 3600, 1.hour
|
63
|
+
assert_equal 3600, 1.hours
|
64
|
+
assert_equal 86400, 1.day
|
65
|
+
assert_equal 86400, 1.days
|
66
|
+
assert_equal 604800, 1.week
|
67
|
+
assert_equal 604800, 1.weeks
|
68
|
+
assert_equal 2592000, 1.month
|
69
|
+
assert_equal 2592000, 1.months
|
70
|
+
assert_equal 31536000, 1.year
|
71
|
+
assert_equal 31536000, 1.years
|
72
|
+
assert_equal 315360000, 1.decade
|
73
|
+
assert_equal 315360000, 1.decades
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_time_class_dprecision
|
77
|
+
time=Time.parse('Monday 06 November 2006 07:38')
|
78
|
+
assert_equal(Runt::DPrecision::DEFAULT,time.date_precision)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_date_class_dprecision
|
82
|
+
date=Date.today
|
83
|
+
assert_equal(Runt::DPrecision::DEFAULT,date.date_precision)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_datetime_class_dprecision
|
87
|
+
date=DateTime.civil
|
88
|
+
assert_equal(Runt::DPrecision::DEFAULT,date.date_precision)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_time_plus
|
92
|
+
time=Time.local(2006, 12, 9, 5, 56, 12)
|
93
|
+
# Default precision is minute
|
94
|
+
assert_equal(Runt::PDate.min(2006,12,9,5,56),Runt::DPrecision.to_p(time))
|
95
|
+
assert_not_equal(Time.parse("Sat Dec 09 05:56:00 -0500 2006"),time)
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
data/test/scheduletest.rb
CHANGED
@@ -1,148 +1,148 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
6
|
-
|
7
|
-
# Unit tests for Schedule classes
|
8
|
-
# Author:: Matthew Lipper
|
9
|
-
class ScheduleTest < Test::Unit::TestCase
|
10
|
-
|
11
|
-
include Runt
|
12
|
-
|
13
|
-
def setup
|
14
|
-
# Jane is very busy these days.
|
15
|
-
@sched=Schedule.new
|
16
|
-
# Elmo's World is on TV: Mon-Fri 8am-8:30am
|
17
|
-
@elmo=Event.new("Elmo's World")
|
18
|
-
@elmo_broadcast=(REWeek.new(Mon,Fri) & REDay.new(8,00,8,30))
|
19
|
-
@sched.add(@elmo,@elmo_broadcast)
|
20
|
-
#Oobi's on TV: Thu-Sat 8:30am-9am
|
21
|
-
@oobi=Event.new("Oobi")
|
22
|
-
@oobi_broadcast=(REWeek.new(Thu,Sat) & REDay.new(8,30,9,00))
|
23
|
-
@sched.add(@oobi,@oobi_broadcast)
|
24
|
-
@during_elmo=PDate.new(2004,5,4,8,06)
|
25
|
-
@not_during_elmo=PDate.new(2004,5,1,8,06)
|
26
|
-
@during_oobi=PDate.new(2004,4,30,8,56)
|
27
|
-
@not_during_oobi=PDate.new(2004,5,1,8,12)
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_include
|
31
|
-
# Check Elmo
|
32
|
-
assert(@sched.include?(@elmo, @during_elmo))
|
33
|
-
assert(!@sched.include?(@elmo,@not_during_elmo))
|
34
|
-
assert(!@sched.include?(@elmo,@during_oobi))
|
35
|
-
# Check Oobi
|
36
|
-
assert(@sched.include?(@oobi, @during_oobi))
|
37
|
-
assert(!@sched.include?(@oobi,@not_during_oobi))
|
38
|
-
assert(!@sched.include?(@oobi,@not_during_elmo))
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_select_all
|
42
|
-
# select all
|
43
|
-
all=@sched.select {|ev,xpr| true; }
|
44
|
-
assert all.size==2
|
45
|
-
assert all.include?(@elmo)
|
46
|
-
assert all.include?(@oobi)
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_select_none
|
50
|
-
# select none
|
51
|
-
assert((@sched.select {|ev,xpr| false; }).size==0)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_select_some
|
55
|
-
# select oobi only
|
56
|
-
some=@sched.select {|ev,xpr| @oobi.eql?(ev); }
|
57
|
-
assert some.size==1
|
58
|
-
assert !some.include?(@elmo)
|
59
|
-
assert some.include?(@oobi)
|
60
|
-
some.clear
|
61
|
-
# select elmo only
|
62
|
-
some=@sched.select {|ev,xpr| @elmo.eql?(ev); }
|
63
|
-
assert some.size==1
|
64
|
-
assert some.include?(@elmo)
|
65
|
-
assert !some.include?(@oobi)
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_events
|
69
|
-
events=@sched.events(PDate.new(2006,12,4,11,15))
|
70
|
-
assert_equal 0,events.size
|
71
|
-
# The Barney power hour which overlaps with Elmo
|
72
|
-
barney=Event.new("Barney")
|
73
|
-
@sched.add(barney,REDay.new(7,30,8,30))
|
74
|
-
events=@sched.events(PDate.new(2006,12,4,8,15))
|
75
|
-
assert_equal 2,events.size
|
76
|
-
assert events.include?(barney)
|
77
|
-
assert events.include?(@elmo)
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_update
|
81
|
-
@sched.update(Event.new("aaa")){|ev|assert_nil(ev)}
|
82
|
-
@sched.update(@elmo){|ev|assert_equal(@elmo_broadcast,ev)}
|
83
|
-
@sched.update(@oobi){|ev|assert_equal(@oobi_broadcast,ev)}
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_select_old
|
87
|
-
@sched=Schedule.new
|
88
|
-
e1=Event.new("e1")
|
89
|
-
assert(!@sched.include?(e1,nil))
|
90
|
-
range=RSpec.new(DateRange.new(PDate.new(2006,12,3),PDate.new(2007,1,24)))
|
91
|
-
in_range=PDate.new(2007,1,4)
|
92
|
-
assert(range.include?(in_range))
|
93
|
-
out_of_range=PDate.new(2006,1,4)
|
94
|
-
assert(!range.include?(out_of_range))
|
95
|
-
@sched.add(e1,range)
|
96
|
-
assert(@sched.include?(e1,in_range))
|
97
|
-
assert(!@sched.include?(e1,out_of_range))
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_dates
|
101
|
-
# range: May 1st, 2004 to May 31st, 2004
|
102
|
-
d_range = DateRange.new(PDate.day(2004,5,1), PDate.day(2004,5,31))
|
103
|
-
@sched = Schedule.new
|
104
|
-
event = Event.new("Visit Ernie")
|
105
|
-
# First and last Friday of the month
|
106
|
-
expr1 = DIMonth.new(1,Fri) | DIMonth.new(-1,Fri)
|
107
|
-
@sched.add(event,expr1)
|
108
|
-
dates = @sched.dates(event,d_range)
|
109
|
-
expected = [PDate.day(2004,5,7), PDate.day(2004,5,28)]
|
110
|
-
assert_equal(expected,dates)
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_using_a_schedule
|
114
|
-
|
115
|
-
# September 18th - 19th, 2005, 8am - 10am
|
116
|
-
expr1=RSpec.new(DateRange.new(PDate.day(2005,9,18),PDate.day(2005,9,19))) & REDay.new(8,0,10,0)
|
117
|
-
assert(expr1.include?(PDate.min(2005,9,18,8,15)))
|
118
|
-
# September 19th - 20th, 2005, 9am - 11am
|
119
|
-
expr2=RSpec.new(DateRange.new(PDate.day(2005,9,19),PDate.day(2005,9,20))) & REDay.new(9,0,11,0)
|
120
|
-
# Quick sanuty check
|
121
|
-
assert(expr1.overlap?(expr2))
|
122
|
-
# Setup a @schedule w/first expression
|
123
|
-
@sched = Schedule.new
|
124
|
-
@sched.add(Event.new("Snafubar Opening"),expr1)
|
125
|
-
resource = Resource.new(@sched)
|
126
|
-
# Add a another overlapping event
|
127
|
-
resource.add_event(Event.new("Yodeling Lesson"),expr2)
|
128
|
-
# Create a new resource using the same schedule
|
129
|
-
resource2 = Resource.new(@sched)
|
130
|
-
# Add a another overlapping event and pass a block which should complain
|
131
|
-
#resource.add_event(Event.new("Yodeling Lesson"),expr2) \
|
132
|
-
#{|e,s| raise "Resource not available at requested time(s)." \
|
133
|
-
# if (@schedule.overlap?(s))}
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
class Resource
|
138
|
-
def initialize(schedule)
|
139
|
-
@schedule=schedule
|
140
|
-
end
|
141
|
-
def add_event(event,expr)
|
142
|
-
if(block_given?)
|
143
|
-
yield(event,expr)
|
144
|
-
else
|
145
|
-
@schedule.add(event,expr)
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'runt'
|
5
|
+
require 'date'
|
6
|
+
|
7
|
+
# Unit tests for Schedule classes
|
8
|
+
# Author:: Matthew Lipper
|
9
|
+
class ScheduleTest < Test::Unit::TestCase
|
10
|
+
|
11
|
+
include Runt
|
12
|
+
|
13
|
+
def setup
|
14
|
+
# Jane is very busy these days.
|
15
|
+
@sched=Schedule.new
|
16
|
+
# Elmo's World is on TV: Mon-Fri 8am-8:30am
|
17
|
+
@elmo=Event.new("Elmo's World")
|
18
|
+
@elmo_broadcast=(REWeek.new(Mon,Fri) & REDay.new(8,00,8,30))
|
19
|
+
@sched.add(@elmo,@elmo_broadcast)
|
20
|
+
#Oobi's on TV: Thu-Sat 8:30am-9am
|
21
|
+
@oobi=Event.new("Oobi")
|
22
|
+
@oobi_broadcast=(REWeek.new(Thu,Sat) & REDay.new(8,30,9,00))
|
23
|
+
@sched.add(@oobi,@oobi_broadcast)
|
24
|
+
@during_elmo=PDate.new(2004,5,4,8,06)
|
25
|
+
@not_during_elmo=PDate.new(2004,5,1,8,06)
|
26
|
+
@during_oobi=PDate.new(2004,4,30,8,56)
|
27
|
+
@not_during_oobi=PDate.new(2004,5,1,8,12)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_include
|
31
|
+
# Check Elmo
|
32
|
+
assert(@sched.include?(@elmo, @during_elmo))
|
33
|
+
assert(!@sched.include?(@elmo,@not_during_elmo))
|
34
|
+
assert(!@sched.include?(@elmo,@during_oobi))
|
35
|
+
# Check Oobi
|
36
|
+
assert(@sched.include?(@oobi, @during_oobi))
|
37
|
+
assert(!@sched.include?(@oobi,@not_during_oobi))
|
38
|
+
assert(!@sched.include?(@oobi,@not_during_elmo))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_select_all
|
42
|
+
# select all
|
43
|
+
all=@sched.select {|ev,xpr| true; }
|
44
|
+
assert all.size==2
|
45
|
+
assert all.include?(@elmo)
|
46
|
+
assert all.include?(@oobi)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_select_none
|
50
|
+
# select none
|
51
|
+
assert((@sched.select {|ev,xpr| false; }).size==0)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_select_some
|
55
|
+
# select oobi only
|
56
|
+
some=@sched.select {|ev,xpr| @oobi.eql?(ev); }
|
57
|
+
assert some.size==1
|
58
|
+
assert !some.include?(@elmo)
|
59
|
+
assert some.include?(@oobi)
|
60
|
+
some.clear
|
61
|
+
# select elmo only
|
62
|
+
some=@sched.select {|ev,xpr| @elmo.eql?(ev); }
|
63
|
+
assert some.size==1
|
64
|
+
assert some.include?(@elmo)
|
65
|
+
assert !some.include?(@oobi)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_events
|
69
|
+
events=@sched.events(PDate.new(2006,12,4,11,15))
|
70
|
+
assert_equal 0,events.size
|
71
|
+
# The Barney power hour which overlaps with Elmo
|
72
|
+
barney=Event.new("Barney")
|
73
|
+
@sched.add(barney,REDay.new(7,30,8,30))
|
74
|
+
events=@sched.events(PDate.new(2006,12,4,8,15))
|
75
|
+
assert_equal 2,events.size
|
76
|
+
assert events.include?(barney)
|
77
|
+
assert events.include?(@elmo)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_update
|
81
|
+
@sched.update(Event.new("aaa")){|ev|assert_nil(ev)}
|
82
|
+
@sched.update(@elmo){|ev|assert_equal(@elmo_broadcast,ev)}
|
83
|
+
@sched.update(@oobi){|ev|assert_equal(@oobi_broadcast,ev)}
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_select_old
|
87
|
+
@sched=Schedule.new
|
88
|
+
e1=Event.new("e1")
|
89
|
+
assert(!@sched.include?(e1,nil))
|
90
|
+
range=RSpec.new(DateRange.new(PDate.new(2006,12,3),PDate.new(2007,1,24)))
|
91
|
+
in_range=PDate.new(2007,1,4)
|
92
|
+
assert(range.include?(in_range))
|
93
|
+
out_of_range=PDate.new(2006,1,4)
|
94
|
+
assert(!range.include?(out_of_range))
|
95
|
+
@sched.add(e1,range)
|
96
|
+
assert(@sched.include?(e1,in_range))
|
97
|
+
assert(!@sched.include?(e1,out_of_range))
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_dates
|
101
|
+
# range: May 1st, 2004 to May 31st, 2004
|
102
|
+
d_range = DateRange.new(PDate.day(2004,5,1), PDate.day(2004,5,31))
|
103
|
+
@sched = Schedule.new
|
104
|
+
event = Event.new("Visit Ernie")
|
105
|
+
# First and last Friday of the month
|
106
|
+
expr1 = DIMonth.new(1,Fri) | DIMonth.new(-1,Fri)
|
107
|
+
@sched.add(event,expr1)
|
108
|
+
dates = @sched.dates(event,d_range)
|
109
|
+
expected = [PDate.day(2004,5,7), PDate.day(2004,5,28)]
|
110
|
+
assert_equal(expected,dates)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_using_a_schedule
|
114
|
+
|
115
|
+
# September 18th - 19th, 2005, 8am - 10am
|
116
|
+
expr1=RSpec.new(DateRange.new(PDate.day(2005,9,18),PDate.day(2005,9,19))) & REDay.new(8,0,10,0)
|
117
|
+
assert(expr1.include?(PDate.min(2005,9,18,8,15)))
|
118
|
+
# September 19th - 20th, 2005, 9am - 11am
|
119
|
+
expr2=RSpec.new(DateRange.new(PDate.day(2005,9,19),PDate.day(2005,9,20))) & REDay.new(9,0,11,0)
|
120
|
+
# Quick sanuty check
|
121
|
+
assert(expr1.overlap?(expr2))
|
122
|
+
# Setup a @schedule w/first expression
|
123
|
+
@sched = Schedule.new
|
124
|
+
@sched.add(Event.new("Snafubar Opening"),expr1)
|
125
|
+
resource = Resource.new(@sched)
|
126
|
+
# Add a another overlapping event
|
127
|
+
resource.add_event(Event.new("Yodeling Lesson"),expr2)
|
128
|
+
# Create a new resource using the same schedule
|
129
|
+
resource2 = Resource.new(@sched)
|
130
|
+
# Add a another overlapping event and pass a block which should complain
|
131
|
+
#resource.add_event(Event.new("Yodeling Lesson"),expr2) \
|
132
|
+
#{|e,s| raise "Resource not available at requested time(s)." \
|
133
|
+
# if (@schedule.overlap?(s))}
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
class Resource
|
138
|
+
def initialize(schedule)
|
139
|
+
@schedule=schedule
|
140
|
+
end
|
141
|
+
def add_event(event,expr)
|
142
|
+
if(block_given?)
|
143
|
+
yield(event,expr)
|
144
|
+
else
|
145
|
+
@schedule.add(event,expr)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|