periodic-scheduler 0.1.0 → 0.2.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/Gemfile CHANGED
@@ -6,8 +6,10 @@ source "http://rubygems.org"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "rspec", ">= 2.3.0"
9
+ gem "rspec", "~> 2.8.0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "cucumber", ">= 0"
10
12
  gem "bundler", "~> 1.0.0"
11
- gem "jeweler", "~> 1.6.2"
13
+ gem "jeweler", "~> 1.8.3"
12
14
  gem "rcov", ">= 0"
13
15
  end
data/Gemfile.lock CHANGED
@@ -1,28 +1,44 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- diff-lcs (1.1.2)
4
+ builder (3.0.0)
5
+ cucumber (1.1.4)
6
+ builder (>= 2.1.2)
7
+ diff-lcs (>= 1.1.2)
8
+ gherkin (~> 2.7.1)
9
+ json (>= 1.4.6)
10
+ term-ansicolor (>= 1.0.6)
11
+ diff-lcs (1.1.3)
12
+ gherkin (2.7.6)
13
+ json (>= 1.4.6)
5
14
  git (1.2.5)
6
- jeweler (1.6.2)
15
+ jeweler (1.8.3)
7
16
  bundler (~> 1.0)
8
17
  git (>= 1.2.5)
9
18
  rake
10
- rake (0.9.2)
19
+ rdoc
20
+ json (1.6.5)
21
+ rake (0.9.2.2)
11
22
  rcov (0.9.9)
12
- rspec (2.6.0)
13
- rspec-core (~> 2.6.0)
14
- rspec-expectations (~> 2.6.0)
15
- rspec-mocks (~> 2.6.0)
16
- rspec-core (2.6.4)
17
- rspec-expectations (2.6.0)
23
+ rdoc (3.12)
24
+ json (~> 1.4)
25
+ rspec (2.8.0)
26
+ rspec-core (~> 2.8.0)
27
+ rspec-expectations (~> 2.8.0)
28
+ rspec-mocks (~> 2.8.0)
29
+ rspec-core (2.8.0)
30
+ rspec-expectations (2.8.0)
18
31
  diff-lcs (~> 1.1.2)
19
- rspec-mocks (2.6.0)
32
+ rspec-mocks (2.8.0)
33
+ term-ansicolor (1.0.7)
20
34
 
21
35
  PLATFORMS
22
36
  ruby
23
37
 
24
38
  DEPENDENCIES
25
39
  bundler (~> 1.0.0)
26
- jeweler (~> 1.6.2)
40
+ cucumber
41
+ jeweler (~> 1.8.3)
27
42
  rcov
28
- rspec (>= 2.3.0)
43
+ rdoc (~> 3.12)
44
+ rspec (~> 2.8.0)
data/Rakefile CHANGED
@@ -38,7 +38,7 @@ end
38
38
 
39
39
  task :default => :spec
40
40
 
41
- require 'rake/rdoctask'
41
+ require 'rdoc/task'
42
42
  Rake::RDocTask.new do |rdoc|
43
43
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
44
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -3,6 +3,7 @@ require 'set'
3
3
 
4
4
  class PeriodicScheduler
5
5
  class MissedScheduleError < RuntimeError; end
6
+ class EmptyScheduleError < RuntimeError; end
6
7
 
7
8
  class Event
8
9
  attr_reader :period
@@ -63,7 +64,10 @@ class PeriodicScheduler
63
64
  end
64
65
 
65
66
 
