navvy 0.3.1 → 0.3.2

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/LICENSE CHANGED
@@ -1,20 +1,3 @@
1
- Copyright (c) 2009 Jeff Kreeftmeijer
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright 2010 Jeff Kreeftmeijer.
2
+ You may use this work without restrictions, as long as this notice is included.
3
+ The work is provided "as is" without warranty of any kind, neither express nor implied.
@@ -1,4 +1,4 @@
1
- h1. Navvy
1
+ h1. Navvy "!http://stillmaintained.com/jeffkreeftmeijer/navvy.png!":http://stillmaintained.com/jeffkreeftmeijer/navvy
2
2
 
3
3
  Navvy is a simple Ruby background job processor inspired by "delayed_job":http://github.com/tobi/delayed_job, but aiming for database agnosticism. Currently Navvy supports ActiveRecord, MongoMapper, Sequel, DataMapper and Mongoid but it's extremely easy to write an adapter for your favorite ORM.
4
4
 
@@ -13,7 +13,3 @@ Check out the "Installation Guide":http://wiki.github.com/jeffkreeftmeijer/navvy
13
13
  h2. Contributing
14
14
 
15
15
  Found an issue? Have a great idea? Want to help? Great! Create an issue "issue":http://github.com/jeffkreeftmeijer/navvy/issues for it, "ask":http://github.com/inbox/new/jeffkreeftmeijer, or even better; fork the project and fix the problem yourself. Pull requests are always welcome. :)
16
-
17
- h2. License
18
-
19
- Copyright (c) 2009 Jeff Kreeftmeijer, released under the MIT license
@@ -1,6 +1,6 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/navvy/worker')
2
- require File.expand_path(File.dirname(__FILE__) + '/navvy/logger')
3
- require File.expand_path(File.dirname(__FILE__) + '/navvy/configuration')
1
+ require 'navvy/worker'
2
+ require 'navvy/logger'
3
+ require 'navvy/configuration'
4
4
 
5
5
  module Navvy
6
6
  class << self
@@ -19,3 +19,16 @@ module Navvy
19
19
  yield(self.configuration)
20
20
  end
21
21
  end
22
+
23
+
24
+ if defined?(Rails)
25
+
26
+ module Navvy
27
+ class Railtie < Rails::Railtie
28
+ rake_tasks do
29
+ require 'navvy/tasks.rb'
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -64,8 +64,8 @@ module Navvy
64
64
  def run
65
65
  begin
66
66
  started
67
- result = constantize(object).send(method_name, *args)
68
- Navvy::Job.keep? ? completed : destroy
67
+ result = constantize(object).send(method_name, *args).inspect
68
+ Navvy::Job.keep? ? completed(result) : destroy
69
69
  result
70
70
  rescue Exception => exception
71
71
  failed(exception.message)
@@ -153,21 +153,21 @@ module Navvy
153
153
  alias_method :completed?, :completed_at?
154
154
  alias_method :failed?, :failed_at?
155
155
 
156
- private
157
-
158
- ##
159
- # Turn a constant with potential namespacing into an object
160
- #
161
- # @return [Class] class
162
-
163
- def constantize(str)
164
- names = str.split('::')
165
- names.shift if names.empty? || names.first.empty?
166
- constant = Object
167
- names.each do |name|
168
- constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
169
- end
170
- constant
171
- end
156
+ private
157
+
158
+ ##
159
+ # Turn a constant with potential namespacing into an object
160
+ #
161
+ # @return [Class] class
162
+
163
+ def constantize(str)
164
+ names = str.split('::')
165
+ names.shift if names.empty? || names.first.empty?
166
+ constant = Object
167
+ names.each do |name|
168
+ constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
169
+ end
170
+ constant
171
+ end
172
172
  end
173
- end
173
+ end
@@ -10,7 +10,7 @@ module Navvy
10
10
  # @param [Symbol, String] method_name the name of the method you want to run
11
11
  # @param [*] arguments optional arguments you want to pass to the method
12
12
  #
