emipair-delayed_job 2.0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/.gitignore +2 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.textile +213 -0
  4. data/Rakefile +33 -0
  5. data/VERSION +1 -0
  6. data/benchmarks.rb +33 -0
  7. data/contrib/delayed_job.monitrc +14 -0
  8. data/contrib/delayed_job_multiple.monitrc +23 -0
  9. data/emipair-delayed_job.gemspec +25 -0
  10. data/generators/delayed_job/delayed_job_generator.rb +22 -0
  11. data/generators/delayed_job/templates/migration.rb +21 -0
  12. data/generators/delayed_job/templates/script +5 -0
  13. data/init.rb +1 -0
  14. data/lib/delayed/backend/active_record.rb +90 -0
  15. data/lib/delayed/backend/base.rb +111 -0
  16. data/lib/delayed/backend/data_mapper.rb +147 -0
  17. data/lib/delayed/backend/mongo_mapper.rb +110 -0
  18. data/lib/delayed/command.rb +109 -0
  19. data/lib/delayed/message_sending.rb +22 -0
  20. data/lib/delayed/performable_method.rb +62 -0
  21. data/lib/delayed/railtie.rb +10 -0
  22. data/lib/delayed/recipes.rb +31 -0
  23. data/lib/delayed/tasks.rb +15 -0
  24. data/lib/delayed/worker.rb +214 -0
  25. data/lib/delayed_job.rb +15 -0
  26. data/lib/passive_support.rb +4 -0
  27. data/lib/passive_support/basic_object.rb +16 -0
  28. data/lib/passive_support/core_ext.rb +8 -0
  29. data/lib/passive_support/core_ext/class.rb +1 -0
  30. data/lib/passive_support/core_ext/class/attribute_accessors.rb +57 -0
  31. data/lib/passive_support/core_ext/date.rb +10 -0
  32. data/lib/passive_support/core_ext/date/behavior.rb +42 -0
  33. data/lib/passive_support/core_ext/date/calculations.rb +241 -0
  34. data/lib/passive_support/core_ext/date/conversions.rb +107 -0
  35. data/lib/passive_support/core_ext/date_time.rb +12 -0
  36. data/lib/passive_support/core_ext/date_time/calculations.rb +126 -0
  37. data/lib/passive_support/core_ext/date_time/conversions.rb +107 -0
  38. data/lib/passive_support/core_ext/enumerable.rb +120 -0
  39. data/lib/passive_support/core_ext/kernel.rb +5 -0
  40. data/lib/passive_support/core_ext/kernel/agnostics.rb +11 -0
  41. data/lib/passive_support/core_ext/kernel/daemonizing.rb +7 -0
  42. data/lib/passive_support/core_ext/kernel/debugger.rb +16 -0
  43. data/lib/passive_support/core_ext/kernel/reporting.rb +59 -0
  44. data/lib/passive_support/core_ext/kernel/requires.rb +24 -0
  45. data/lib/passive_support/core_ext/module.rb +20 -0
  46. data/lib/passive_support/core_ext/module/aliasing.rb +74 -0
  47. data/lib/passive_support/core_ext/module/attr_accessor_with_default.rb +31 -0
  48. data/lib/passive_support/core_ext/module/attr_internal.rb +32 -0
  49. data/lib/passive_support/core_ext/module/delegation.rb +135 -0
  50. data/lib/passive_support/core_ext/module/inclusion.rb +30 -0
  51. data/lib/passive_support/core_ext/module/introspection.rb +90 -0
  52. data/lib/passive_support/core_ext/module/loading.rb +23 -0
  53. data/lib/passive_support/core_ext/module/model_naming.rb +25 -0
  54. data/lib/passive_support/core_ext/module/synchronization.rb +39 -0
  55. data/lib/passive_support/core_ext/numeric.rb +9 -0
  56. data/lib/passive_support/core_ext/numeric/bytes.rb +50 -0
  57. data/lib/passive_support/core_ext/numeric/conversions.rb +19 -0
  58. data/lib/passive_support/core_ext/numeric/time.rb +81 -0
  59. data/lib/passive_support/core_ext/object.rb +6 -0
  60. data/lib/passive_support/core_ext/object/blank.rb +76 -0
  61. data/lib/passive_support/core_ext/object/conversions.rb +15 -0
  62. data/lib/passive_support/core_ext/object/extending.rb +80 -0
  63. data/lib/passive_support/core_ext/object/instance_variables.rb +74 -0
  64. data/lib/passive_support/core_ext/object/misc.rb +90 -0
  65. data/lib/passive_support/core_ext/object/singleton_class.rb +13 -0
  66. data/lib/passive_support/core_ext/string.rb +1 -0
  67. data/lib/passive_support/core_ext/string/constantize.rb +7 -0
  68. data/lib/passive_support/core_ext/time.rb +46 -0
  69. data/lib/passive_support/core_ext/time/behavior.rb +13 -0
  70. data/lib/passive_support/core_ext/time/calculations.rb +313 -0
  71. data/lib/passive_support/core_ext/time/conversions.rb +90 -0
  72. data/lib/passive_support/core_ext/time/zones.rb +86 -0
  73. data/lib/passive_support/duration.rb +100 -0
  74. data/lib/passive_support/ordered_hash.rb +158 -0
  75. data/rails/init.rb +5 -0
  76. data/recipes/delayed_job.rb +1 -0
  77. data/spec/backend/active_record_job_spec.rb +46 -0
  78. data/spec/backend/data_mapper_job_spec.rb +16 -0
  79. data/spec/backend/mongo_mapper_job_spec.rb +94 -0
  80. data/spec/backend/shared_backend_spec.rb +268 -0
  81. data/spec/delayed_method_spec.rb +58 -0
  82. data/spec/performable_method_spec.rb +42 -0
  83. data/spec/sample_jobs.rb +25 -0
  84. data/spec/setup/active_record.rb +33 -0
  85. data/spec/setup/data_mapper.rb +24 -0
  86. data/spec/setup/mongo_mapper.rb +17 -0
  87. data/spec/spec_helper.rb +19 -0
  88. data/spec/story_spec.rb +17 -0
  89. data/spec/worker_spec.rb +225 -0
  90. data/tasks/jobs.rake +1 -0
  91. metadata +323 -0