66
- def initialize(quantum = 5.0, time_source = lambda {Time.now.to_f}, wait_function = lambda{|t| sleep t})
67
+ def initialize(quantum = 5.0, options = {})
68
+ time_source = (options[:time_source] or lambda {Time.now.to_f})
69
+ wait_function = (options[:wait_function] or lambda{|t| sleep t})
70
+
67
71
  @quantized_space = RealTimeToQuantizedSpaceProjection.new(
68
72
  quantum,
69
73
  lambda {|v| v.floor}
@@ -86,12 +90,22 @@ class PeriodicScheduler
86
90
  @event_groups_to_unschedule << group
87
91
  end
88
92
 
89
- def wait_events
93
+ def run!
94
+ begin
95
+ loop do
96
+ run.each do |error|
97
+ yield error if block_given?
98
+ end
99
+ end
100
+ rescue EmptyScheduleError
101
+ end
102
+ end
103
+
104
+ def run
90
105
  process_unsheduled_events
91
106
 
92
107
  earliest_quant = @events.keys.sort[0]
93
- # no more events left
94
- return nil unless earliest_quant
108
+ raise EmptyScheduleError, "no events scheduled" unless earliest_quant
95
109
 
96
110
  errors = []
97
111
 
@@ -111,9 +125,9 @@ class PeriodicScheduler
111
125
 
112
126
  qnow = quantized_now
113
127
  quants = @events.keys.select{|k| k <= qnow}.sort
114
- # It may happen that wait returned qucker that it should
128
+ # It may happen that wait returned qucker than it should
115
129
  if quants.empty?
116
- return wait_events
130
+ return run
117
131
  end
118
132
 
119
133
  quants.each do |q|
@@ -132,6 +146,13 @@ class PeriodicScheduler
132
146
  errors
133
147
  end
134
148
 
149
+ def empty?
150
+ # do the cleanup - this may be causing problems!
151
+ process_unsheduled_events
152
+
153
+ @events.empty?
154
+ end
155
+
135
156
  private
136
157
 
137
158
  def process_unsheduled_events
@@ -0,0 +1,67 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "periodic-scheduler"
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jakub Pastuszek"]
12
+ s.date = "2012-02-03"
13
+ s.description = "Controls execution of periodic scheduled tasks."
14
+ s.email = "jpastuszek@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/periodic-scheduler.rb",
29
+ "lib/quantized_time_space.rb",
30
+ "periodic-scheduler.gemspec",
31
+ "spec/periodic-scheduler_spec.rb",
32
+ "spec/spec_helper.rb"
33
+ ]
34
+ s.homepage = "http://github.com/jpastuszek/periodic-scheduler"
35
+ s.licenses = ["MIT"]
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = "1.8.10"
38
+ s.summary = "Scheduler for periodic tasks."
39
+
40
+ if s.respond_to? :specification_version then
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
45
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
46
+ s.add_development_dependency(%q<cucumber>, [">= 0"])
47
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
48
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
49
+ s.add_development_dependency(%q<rcov>, [">= 0"])
50
+ else
51
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
52
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
53
+ s.add_dependency(%q<cucumber>, [">= 0"])
54
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
55
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
56
+ s.add_dependency(%q<rcov>, [">= 0"])
57
+ end
58
+ else
59
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
60
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
61
+ s.add_dependency(%q<cucumber>, [">= 0"])
62
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
63
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
64
+ s.add_dependency(%q<rcov>, [">= 0"])
65
+ end
66
+ end
67
+
@@ -3,10 +3,12 @@ require 'periodic-scheduler'
3
3
  describe PeriodicScheduler do
4
4
  before :each do
5
5
  @time_now = 0