13
- # @return [true, false]
13
+ # @return [Job, false] created Job or false if failed
14
14
 
15
15
  def self.enqueue(object, method_name, *args)
16
16
  options = {}
@@ -22,7 +22,7 @@ module Navvy
22
22
  create(
23
23
  :object => object.to_s,
24
24
  :method_name => method_name.to_s,
25
- :arguments => args,
25
+ :arguments => args.to_yaml,
26
26
  :priority => options[:priority] || 0,
27
27
  :parent_id => options[:parent_id],
28
28
  :run_at => options[:run_at] || Time.now,
@@ -133,4 +133,4 @@ module Navvy
133
133
  end
134
134
  end
135
135
 
136
- require File.expand_path(File.dirname(__FILE__) + '/../job')
136
+ require 'navvy/job'
@@ -1,4 +1,5 @@
1
1
  require 'dm-core'
2
+ require 'dm-migrations'
2
3
 
3
4
  module Navvy
4
5
  class Job
@@ -26,7 +27,7 @@ module Navvy
26
27
  # run
27
28
  # @param [*] arguments optional arguments you want to pass to the method
28
29
  #
29
- # @return [true, false]
30
+ # @return [Job, false] created Job or false if failed
30
31
 
31
32
  def self.enqueue(object, method_name, *args)
32
33
  options = {}
@@ -35,8 +36,7 @@ module Navvy
35
36
  args.pop if args.last.empty?
36
37
  end
37
38
 
38
- new_job = self.new
39
- new_job.attributes = {
39
+ new_job = Job.create(
40
40
  :object => object.to_s,
41
41
  :method_name => method_name.to_s,
42
42
  :arguments => args.to_yaml,
@@ -44,9 +44,7 @@ module Navvy
44
44
  :parent_id => options[:parent_id],
45
45
  :run_at => options[:run_at] || Time.now,
46
46
  :created_at => Time.now
47
- }
48
- new_job.save
49
- new_job
47
+ )
50
48
  end
51
49
 
52
50
  ##
@@ -91,7 +89,7 @@ module Navvy
91
89
  # @return [true, false] deleted?
92
90
 
93
91
  def self.delete_all
94
- Navvy::Job.all.destroy
92
+ Navvy::Job.destroy
95
93
  end
96
94
 
97
95
  ##
@@ -101,9 +99,7 @@ module Navvy
101
99
  # update_attributes call
102
100
 
103
101
  def started
104
- update({
105
- :started_at => Time.now
106
- })
102
+ update(:started_at => Time.now)
107
103
  end
108
104
 
109
105
  ##
@@ -149,11 +145,10 @@ module Navvy
149
145
 
150
146
  def times_failed
151
147
  i = parent_id || id
152
- self.class.all(
153
- :conditions => ["(`id` = ? OR `parent_id` = ?) AND `failed_at` IS NOT NULL", i, i]
154
- ).count
148
+ klass = self.class
149
+ (klass.all(:failed_at.not => nil) & (klass.all(:id => i) | klass.all(:parent_id => i))).count
155
150
  end
156
151
  end
157
152
  end
158
153
 
159
- require File.expand_path(File.dirname(__FILE__) + '/../job')
154
+ require 'navvy/job'
@@ -25,7 +25,7 @@ module Navvy
25
25
  # run
26
26
  # @param [*] arguments optional arguments you want to pass to the method
27
27
  #
28
- # @return [true, false]
28
+ # @return [Job, false] created Job or false if failed
29
29
 
30
30
  def self.enqueue(object, method_name, *args)
31
31
  options = {}
@@ -147,4 +147,4 @@ module Navvy
147
147
  end
148
148
  end
149
149
 
150
- require File.expand_path(File.dirname(__FILE__) + '/../job')
150
+ require 'navvy/job'
@@ -11,7 +11,7 @@ module Navvy
11
11
  field :priority, :type => Integer, :default => 0
12
12
  field :return, :type => String
13
13
  field :exception, :type => String
14
- field :parent_id, :type => String
14
+ field :parent_id, :type => BSON::ObjectId
15
15
  field :created_at, :type => Time
16
16
  field :run_at, :type => Time
17
17
  field :started_at, :type => Time
@@ -29,7 +29,7 @@ module Navvy
29
29
  # run
30
30
  # @param [*] arguments optional arguments you want to pass to the method
31
31
  #
32
- # @return [true, false]
32
+ # @return [Job, false] created Job or false if failed
33
33
 
34
34
  def self.enqueue(object, method_name, *args)
35
35
  options = {}
@@ -136,4 +136,4 @@ module Navvy
136
136
  end
137
137
  end
138
138
 
139
- require File.expand_path(File.dirname(__FILE__) + '/../job')
139
+ require 'navvy/job'
@@ -12,7 +12,7 @@ module Navvy
12
12
  # run
13
13
  # @param [*] arguments optional arguments you want to pass to the method
14
14
  #
15
- # @return [true, false]
15
+ # @return [Job, false] created Job or false if failed
16
16
 
17
17
  def self.enqueue(object, method_name, *args)
18
18
  options = {}
@@ -21,7 +21,7 @@ module Navvy
21
21
  args.pop if args.last.empty?
22
22
  end
23
23
 
24
- insert(
24
+ Job[insert(
25
25
  :object => object.to_s,
26
26
  :method_name => method_name.to_s,
27
27
  :arguments => args.to_yaml,
@@ -29,8 +29,7 @@ module Navvy
29
29
  :parent_id => options[:parent_id],
30
30
  :run_at => options[:run_at] || Time.now,
31
31
  :created_at => Time.now
32
- )
33
- order(:id.desc).first
32
+ )]
34
33
  end
35
34
 
36
35
  ##
@@ -45,11 +44,11 @@ module Navvy
45
44
  # jobs were found.
46
45
 
47
46
  def self.next(limit = self.limit)
48
- filter(
49
- (:run_at <= Time.now),
50
- {:failed_at => nil,
51
- :completed_at => nil}
52
- ).order(:priority.desc, :created_at).first(limit)
47
+ filter(:failed_at => nil).
48
+ filter(:completed_at => nil).
49
+ filter{run_at <= Time.now}.
50
+ order(:priority.desc, :created_at).
51
+ first(limit)
53
52
  end
54
53
 
55
54
  ##
@@ -61,7 +60,8 @@ module Navvy
61
60
 
62
61
  def self.cleanup
63
62
  if keep.is_a? Fixnum
64
- filter(:completed_at <= (Time.now - keep)).delete
63
+ time = Time.now - keep
64
+ filter{completed_at <= time}.delete
65
65
  else
66
66
  filter(~{:completed_at => nil}).delete unless keep?
67
67
  end
@@ -76,7 +76,6 @@ module Navvy
76
76
  Navvy::Job.destroy
77
77
  end
78
78
 
79
-
80
79
  ##
81
80
  # Mark the job as started. Will set started_at to the current time.
82
81
  #
@@ -84,9 +83,7 @@ module Navvy
84
83
  # update_attributes call
85
84
 
86
85
  def started
87
- update({
88
- :started_at => Time.now
89
- })
86
+ update(:started_at => Time.now)
90
87
  end
91
88
 
92
89
  ##
@@ -99,10 +96,10 @@ module Navvy
99
96
  # update_attributes call
100
97
 
101
98
  def completed(return_value = nil)
102
- update({
99
+ update(
103
100
  :completed_at => Time.now,
104
101
  :return => return_value
105
- })
102
+ )
106
103
  end
107
104
 
108
105
  ##
@@ -131,11 +128,11 @@ module Navvy
131
128
 
132
129
  def times_failed
133
130
  i = parent_id || id
134
- self.class.filter(
135
- ({:id => i} | {:parent_id => i}), ~{:failed_at => nil}
136
- ).count
131
+ self.class.filter({:id => i} | {:parent_id => i}).
132
+ filter(~{:failed_at => nil}).
133
+ count
137
134
  end
138
135
  end
139
136
  end
140
137
 
141
- require File.expand_path(File.dirname(__FILE__) + '/../job')
138
+ require 'navvy/job'
@@ -10,4 +10,7 @@ namespace :navvy do
10
10
  task :work => :environment do
11
11
  Navvy::Worker.start
12
12
  end
13
- end
13
+ end
14
+
15
+ # heroku background jobs use jobs:work
16
+ task 'jobs:work' => 'navvy:work'
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe Navvy::Configuration do
4
4
  after do
@@ -1,6 +1,14 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Navvy::Job' do
4
+ before do
5
+ Timecop.freeze(Time.local(2010, 1, 1))
6
+ end
7
+
8
+ after do
9
+ Timecop.return
10
+ end
11
+
4
12
  describe '.keep?' do
5
13
  after(:each) do
6
14
  Navvy::Job.keep = false
@@ -70,17 +78,14 @@ describe 'Navvy::Job' do
70
78
  it 'should set the created_at date' do
71
79
  Navvy::Job.enqueue(Cow, :speak, true, false)
72
80
  job = first_job
73
- job.created_at.should be_instance_of Time
74
- job.created_at.should <= Time.now
75
- job.created_at.should > Time.now - 10
81
+ job.created_at.should == Time.now
76
82
  end
77
83
 
78
84
  it 'should set the run_at date' do
79
85
  Navvy::Job.enqueue(Cow, :speak, true, false)
80
86
  job = first_job
81
- job.run_at.should be_instance_of Time
82
- job.run_at.should <= Time.now
83
- job.created_at.should > Time.now - 10
87
+ job.run_at.should == Time.now
88
+ job.created_at.should == Time.now
84
89
  end
85
90
 
86
91
  it 'should return the enqueued job' do
@@ -201,27 +206,34 @@ describe 'Navvy::Job' do
201
206
 
202
207
  it 'should run the job and delete it' do
203
208
  jobs = Navvy::Job.next
204
- jobs.first.run.should == 'moo'
209
+ jobs.first.run.should == '"moo"'
205
210
  job_count.should == 0
206
211
  end
207
212
 
208
213
  describe 'when Navvy::Job.keep is set' do
214
+ it 'should call #completed with the return value after processing the job' do
215
+ Navvy::Job.keep = true
216
+ jobs = Navvy::Job.next
217
+ jobs.first.should_receive(:completed).with('"moo"')
218
+ jobs.first.run
219
+ end
220
+
209
221
  it 'should mark the job as complete when keep is true' do
210
222
  Navvy::Job.keep = true
211
223
  jobs = Navvy::Job.next
212
224
  jobs.first.run
213
225
  job_count.should == 1
214
- jobs.first.started_at.should be_instance_of Time
215
- jobs.first.completed_at.should be_instance_of Time
226
+ jobs.first.started_at.should == Time.now
227
+ jobs.first.completed_at.should == Time.now
216
228
  end
217
229
 
218
- it 'should mark the job as complete when keep has not passed yer' do
230
+ it 'should mark the job as complete when keep has not passed yet' do
219
231
  Navvy::Job.keep = (60 * 60)
220
232
  jobs = Navvy::Job.next
221
233
  jobs.first.run
222
234
  job_count.should == 1
223
- jobs.first.started_at.should be_instance_of Time
224
- jobs.first.completed_at.should be_instance_of Time
235
+ jobs.first.started_at.should == Time.now
236
+ jobs.first.completed_at.should == Time.now
225
237
  end
226
238
 
227
239
  it 'should delete the job when the "keep" flag has passed' do
@@ -243,8 +255,8 @@ describe 'Navvy::Job' do
243
255
  jobs = Navvy::Job.next
244
256
  jobs.first.run
245
257
  jobs.first.exception.should == 'this method is broken'
246
- jobs.first.started_at.should be_instance_of Time
247
- jobs.first.failed_at.should be_instance_of Time
258
+ jobs.first.started_at.should == Time.now
259
+ jobs.first.failed_at.should == Time.now
248
260
  end
249
261
  end
250
262
  end
@@ -358,25 +370,22 @@ describe 'Navvy::Job' do
358
370
  it 'should set the run_at date to about 16 seconds from now' do
359
371
  failed_job = Navvy::Job.enqueue(Cow, :speak, 'name' => 'Betsy')
360
372
  failed_job.stub!(:times_failed).and_return 2
361
- now = Time.now
362
373
  job = failed_job.retry
363
- job.run_at.to_i.should == (now + 16).to_i
374
+ job.run_at.to_i.should == (Time.now + 16).to_i
364
375
  end
365
376
 
366
377
  it 'should set the run_at date to about 256 seconds from now' do
367
378
  failed_job = Navvy::Job.enqueue(Cow, :speak, 'name' => 'Betsy')
368
379
  failed_job.stub!(:times_failed).and_return 4
369
- now = Time.now
370
380
  job = failed_job.retry
371
- job.run_at.to_i.should == (now + 256).to_i
381
+ job.run_at.to_i.should == (Time.now + 256).to_i
372
382
  end
373
383
 
374
384
  it 'should set the run_at date to about 4096 seconds from now' do
375
385
  failed_job = Navvy::Job.enqueue(Cow, :speak, 'name' => 'Betsy')
376
386
  failed_job.stub!(:times_failed).and_return 8
377
- now = Time.now
378
387
  job = failed_job.retry
379
- job.run_at.to_i.should == (now + 4096).to_i
388
+ job.run_at.to_i.should == (Time.now + 4096).to_i
380
389
  end
381
390
 
382
391
  it 'should set the parent_id to the master job id' do
@@ -458,7 +467,7 @@ describe 'Navvy::Job' do
458
467
  :completed_at => Time.now
459
468
  )