@@ -0,0 +1,17 @@
1
+ require 'mongo_mapper'
2
+
3
+ MongoMapper.config = {
4
+ RAILS_ENV => {'database' => 'delayed_job'}
5
+ }
6
+ MongoMapper.connect RAILS_ENV
7
+
8
+ unless defined?(Story)
9
+ class Story
10
+ include ::MongoMapper::Document
11
+ def tell; text; end
12
+ def whatever(n, _); tell*n; end
13
+ def self.count; end
14
+
15
+ handle_asynchronously :whatever
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+ require 'logger'
6
+
7
+ require 'delayed_job'
8
+ require 'sample_jobs'
9
+
10
+ Delayed::Worker.logger = Logger.new('/tmp/dj.log')
11
+ RAILS_ENV = 'test'
12
+
13
+ # determine the available backends
14
+
15
+ require 'setup/data_mapper'
16
+ require 'backend/data_mapper_job_spec'
17
+
18
+ BACKENDS = [:data_mapper]
19
+ Delayed::Worker.backend = :data_mapper
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe "A story" do
4
+
5
+ before(:all) do
6
+ @story = Story.create :text => "Once upon a time..."
7
+ end
8
+
9
+ it "should be shared" do
10
+ @story.tell.should == 'Once upon a time...'
11
+ end
12
+
13
+ it "should not return its result if it storytelling is delayed" do
14
+ @story.send_later(:tell).should_not == 'Once upon a time...'
15
+ end
16
+
17
+ end
@@ -0,0 +1,225 @@
1
+ require 'spec_helper'
2
+
3
+ describe Delayed::Worker do
4
+ def job_create(opts = {})
5
+ Delayed::Job.create(opts.merge(:payload_object => SimpleJob.new))
6
+ end
7
+
8
+ describe "backend=" do
9
+ it "should set the Delayed::Job constant to the backend" do
10
+ @clazz = Class.new
11
+ Delayed::Worker.backend = @clazz
12
+ Delayed::Job.should == @clazz
13
+ end
14
+
15
+ it "should set backend with a symbol" do
16
+ Delayed::Worker.backend = Class.new
17
+ Delayed::Worker.backend = :data_mapper
18
+ Delayed::Worker.backend.should == Delayed::Backend::DataMapper::Job
19
+ end
20
+ end
21
+
22
+ BACKENDS.each do |backend|
23
+ describe "with the #{backend} backend" do
24
+ before do
25
+ Delayed::Worker.backend = backend
26
+ Delayed::Job.delete_all
27
+
28
+ @worker = Delayed::Worker.new(:max_priority => nil, :min_priority => nil, :quiet => true)
29
+
30
+ SimpleJob.runs = 0
31
+ end
32
+
33
+ describe "running a job" do
34
+ it "should fail after Worker.max_run_time" do
35
+ begin
36
+ old_max_run_time = Delayed::Worker.max_run_time
37
+ Delayed::Worker.max_run_time = 1.second
38
+ @job = Delayed::Job.create :payload_object => LongRunningJob.new
39
+ @worker.run(@job)
40
+ @job.reload.last_error.should =~ /expired/
41
+ @job.attempts.should == 1
42
+ ensure
43
+ Delayed::Worker.max_run_time = old_max_run_time
44
+ end
45
+ end
46
+ end
47
+
48
+ describe "finding a job to run" do
49
+ it "should not raise an exception if the backend raises one" do
50
+ mock_result = mock([])
51
+ mock_result.should_receive(:detect).and_raise(StandardError.new("backend connection problem"))
52
+ Delayed::Job.should_receive(:find_available).and_return(mock_result)
53
+ @worker.work_off.should == [0, 0]
54
+ end
55
+ end
56
+
57
+ context "worker prioritization" do
58
+ before(:each) do
59
+ @worker = Delayed::Worker.new(:max_priority => 5, :min_priority => -5, :quiet => true)
60
+ end
61
+
62
+ it "should only work_off jobs that are >= min_priority" do
63
+ SimpleJob.runs.should == 0
64
+
65
+ job_create(:priority => -10)
66
+ job_create(:priority => 0)
67
+ @worker.work_off
68
+
69
+ SimpleJob.runs.should == 1
70
+ end
71
+
72
+ it "should only work_off jobs that are <= max_priority" do
73
+ SimpleJob.runs.should == 0
74
+
75
+ job_create(:priority => 10)
76
+ job_create(:priority => 0)
77
+
78
+ @worker.work_off
79
+
80
+ SimpleJob.runs.should == 1
81
+ end
82
+ end
83
+
84
+ context "while running with locked and expired jobs" do
85
+ before(:each) do
86
+ @worker.name = 'worker1'
87
+ end
88
+
89
+ it "should not run jobs locked by another worker" do
90
+ job_create(:locked_by => 'other_worker', :locked_at => (Delayed::Job.db_time_now - 1.minutes))
91
+ lambda { @worker.work_off }.should_not change { SimpleJob.runs }
92
+ end
93
+
94
+ it "should run open jobs" do
95
+ job_create
96
+ lambda { @worker.work_off }.should change { SimpleJob.runs }.from(0).to(1)
97
+ end
98
+
99
+ it "should run expired jobs" do
100
+ expired_time = Delayed::Job.db_time_now - (1.minutes + Delayed::Worker.max_run_time)
101
+ job_create(:locked_by => 'other_worker', :locked_at => expired_time)
102
+ lambda { @worker.work_off }.should change { SimpleJob.runs }.from(0).to(1)
103
+ end
104
+
105
+ it "should run own jobs" do
106
+ job_create(:locked_by => @worker.name, :locked_at => (Delayed::Job.db_time_now - 1.minutes))
107
+ lambda { @worker.work_off }.should change { SimpleJob.runs }.from(0).to(1)
108
+ end
109
+ end
110
+
111
+ describe "failed jobs" do
112
+ before do
113
+ # reset defaults
114
+ Delayed::Worker.destroy_failed_jobs = true
115
+ Delayed::Worker.max_attempts = 25
116
+
117
+ @job = Delayed::Job.enqueue ErrorJob.new
118
+ end
119
+
120
+ it "should record last_error when destroy_failed_jobs = false, max_attempts = 1" do
121
+ Delayed::Worker.destroy_failed_jobs = false
122
+ Delayed::Worker.max_attempts = 1
123
+ @worker.run(@job)
124
+ @job.reload
125
+ @job.last_error.should =~ /did not work/
126
+ @job.last_error.should =~ /worker_spec.rb/
127
+ @job.attempts.should == 1
128
+ @job.failed_at.should_not be_nil
129
+ end
130
+
131
+ it "should re-schedule jobs after failing" do
132
+ @worker.run(@job)
133
+ @job.reload
134
+ @job.last_error.should =~ /did not work/
135
+ @job.last_error.should =~ /sample_jobs.rb:8:in `perform'/
136
+ @job.attempts.should == 1
137
+ @job.run_at.should > Delayed::Job.db_time_now - 10.minutes
138
+ @job.run_at.should < Delayed::Job.db_time_now + 10.minutes
139
+ end
140
+ end
141
+
142
+ context "reschedule" do
143
+ before do
144
+ @job = Delayed::Job.create :payload_object => SimpleJob.new
145
+ end
146
+
147
+ share_examples_for "any failure more than Worker.max_attempts times" do
148
+ context "when the job's payload has an #on_permanent_failure hook" do
149
+ before do
150
+ @job = Delayed::Job.create :payload_object => OnPermanentFailureJob.new
151
+ @job.payload_object.should respond_to :on_permanent_failure
152
+ end
153
+
154
+ it "should run that hook" do
155
+ @job.payload_object.should_receive :on_permanent_failure
156
+ Delayed::Worker.max_attempts.times { @worker.reschedule(@job) }
157
+ end
158
+ end
159
+
160
+ context "when the job's payload has no #on_permanent_failure hook" do
161
+ # It's a little tricky to test this in a straightforward way,
162
+ # because putting a should_not_receive expectation on
163
+ # @job.payload_object.on_permanent_failure makes that object
164
+ # incorrectly return true to
165
+ # payload_object.respond_to? :on_permanent_failure, which is what
166
+ # reschedule uses to decide whether to call on_permanent_failure.
167
+ # So instead, we just make sure that the payload_object as it
168
+ # already stands doesn't respond_to? on_permanent_failure, then
169
+ # shove it through the iterated reschedule loop and make sure we
170
+ # don't get a NoMethodError (caused by calling that nonexistent
171
+ # on_permanent_failure method).
172
+
173
+ before do
174
+ @job.payload_object.should_not respond_to(:on_permanent_failure)
175
+ end
176
+
177
+ it "should not try to run that hook" do
178
+ lambda do
179
+ Delayed::Worker.max_attempts.times { @worker.reschedule(@job) }
180
+ end.should_not raise_exception(NoMethodError)
181
+ end
182
+ end
183
+ end
184
+
185
+ context "and we want to destroy jobs" do
186
+ before do
187
+ Delayed::Worker.destroy_failed_jobs = true
188
+ end
189
+
190
+ it_should_behave_like "any failure more than Worker.max_attempts times"
191
+
192
+ it "should be destroyed if it failed more than Worker.max_attempts times" do
193
+ @job.should_receive(:destroy)
194
+ Delayed::Worker.max_attempts.times { @worker.reschedule(@job) }
195
+ end
196
+
197
+ it "should not be destroyed if failed fewer than Worker.max_attempts times" do
198
+ @job.should_not_receive(:destroy)
199
+ (Delayed::Worker.max_attempts - 1).times { @worker.reschedule(@job) }
200
+ end
201
+ end
202
+
203
+ context "and we don't want to destroy jobs" do
204
+ before do
205
+ Delayed::Worker.destroy_failed_jobs = false
206
+ end
207
+
208
+ it_should_behave_like "any failure more than Worker.max_attempts times"
209
+
210
+ it "should be failed if it failed more than Worker.max_attempts times" do
211
+ @job.reload.failed_at.should == nil
212
+ Delayed::Worker.max_attempts.times { @worker.reschedule(@job) }
213
+ @job.reload.failed_at.should_not == nil
214
+ end
215
+
216
+ it "should not be failed if it failed fewer than Worker.max_attempts times" do
217
+ (Delayed::Worker.max_attempts - 1).times { @worker.reschedule(@job) }
218
+ @job.reload.failed_at.should == nil
219
+ end
220
+ end
221
+ end
222
+ end
223
+ end
224
+
225
+ end
@@ -0,0 +1 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'delayed', 'tasks'))
metadata ADDED
@@ -0,0 +1,323 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: emipair-delayed_job
3
+ version: !ruby/object:Gem::Version
4
+ hash: 97
5
+ prerelease:
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - 3
10
+ - 1
11
+ version: 2.0.3.1
12
+ platform: ruby
13
+ authors:
14
+ - EMI
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-01-24 00:00:00 -05:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: daemons
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ version: "0"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: blankslate
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rspec
52
+ prerelease: false
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"
62
+ type: :development
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: sqlite3-ruby
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ type: :development
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: mongo_mapper
80
+ prerelease: false
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ type: :development
91
+ version_requirements: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ name: dm-core
94
+ prerelease: false
95
+ requirement: &id006 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 3
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ type: :development
105
+ version_requirements: *id006
106
+ - !ruby/object:Gem::Dependency
107
+ name: dm-observer
108
+ prerelease: false
109
+ requirement: &id007 !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 3
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ type: :development
119
+ version_requirements: *id007
120
+ - !ruby/object:Gem::Dependency
121
+ name: dm-aggregates
122
+ prerelease: false
123
+ requirement: &id008 !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ hash: 3
129
+ segments:
130
+ - 0
131
+ version: "0"
132
+ type: :development
133
+ version_requirements: *id008
134
+ - !ruby/object:Gem::Dependency
135
+ name: dm-validations
136
+ prerelease: false
137
+ requirement: &id009 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ hash: 3
143
+ segments:
144
+ - 0
145
+ version: "0"
146
+ type: :development
147
+ version_requirements: *id009
148
+ - !ruby/object:Gem::Dependency
149
+ name: do_sqlite3
150
+ prerelease: false
151
+ requirement: &id010 !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ hash: 3
157
+ segments:
158
+ - 0
159
+ version: "0"
160
+ type: :development
161
+ version_requirements: *id010
162
+ - !ruby/object:Gem::Dependency
163
+ name: database_cleaner
164
+ prerelease: false
165
+ requirement: &id011 !ruby/object:Gem::Requirement
166
+ none: false
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ hash: 3
171
+ segments:
172
+ - 0
173
+ version: "0"
174
+ type: :development
175
+ version_requirements: *id011
176
+ description: DelayedJob for use form within a Merb application
177
+ email:
178
+ - platform-ops@emimusic.com
179
+ executables: []
180
+
181
+ extensions: []
182
+
183
+ extra_rdoc_files: []
184
+
185
+ files:
186
+ - .gitignore
187
+ - MIT-LICENSE
188
+ - README.textile
189
+ - Rakefile
190
+ - VERSION
191
+ - benchmarks.rb
192
+ - contrib/delayed_job.monitrc
193
+ - contrib/delayed_job_multiple.monitrc
194
+ - emipair-delayed_job.gemspec
195
+ - generators/delayed_job/delayed_job_generator.rb
196
+ - generators/delayed_job/templates/migration.rb
197
+ - generators/delayed_job/templates/script
198
+ - init.rb
199
+ - lib/delayed/backend/active_record.rb
200
+ - lib/delayed/backend/base.rb
201
+ - lib/delayed/backend/data_mapper.rb
202
+ - lib/delayed/backend/mongo_mapper.rb
203
+ - lib/delayed/command.rb
204
+ - lib/delayed/message_sending.rb
205
+ - lib/delayed/performable_method.rb
206
+ - lib/delayed/railtie.rb
207
+ - lib/delayed/recipes.rb
208
+ - lib/delayed/tasks.rb
209
+ - lib/delayed/worker.rb
210
+ - lib/delayed_job.rb
211
+ - lib/passive_support.rb
212
+ - lib/passive_support/basic_object.rb
213
+ - lib/passive_support/core_ext.rb
214
+ - lib/passive_support/core_ext/class.rb
215
+ - lib/passive_support/core_ext/class/attribute_accessors.rb
216
+ - lib/passive_support/core_ext/date.rb
217
+ - lib/passive_support/core_ext/date/behavior.rb
218
+ - lib/passive_support/core_ext/date/calculations.rb
219
+ - lib/passive_support/core_ext/date/conversions.rb
220
+ - lib/passive_support/core_ext/date_time.rb
221
+ - lib/passive_support/core_ext/date_time/calculations.rb
222
+ - lib/passive_support/core_ext/date_time/conversions.rb
223
+ - lib/passive_support/core_ext/enumerable.rb
224
+ - lib/passive_support/core_ext/kernel.rb
225
+ - lib/passive_support/core_ext/kernel/agnostics.rb
226
+ - lib/passive_support/core_ext/kernel/daemonizing.rb
227
+ - lib/passive_support/core_ext/kernel/debugger.rb
228
+ - lib/passive_support/core_ext/kernel/reporting.rb
229
+ - lib/passive_support/core_ext/kernel/requires.rb
230
+ - lib/passive_support/core_ext/module.rb
231
+ - lib/passive_support/core_ext/module/aliasing.rb
232
+ - lib/passive_support/core_ext/module/attr_accessor_with_default.rb
233
+ - lib/passive_support/core_ext/module/attr_internal.rb
234
+ - lib/passive_support/core_ext/module/delegation.rb
235
+ - lib/passive_support/core_ext/module/inclusion.rb
236
+ - lib/passive_support/core_ext/module/introspection.rb
237
+ - lib/passive_support/core_ext/module/loading.rb
238
+ - lib/passive_support/core_ext/module/model_naming.rb
239
+ - lib/passive_support/core_ext/module/synchronization.rb
240
+ - lib/passive_support/core_ext/numeric.rb
241
+ - lib/passive_support/core_ext/numeric/bytes.rb
242
+ - lib/passive_support/core_ext/numeric/conversions.rb
243
+ - lib/passive_support/core_ext/numeric/time.rb
244
+ - lib/passive_support/core_ext/object.rb
245
+ - lib/passive_support/core_ext/object/blank.rb
246
+ - lib/passive_support/core_ext/object/conversions.rb
247
+ - lib/passive_support/core_ext/object/extending.rb
248
+ - lib/passive_support/core_ext/object/instance_variables.rb
249
+ - lib/passive_support/core_ext/object/misc.rb
250
+ - lib/passive_support/core_ext/object/singleton_class.rb
251
+ - lib/passive_support/core_ext/string.rb
252
+ - lib/passive_support/core_ext/string/constantize.rb
253
+ - lib/passive_support/core_ext/time.rb
254
+ - lib/passive_support/core_ext/time/behavior.rb
255
+ - lib/passive_support/core_ext/time/calculations.rb
256
+ - lib/passive_support/core_ext/time/conversions.rb
257
+ - lib/passive_support/core_ext/time/zones.rb
258
+ - lib/passive_support/duration.rb
259
+ - lib/passive_support/ordered_hash.rb
260
+ - rails/init.rb
261
+ - recipes/delayed_job.rb
262
+ - spec/backend/active_record_job_spec.rb
263
+ - spec/backend/data_mapper_job_spec.rb
264
+ - spec/backend/mongo_mapper_job_spec.rb
265
+ - spec/backend/shared_backend_spec.rb
266
+ - spec/delayed_method_spec.rb
267
+ - spec/performable_method_spec.rb
268
+ - spec/sample_jobs.rb
269
+ - spec/setup/active_record.rb
270
+ - spec/setup/data_mapper.rb
271
+ - spec/setup/mongo_mapper.rb
272
+ - spec/spec_helper.rb
273
+ - spec/story_spec.rb
274
+ - spec/worker_spec.rb
275
+ - tasks/jobs.rake
276
+ has_rdoc: true
277
+ homepage: ""
278
+ licenses: []
279
+
280
+ post_install_message:
281
+ rdoc_options: []
282
+
283
+ require_paths:
284
+ - lib
285
+ required_ruby_version: !ruby/object:Gem::Requirement
286
+ none: false
287
+ requirements:
288
+ - - ">="
289
+ - !ruby/object:Gem::Version
290
+ hash: 3
291
+ segments:
292
+ - 0
293
+ version: "0"
294
+ required_rubygems_version: !ruby/object:Gem::Requirement
295
+ none: false
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ hash: 3
300
+ segments:
301
+ - 0
302
+ version: "0"
303
+ requirements: []
304
+
305
+ rubyforge_project:
306
+ rubygems_version: 1.4.1
307
+ signing_key:
308
+ specification_version: 3
309
+ summary: DelayedJob Merb port
310
+ test_files:
311
+ - spec/backend/active_record_job_spec.rb
312
+ - spec/backend/data_mapper_job_spec.rb
313
+ - spec/backend/mongo_mapper_job_spec.rb
314
+ - spec/backend/shared_backend_spec.rb
315
+ - spec/delayed_method_spec.rb
316
+ - spec/performable_method_spec.rb
317
+ - spec/sample_jobs.rb
318
+ - spec/setup/active_record.rb
319
+ - spec/setup/data_mapper.rb
320
+ - spec/setup/mongo_mapper.rb
321
+ - spec/spec_helper.rb
322
+ - spec/story_spec.rb
323
+ - spec/worker_spec.rb