6
- @time = lambda{@time_now}
7
- @wait = lambda{|t|
8
- @time_now += t
9
- #puts "sleeping for #{t}"
6
+ @options = {
7
+ :time_source => lambda{@time_now},
8
+ :wait_function => lambda{|t|
9
+ @time_now += t
10
+ #puts "sleeping for #{t}"
11
+ }
10
12
  }
11
13
 
12
14
  @got_events = []
@@ -17,7 +19,7 @@ describe PeriodicScheduler do
17
19
  end
18
20
 
19
21
  it "should execut event callbacks given time progress" do
20
- s = PeriodicScheduler.new(5.0, @time, @wait)
22
+ s = PeriodicScheduler.new(5.0, @options)
21
23
 
22
24
  s.schedule(11.5) do
23
25
  @got_event.call(1)
@@ -32,25 +34,21 @@ describe PeriodicScheduler do
32
34
  end
33
35
 
34
36
  @got_events.should == []
37
+ s.empty?.should == false
35
38
 
36
- s.wait_events
39
+ s.run
37
40
  @got_events.should == [1, 2]
38
41
  @time_now.should == 10.0
39
42
 
40
- s.wait_events
43
+ s.run
41
44
  @got_events.should == [1, 2, 3]
42
45
  @time_now.should == 20.0
43
46
 
44
- # They should not get resheduled by default
45
- s.wait_events
46
- @got_events.should == [1, 2, 3]
47
-
48
- s.wait_events
49
- @got_events.should == [1, 2, 3]
47
+ s.empty?.should == true
50
48
  end
51
49
 
52
50
  it "should reschedule resheduable tasks" do
53
- s = PeriodicScheduler.new(5.0, @time, @wait)
51
+ s = PeriodicScheduler.new(5.0, @options)
54
52
 
55
53
  s.schedule(15, true) do
56
54
  @got_event.call(1)
@@ -58,21 +56,21 @@ describe PeriodicScheduler do
58
56
 
59
57
  @got_events.should == []
60
58
 
61
- s.wait_events
59
+ s.run
62
60
  @got_events.should == [1]
63
61
  @time_now.should == 15.0
64
62
 
65
- s.wait_events
63
+ s.run
66
64
  @got_events.should == [1, 1]
67
65
  @time_now.should == 30
68
66
 
69
- s.wait_events
67
+ s.run
70
68
  @got_events.should == [1, 1, 1]
71
69
  @time_now.should == 45
72
70
  end
73
71
 
74
72
  it "should compensate for quntization error" do
75
- s = PeriodicScheduler.new(5.0, @time, @wait)
73
+ s = PeriodicScheduler.new(5.0, @options)
76
74
 
77
75
  # Note that now we are using floor to quantize event
78
76
  s.schedule(12, true) do
@@ -81,41 +79,41 @@ describe PeriodicScheduler do
81
79
 
82
80
  @got_events.should == []
83
81
 
84
- s.wait_events
82
+ s.run
85
83
  @got_events.should == [1]
86
84
  @time_now.should == 10
87
85
 
88
- s.wait_events
86
+ s.run
89
87
  @got_events.should == [1, 1]
90
88
  @time_now.should == 20
91
89
 
92
- s.wait_events
90
+ s.run
93
91
  @got_events.should == [1, 1, 1]
94
92
  @time_now.should == 35
95
93
 
96
- s.wait_events
94
+ s.run
97
95
  @got_events.should == [1, 1, 1, 1]
98
96
  @time_now.should == 45
99
97
 
100
- s.wait_events
98
+ s.run
101
99
  @got_events.should == [1, 1, 1, 1, 1]
102
100
  @time_now.should == 60
103
101
 
104
- s.wait_events
102
+ s.run
105
103
  @got_events.should == [1, 1, 1, 1, 1, 1]
106
104
  @time_now.should == 70
107
105
  end
108
106
 
109
107
  it "should compensate for wait function jitter" do
110
108
  jitter = [1, 0, 5, -1, 0.5, -0.2, 0, 0, 0]
111
- @wait = lambda{|t|
109
+ @options[:wait_function] = lambda{|t|
112
110
  j = jitter.shift
113
111
  #puts "time is: #{@time_now}"
114
112
  @time_now += t + j
115
113
  #puts "sleeping fou #{t} + jitter #{j}: #{t + j}"
116
114
  }
117
115
 
118
- s = PeriodicScheduler.new(5.0, @time, @wait)
116
+ s = PeriodicScheduler.new(5.0, @options)
119
117
 
120
118
  s.schedule(12, true) do
121
119
  @got_event.call(1)
@@ -123,38 +121,38 @@ describe PeriodicScheduler do
123
121
 
124
122
  @got_events.should == []
125
123
 
126
- s.wait_events
124
+ s.run
127
125
  @got_events.should == [1]
128
126
  @time_now.should == 11
129
127
 
130
- s.wait_events
128
+ s.run
131
129
  @got_events.should == [1, 1]
132
130
  @time_now.should == 20
133
131
 
134
- s.wait_events
132
+ s.run
135
133
  @got_events.should == [1, 1, 1]
136
134
  @time_now.should == 40
137
135
 
138
- s.wait_events
136
+ s.run
139
137
  @got_events.should == [1, 1, 1, 1]
140
138
  @time_now.should == 45.5
141
139
 
142
- s.wait_events
140
+ s.run
143
141
  @got_events.should == [1, 1, 1, 1, 1]
144
142
  @time_now.should == 60
145
143
 
146
- s.wait_events
144
+ s.run
147
145
  @got_events.should == [1, 1, 1, 1, 1, 1]
148
146
  @time_now.should == 70.0
149
147
 
150
- s.wait_events
148
+ s.run
151
149
  @got_events.should == [1, 1, 1, 1, 1, 1, 1]
152
150
  @time_now.should == 80.0
153
151
  end
154
152
 
155
153
  it "should keep average scheduling precision over longer time" do
156
154
  srand(100) # make rand deterministic
157
- @wait = lambda{|t|
155
+ @options[:wait_function] = lambda{|t|
158
156
  j = (rand - 0.5) * 10
159
157
  @time_now += t + j
160
158
  }
@@ -167,7 +165,7 @@ describe PeriodicScheduler do
167
165
  ev2 = []
168
166
  ev2_last = 0
169
167
 
170
- s = PeriodicScheduler.new(5.0, @time, @wait)
168
+ s = PeriodicScheduler.new(5.0, @options)
171
169
 
172
170
  s.schedule(ev1_val, true) do
173
171
  ev1 << @time_now - ev1_last
@@ -179,20 +177,20 @@ describe PeriodicScheduler do
179
177
  ev2_last = @time_now
180
178
  end
181
179
 
182
- 10000.times{ s.wait_events }
180
+ 10000.times{ s.run }
183
181
 
184
182
  (ev1.inject(0){|v, s| v + s} / ev1.length).should be_within(0.001).of(ev1_val)
185
183
  (ev2.inject(0){|v, s| v + s} / ev2.length).should be_within(0.001).of(ev2_val)
186
184
  end
187
185
 
188
186
  it "should support grouping of events" do
189
- s = PeriodicScheduler.new(5.0, @time, @wait)
187
+ s = PeriodicScheduler.new(5.0, @options)
190
188
 
191
189
  s.schedule(12, true, "test group") {}
192
190
  end
193
191
 
194
192
  it "should support unscheduling of all events within a group" do
195
- s = PeriodicScheduler.new(5.0, @time, @wait)
193
+ s = PeriodicScheduler.new(5.0, @options)
196
194
 
197
195
  s.schedule(15, true, "g1") do
198
196
  @got_event.call(1)
@@ -208,37 +206,37 @@ describe PeriodicScheduler do
208
206
 
209
207
  @got_events.should == []
210
208
 
211
- s.wait_events
209
+ s.run
212
210
  @got_events.should == [1]
213
211
  @time_now.should == 15
214
212
 
215
- s.wait_events
213
+ s.run
216
214
  @got_events.should == [1, 2]
217
215
  @time_now.should == 20
218
216
 
219
- s.wait_events
217
+ s.run
220
218
  @got_events.should == [1, 2, 3]
221
219
  @time_now.should == 25
222
220
 
223
- s.wait_events
221
+ s.run
224
222
  @got_events.should == [1, 2, 3, 1]
225
223
  @time_now.should == 30
226
224
 
227
225
  s.unschedule_group("g1")
228
226
 
229
- s.wait_events
227
+ s.run
230
228
  @got_events.should == [1, 2, 3, 1, 3]
231
229
  @time_now.should == 50
232
230
 
231
+ s.empty?.should == false
232
+
233
233
  s.unschedule_group("g2")
234
234
 
235
- s.wait_events.should be_nil
236
- @got_events.should == [1, 2, 3, 1, 3]
237
- @time_now.should == 50
235
+ s.empty?.should == true
238
236
  end
239
237
 
240
238
  it "should support unscheduling of all events within a group from other event" do
241
- s = PeriodicScheduler.new(1.0, @time, @wait)
239
+ s = PeriodicScheduler.new(1.0, @options)
242
240
 
243
241
  s.schedule(2, true, "g4") do
244
242
  s.unschedule_group("g2")
@@ -259,23 +257,23 @@ describe PeriodicScheduler do
259
257
 
260
258
  @got_events.should == []
261
259
 
262
- s.wait_events
260
+ s.run
263
261
  @got_events.should == [1, 2, 3]
264
262
  @time_now.should == 1
265
263
 
266
264
  # They will get executed this time
267
- s.wait_events
265
+ s.run
268
266
  @got_events.should == [1, 2, 3, 4, 1, 2, 3]
269
267
  @time_now.should == 2
270
268
 
271
269
  # They should be not rescheduled and gone
272
- s.wait_events
270
+ s.run
273
271
  @got_events.should == [1, 2, 3, 4, 1, 2, 3, 1]
274
272
  @time_now.should == 3
275
273
  end
276
274
 
277
275
  it "should execut all not reschedulable tasks if we miss them" do
278
- s = PeriodicScheduler.new(5.0, @time, @wait)
276
+ s = PeriodicScheduler.new(5.0, @options)
279
277
 
280
278
  s.schedule(15) do
281
279
  @got_event.call(1)
@@ -289,34 +287,34 @@ describe PeriodicScheduler do
289
287
  @got_event.call(3)
290
288
  end
291
289
 
292
- @wait.call(35)
290
+ @options[:wait_function].call(35)
293
291
 
294
- s.wait_events.should
292
+ s.run.should
295
293
  @got_events.should == [1, 2]
296
294
 
297
- s.wait_events.should
295
+ s.run.should
298
296
  @got_events.should == [1, 2, 3]
299
297
  end
300
298
 
301
299
  it "should skpi reschedulable tasks if we miss them" do
302
300
  #TODO: this behaviour is a bit of gary area
303
- s = PeriodicScheduler.new(5.0, @time, @wait)
301
+ s = PeriodicScheduler.new(5.0, @options)
304
302
 
305
303
  s.schedule(15, true) do
306
304
  @got_event.call(1)
307
305
  end
308
306
 
309
- @wait.call(35)
307
+ @options[:wait_function].call(35)
310
308
 
311
- s.wait_events.should
309
+ s.run.should
312
310
  @got_events.should == [1]
313
311
 
314
- s.wait_events.should
312
+ s.run.should
315
313
  @got_events.should == [1, 1]
316
314
  end
317
315
 
318
316
  it "should report error if the schedule was missed" do
319
- s = PeriodicScheduler.new(5.0, @time, @wait)
317
+ s = PeriodicScheduler.new(5.0, @options)
320
318
 
321
319
  s.schedule(15) do
322
320
  @got_event.call(1)
@@ -326,48 +324,97 @@ describe PeriodicScheduler do
326
324
  @got_event.call(2)
327
325
  end
328
326
 
329
- @wait.call(35)
327
+ @options[:wait_function].call(35)
330
328
 
331
- errors = s.wait_events
329
+ errors = s.run
332
330
  errors.should_not be_empty
333
331
  errors[0].class.should == PeriodicScheduler::MissedScheduleError
334
332
  @got_events.should == [1, 2]
335
333
  end
336
334
 
337
- end
335
+ describe "run" do
336
+ it "should handle events call exceptions and return them" do
337
+ s = PeriodicScheduler.new(5.0, @options)
338
338
 
339
- describe PeriodicScheduler, "wait_events" do
340
- before :each do
341
- @time_now = 0
342
- @time = lambda{@time_now}
343
- @wait = lambda{|t| @time_now += t}
344
- end
339
+ s.schedule(12, true) do
340
+ fail "test"
341
+ end
345
342
 
346
- it "should handle events call exceptions and return them" do
347
- s = PeriodicScheduler.new(5.0, @time, @wait)
343
+ errors = nil
348
344
 
349
- s.schedule(12, true) do
350
- fail "test"
345
+ lambda {
346
+ errors = s.run
347
+ }.should_not raise_exception
348
+
349
+ errors.should have(1).error
350
+ errors[0].should be_kind_of RuntimeError
351
+ errors[0].to_s.should == "test"
351
352
  end
352
353
 
353
- errors = nil
354
+ it "should raise PeriodicScheduler::EmptyScheduleError if there are no events left to process" do
355
+ s = PeriodicScheduler.new(5.0, @options)
356
+
357
+ s.schedule(12) {}
354
358
 
355
- lambda {
356
- errors = s.wait_events
357
- }.should_not raise_exception
359
+ lambda {
360
+ s.run
361
+ }.should_not raise_error
358
362
 
359
- errors.should have(1).error
360
- errors[0].should be_kind_of RuntimeError
361
- errors[0].to_s.should == "test"
363
+ lambda {
364
+ s.run
365
+ }.should raise_error PeriodicScheduler::EmptyScheduleError
366
+ end
362
367
  end
363
368
 
364
- it "should return nil if there are no events left to process" do
365
- s = PeriodicScheduler.new(5.0, @time, @wait)
369
+ describe "#run!" do
370
+ it "should run schedule until there is no more events sheduled" do
371
+ s = PeriodicScheduler.new(5.0, @options)
372
+
373
+ s.schedule(5) do
374
+ @got_event.call(1)
375
+ end
376
+
377
+ s.schedule(10) do
378
+ @got_event.call(2)
379
+ end
380
+
381
+ s.schedule(15) do
382
+ @got_event.call(3)
383
+ end
384
+
385
+ s.run!
386
+
387
+ @got_events.should == [1, 2, 3]
388
+ end
366
389
 
367
- s.schedule(12) {}
390
+ it "should call block on event error" do
391
+ s = PeriodicScheduler.new(5.0, @options)
368
392
 
369
- s.wait_events.should_not be_nil
370
- s.wait_events.should be_nil
393
+ s.schedule(5) do
394
+ raise "1"
395
+ end
396
+
397
+ s.schedule(10) do
398
+ @got_event.call(1)
399
+ end
400
+
401
+ s.schedule(15) do
402
+ raise "2"
403
+ end
404
+
405
+ s.schedule(15) do
406
+ @got_event.call(2)
407
+ end
408
+
409
+ @got_fails = []
410
+ s.run! do |error|
411
+ error.should be_kind_of RuntimeError
412
+ @got_fails << error.message
413
+ end
414
+
415
+ @got_fails.map{|m| m.to_i}.should == [1, 2]
416
+ @got_events.should == [1, 2]
417
+ end
371
418
  end
372
419
  end
373
420
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: periodic-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jakub Pastuszek
@@ -15,28 +15,56 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-18 00:00:00 +01:00
19
- default_executable:
18
+ date: 2012-02-03 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- prerelease: false
23
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ type: :development
22
+ requirement: &id001 !ruby/object:Gem::Requirement
24
23
  none: false
25
24
  requirements:
26
- - - ">="
25
+ - - ~>
27
26
  - !ruby/object:Gem::Version
28
- hash: 3
27
+ hash: 47
29
28
  segments:
30
29
  - 2
31
- - 3
30
+ - 8
32
31
  - 0
33
- version: 2.3.0
32
+ version: 2.8.0
33
+ prerelease: false
34
34
  name: rspec
35
- requirement: *id001
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
36
37
  type: :development
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 31
44
+ segments:
45
+ - 3
46
+ - 12
47
+ version: "3.12"
48
+ prerelease: false
49
+ name: rdoc
50
+ version_requirements: *id002
37
51
  - !ruby/object:Gem::Dependency
52
+ type: :development
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
38
62
  prerelease: false
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
63
+ name: cucumber
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ type: :development
67
+ requirement: &id004 !ruby/object:Gem::Requirement
40
68
  none: false
41
69
  requirements:
42
70
  - - ~>
@@ -47,28 +75,28 @@ dependencies:
47
75
  - 0
48
76
  - 0
49
77
  version: 1.0.0
78
+ prerelease: false
50
79
  name: bundler
51
- requirement: *id002
52
- type: :development
80
+ version_requirements: *id004
53
81
  - !ruby/object:Gem::Dependency
54
- prerelease: false
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
82
+ type: :development
83
+ requirement: &id005 !ruby/object:Gem::Requirement
56
84
  none: false
57
85
  requirements:
58
86
  - - ~>
59
87
  - !ruby/object:Gem::Version
60
- hash: 11
88
+ hash: 49
61
89
  segments:
62
90
  - 1
63
- - 6
64
- - 2
65
- version: 1.6.2
91
+ - 8
92
+ - 3
93
+ version: 1.8.3
94
+ prerelease: false
66
95
  name: jeweler
67
- requirement: *id003
68
- type: :development
96
+ version_requirements: *id005
69
97
  - !ruby/object:Gem::Dependency
70
- prerelease: false
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
98
+ type: :development
99
+ requirement: &id006 !ruby/object:Gem::Requirement
72
100
  none: false
73
101
  requirements:
74
102
  - - ">="
@@ -77,9 +105,9 @@ dependencies:
77
105
  segments:
78
106
  - 0
79
107
  version: "0"
108
+ prerelease: false
80
109
  name: rcov
81
- requirement: *id004
82
- type: :development
110
+ version_requirements: *id006
83
111
  description: Controls execution of periodic scheduled tasks.
84
112
  email: jpastuszek@gmail.com
85
113
  executables: []
@@ -100,9 +128,9 @@ files:
100
128
  - VERSION
101
129
  - lib/periodic-scheduler.rb
102
130
  - lib/quantized_time_space.rb
131
+ - periodic-scheduler.gemspec
103
132
  - spec/periodic-scheduler_spec.rb
104
133
  - spec/spec_helper.rb
105
- has_rdoc: true
106
134
  homepage: http://github.com/jpastuszek/periodic-scheduler
107
135
  licenses:
108
136
  - MIT
@@ -132,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
160
  requirements: []
133
161
 
134
162
  rubyforge_project:
135
- rubygems_version: 1.3.7
163
+ rubygems_version: 1.8.10
136
164
  signing_key:
137
165
  specification_version: 3
138
166
  summary: Scheduler for periodic tasks.