460
469
 
461
- job.duration.should >= 2
470
+ job.duration.should == 2
462
471
  end
463
472
 
464
473
  it 'should return a duration if started_at and failed_at are set' do
@@ -467,7 +476,7 @@ describe 'Navvy::Job' do
467
476
  :failed_at => Time.now
468
477
  )
469
478
 
470
- job.duration.should >= 3
479
+ job.duration.should == 3
471
480
  end
472
481
 
473
482
  it 'should return 0 if only started_at is set' do
@@ -488,9 +497,9 @@ describe 'Navvy::Job' do
488
497
  end
489
498
 
490
499
  describe '#namespaced' do
491
- it 'should accept a namespaced class name' do
500
+ it 'should accept a namespaced class name' do
492
501
  job = Navvy::Job.enqueue(Animals::Cow, :speak)
493
- job.run.should == 'moo'
502
+ job.run.should == '"moo"'
494
503
  end
495
504
  end
496
505
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe Navvy::Logger do
4
4
  describe '#colorized_info' do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/navvy/job/active_record')
1
+ require 'navvy/job/active_record'
2
2
 
3
3
  ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => '/tmp/navvy_test.sqlite')
4
4
 
@@ -1,3 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/navvy/job/data_mapper')
1
+ require 'navvy/job/data_mapper'
2
2
  DataMapper.setup(:default, "sqlite3:///tmp/navvy_test.sqlite")
3
+ DataMapper.finalize
3
4
  Navvy::Job.auto_migrate!
@@ -1,2 +1,2 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/navvy/job/mongo_mapper')
1
+ require 'navvy/job/mongo_mapper'
2
2
  MongoMapper.database = 'navvy_test'
@@ -6,4 +6,4 @@ Mongoid.configure do |config|
6
6
  config.master = Mongo::Connection.new.db(name)
7
7
  end
8
8
 
9
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/navvy/job/mongoid')
9
+ require 'navvy/job/mongoid'
@@ -18,4 +18,4 @@ Sequel::DATABASES[0].create_table!(:jobs) do
18
18
  DateTime :failed_at
19
19
  end
20
20
 
21
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/navvy/job/sequel')
21
+ require 'navvy/job/sequel'
@@ -1,11 +1,8 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'navvy'
4
- require 'spec'
5
- require 'spec/autorun'
6
-
7
- Spec::Runner.configure do |config|
8
- end
4
+ require 'rspec'
5
+ require 'timecop'
9
6
 
10
7
  def job_count
11
8
  if defined? Navvy::Job.count
@@ -30,13 +27,13 @@ class Cow
30
27
  end
31
28
 
32
29
  module Animals
33
- class Cow
34
- def self.speak
35
- 'moo'
36
- end
30
+ class Cow
31
+ def self.speak
32
+ 'moo'
33
+ end
37
34
 
38
- def self.broken
39
- raise 'this method is broken'
40
- end
41
- end
35
+ def self.broken
36
+ raise 'this method is broken'
37
+ end
38
+ end
42
39
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe Navvy::Worker do
4
4
  describe '.fetch_and_run_jobs' do
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: navvy
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 23
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 3
8
- - 1
9
- version: 0.3.1
9
+ - 2
10
+ version: 0.3.2
10
11
  platform: ruby
11
12
  authors:
12
13
  - Jeff Kreeftmeijer
@@ -14,37 +15,113 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-07-09 00:00:00 +02:00
18
+ date: 2011-01-02 00:00:00 +01:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- name: rspec
22
+ name: rake
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 3
27
30
  segments:
28
- - 1
29
- - 2
30
- - 9
31
- version: 1.2.9
31
+ - 0
32
+ version: "0"
32
33
  type: :development
33
34
  version_requirements: *id001
34
35
  - !ruby/object:Gem::Dependency
35
- name: yard
36
+ name: sqlite3-ruby
36
37
  prerelease: false
37
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: bson_ext
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
38
54
  requirements:
39
55
  - - ">="
40
56
  - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: rspec
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ~>
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 2
74
+ - 0
75
+ version: "2.0"
76
+ type: :development
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: yard
80
+ prerelease: false
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 15
41
87
  segments:
42
88
  - 0
43
89
  - 5
44
90
  - 2
45
91
  version: 0.5.2
46
92
  type: :development
47
- version_requirements: *id002
93
+ version_requirements: *id005
94
+ - !ruby/object:Gem::Dependency
95
+ name: timecop
96
+ prerelease: false
97
+ requirement: &id006 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 25
103
+ segments:
104
+ - 0
105
+ - 3
106
+ - 5
107
+ version: 0.3.5
108
+ type: :development
109
+ version_requirements: *id006
110
+ - !ruby/object:Gem::Dependency
111
+ name: fuubar
112
+ prerelease: false
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ hash: 11
119
+ segments:
120
+ - 0
121
+ - 0
122
+ version: "0.0"
123
+ type: :development
124
+ version_requirements: *id007
48
125
  description: Simple background job processor inspired by delayed_job, but aiming for database agnosticism.
49
126
  email: jeff@kreeftmeijer.nl
50
127
  executables: []
@@ -91,23 +168,27 @@ rdoc_options: []
91
168
  require_paths:
92
169
  - lib
93
170
  required_ruby_version: !ruby/object:Gem::Requirement
171
+ none: false
94
172
  requirements:
95
173
  - - ">="
96
174
  - !ruby/object:Gem::Version
175
+ hash: 3
97
176
  segments:
98
177
  - 0
99
178
  version: "0"
100
179
  required_rubygems_version: !ruby/object:Gem::Requirement
180
+ none: false
101
181
  requirements:
102
182
  - - ">="
103
183
  - !ruby/object:Gem::Version
184
+ hash: 3
104
185
  segments:
105
186
  - 0
106
187
  version: "0"
107
188
  requirements: []
108
189
 
109
190
  rubyforge_project:
110
- rubygems_version: 1.3.6
191
+ rubygems_version: 1.3.7
111
192
  signing_key:
112
193
  specification_version: 3
113
194
  summary: Simple background job processor inspired by delayed_job, but aiming for database agnosticism.