drewda_delayed_job 3.0.3
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/MIT-LICENSE +20 -0
- data/README.textile +314 -0
- data/contrib/delayed_job.monitrc +14 -0
- data/contrib/delayed_job_multiple.monitrc +23 -0
- data/lib/delayed/backend/base.rb +184 -0
- data/lib/delayed/backend/shared_spec.rb +595 -0
- data/lib/delayed/command.rb +108 -0
- data/lib/delayed/deserialization_error.rb +4 -0
- data/lib/delayed/lifecycle.rb +84 -0
- data/lib/delayed/message_sending.rb +54 -0
- data/lib/delayed/performable_mailer.rb +21 -0
- data/lib/delayed/performable_method.rb +37 -0
- data/lib/delayed/plugin.rb +15 -0
- data/lib/delayed/plugins/clear_locks.rb +15 -0
- data/lib/delayed/psych_ext.rb +132 -0
- data/lib/delayed/railtie.rb +16 -0
- data/lib/delayed/recipes.rb +50 -0
- data/lib/delayed/serialization/active_record.rb +19 -0
- data/lib/delayed/syck_ext.rb +34 -0
- data/lib/delayed/tasks.rb +11 -0
- data/lib/delayed/worker.rb +242 -0
- data/lib/delayed/yaml_ext.rb +10 -0
- data/lib/delayed_job.rb +21 -0
- data/lib/generators/delayed_job/delayed_job_generator.rb +11 -0
- data/lib/generators/delayed_job/templates/script +5 -0
- data/recipes/delayed_job.rb +1 -0
- data/spec/autoloaded/clazz.rb +7 -0
- data/spec/autoloaded/instance_clazz.rb +6 -0
- data/spec/autoloaded/instance_struct.rb +6 -0
- data/spec/autoloaded/struct.rb +7 -0
- data/spec/delayed/backend/test.rb +113 -0
- data/spec/delayed/serialization/test.rb +0 -0
- data/spec/fixtures/bad_alias.yml +1 -0
- data/spec/lifecycle_spec.rb +67 -0
- data/spec/message_sending_spec.rb +113 -0
- data/spec/performable_mailer_spec.rb +44 -0
- data/spec/performable_method_spec.rb +89 -0
- data/spec/sample_jobs.rb +75 -0
- data/spec/spec_helper.rb +53 -0
- data/spec/test_backend_spec.rb +13 -0
- data/spec/worker_spec.rb +19 -0
- data/spec/yaml_ext_spec.rb +41 -0
- metadata +214 -0
data/spec/sample_jobs.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
class NamedJob < Struct.new(:perform)
|
2
|
+
def display_name
|
3
|
+
'named_job'
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class SimpleJob
|
8
|
+
cattr_accessor :runs; self.runs = 0
|
9
|
+
def perform; @@runs += 1; end
|
10
|
+
end
|
11
|
+
|
12
|
+
class ErrorJob
|
13
|
+
cattr_accessor :runs; self.runs = 0
|
14
|
+
def perform; raise 'did not work'; end
|
15
|
+
end
|
16
|
+
|
17
|
+
class CustomRescheduleJob < Struct.new(:offset)
|
18
|
+
cattr_accessor :runs; self.runs = 0
|
19
|
+
def perform; raise 'did not work'; end
|
20
|
+
def reschedule_at(time, attempts); time + offset; end
|
21
|
+
end
|
22
|
+
|
23
|
+
class LongRunningJob
|
24
|
+
def perform; sleep 250; end
|
25
|
+
end
|
26
|
+
|
27
|
+
class OnPermanentFailureJob < SimpleJob
|
28
|
+
def failure; end
|
29
|
+
def max_attempts; 1; end
|
30
|
+
end
|
31
|
+
|
32
|
+
module M
|
33
|
+
class ModuleJob
|
34
|
+
cattr_accessor :runs; self.runs = 0
|
35
|
+
def perform; @@runs += 1; end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class CallbackJob
|
40
|
+
cattr_accessor :messages
|
41
|
+
|
42
|
+
def enqueue(job)
|
43
|
+
self.class.messages << 'enqueue'
|
44
|
+
end
|
45
|
+
|
46
|
+
def before(job)
|
47
|
+
self.class.messages << 'before'
|
48
|
+
end
|
49
|
+
|
50
|
+
def perform
|
51
|
+
self.class.messages << 'perform'
|
52
|
+
end
|
53
|
+
|
54
|
+
def after(job)
|
55
|
+
self.class.messages << 'after'
|
56
|
+
end
|
57
|
+
|
58
|
+
def success(job)
|
59
|
+
self.class.messages << 'success'
|
60
|
+
end
|
61
|
+
|
62
|
+
def error(job, error)
|
63
|
+
self.class.messages << "error: #{error.class}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def failure(job)
|
67
|
+
self.class.messages << 'failure'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class EnqueueJobMod < SimpleJob
|
72
|
+
def enqueue(job)
|
73
|
+
job.run_at = 20.minutes.from_now
|
74
|
+
end
|
75
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
unless ENV['CI']
|
2
|
+
require 'simplecov'
|
3
|
+
SimpleCov.start
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'bundler/setup'
|
7
|
+
require 'logger'
|
8
|
+
|
9
|
+
require 'action_mailer'
|
10
|
+
require 'active_support/dependencies'
|
11
|
+
require 'active_record'
|
12
|
+
|
13
|
+
require 'delayed_job'
|
14
|
+
require 'delayed/backend/shared_spec'
|
15
|
+
|
16
|
+
Delayed::Worker.logger = Logger.new('/tmp/dj.log')
|
17
|
+
ENV['RAILS_ENV'] = 'test'
|
18
|
+
|
19
|
+
Delayed::Worker.backend = :test
|
20
|
+
|
21
|
+
# Add this directory so the ActiveSupport autoloading works
|
22
|
+
ActiveSupport::Dependencies.autoload_paths << File.dirname(__FILE__)
|
23
|
+
|
24
|
+
# Add this to simulate Railtie initializer being executed
|
25
|
+
ActionMailer::Base.send(:extend, Delayed::DelayMail)
|
26
|
+
|
27
|
+
|
28
|
+
# Used to test interactions between DJ and an ORM
|
29
|
+
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
30
|
+
ActiveRecord::Base.logger = Delayed::Worker.logger
|
31
|
+
ActiveRecord::Migration.verbose = false
|
32
|
+
|
33
|
+
ActiveRecord::Schema.define do
|
34
|
+
create_table :stories, :primary_key => :story_id, :force => true do |table|
|
35
|
+
table.string :text
|
36
|
+
table.boolean :scoped, :default => true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Story < ActiveRecord::Base
|
41
|
+
self.primary_key = 'story_id'
|
42
|
+
def tell; text; end
|
43
|
+
def whatever(n, _); tell*n; end
|
44
|
+
default_scope where(:scoped => true)
|
45
|
+
|
46
|
+
handle_asynchronously :whatever
|
47
|
+
end
|
48
|
+
|
49
|
+
RSpec.configure do |config|
|
50
|
+
config.after(:each) do
|
51
|
+
Delayed::Worker.reset
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Delayed::Backend::Test::Job do
|
4
|
+
it_should_behave_like 'a delayed_job backend'
|
5
|
+
|
6
|
+
describe "#reload" do
|
7
|
+
it 'should cause the payload object to be reloaded' do
|
8
|
+
job = "foo".delay.length
|
9
|
+
o = job.payload_object
|
10
|
+
o.object_id.should_not == job.reload.payload_object.object_id
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/spec/worker_spec.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Delayed::Worker do
|
4
|
+
describe "backend=" do
|
5
|
+
before do
|
6
|
+
@clazz = Class.new
|
7
|
+
Delayed::Worker.backend = @clazz
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should set the Delayed::Job constant to the backend" do
|
11
|
+
Delayed::Job.should == @clazz
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should set backend with a symbol" do
|
15
|
+
Delayed::Worker.backend = :test
|
16
|
+
Delayed::Worker.backend.should == Delayed::Backend::Test::Job
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "YAML" do
|
4
|
+
it "should autoload classes" do
|
5
|
+
lambda {
|
6
|
+
yaml = "--- !ruby/class Autoloaded::Clazz\n"
|
7
|
+
YAML.load(yaml).should == Autoloaded::Clazz
|
8
|
+
}.should_not raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should autoload the class of a struct" do
|
12
|
+
lambda {
|
13
|
+
yaml = "--- !ruby/class Autoloaded::Struct\n"
|
14
|
+
YAML.load(yaml).should == Autoloaded::Struct
|
15
|
+
}.should_not raise_error
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should autoload the class for the instance of a struct" do
|
19
|
+
lambda {
|
20
|
+
yaml = "--- !ruby/struct:Autoloaded::InstanceStruct {}"
|
21
|
+
YAML.load(yaml).class.should == Autoloaded::InstanceStruct
|
22
|
+
}.should_not raise_error
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should autoload the class for the instance" do
|
26
|
+
lambda {
|
27
|
+
yaml = "--- !ruby/object:Autoloaded::InstanceClazz {}\n"
|
28
|
+
YAML.load(yaml).class.should == Autoloaded::InstanceClazz
|
29
|
+
}.should_not raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should not throw an uninitialized constant Syck::Syck when using YAML.load_file with poorly formed yaml" do
|
33
|
+
lambda {
|
34
|
+
YAML.load_file(File.expand_path('spec/fixtures/bad_alias.yml'))
|
35
|
+
}.should_not raise_error
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should not throw an uninitialized constant Syck::Syck when using YAML.load with poorly formed yaml" do
|
39
|
+
lambda { YAML.load(YAML.dump("foo: *bar"))}.should_not raise_error
|
40
|
+
end
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: drewda_delayed_job
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matt Griffin
|
9
|
+
- Brian Ryckbost
|
10
|
+
- Steve Richert
|
11
|
+
- Chris Gaffney
|
12
|
+
- Brandon Keepers
|
13
|
+
- Tobias Lütke
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
date: 2012-05-29 00:00:00.000000000 Z
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
20
|
+
name: activesupport
|
21
|
+
requirement: !ruby/object:Gem::Requirement
|
22
|
+
none: false
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
type: :runtime
|
28
|
+
prerelease: false
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '3.0'
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: activerecord
|
37
|
+
requirement: !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ~>
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '3.0'
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ~>
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '3.0'
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: actionmailer
|
53
|
+
requirement: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '3.0'
|
59
|
+
type: :development
|
60
|
+
prerelease: false
|
61
|
+
version_requirements: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '3.0'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rspec
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ~>
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '2.0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: simplecov
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ! '>='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
type: :development
|
108
|
+
prerelease: false
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
description: ! 'Delayed_job (or DJ) encapsulates the common pattern of asynchronously
|
116
|
+
executing longer tasks in the background. It is a direct extraction from Shopify
|
117
|
+
where the job table is responsible for a multitude of core tasks.
|
118
|
+
|
119
|
+
|
120
|
+
This gem is collectiveidea''s fork (http://github.com/collectiveidea/delayed_job).'
|
121
|
+
email:
|
122
|
+
- brian@collectiveidea.com
|
123
|
+
executables: []
|
124
|
+
extensions: []
|
125
|
+
extra_rdoc_files:
|
126
|
+
- README.textile
|
127
|
+
files:
|
128
|
+
- contrib/delayed_job.monitrc
|
129
|
+
- contrib/delayed_job_multiple.monitrc
|
130
|
+
- lib/delayed/backend/base.rb
|
131
|
+
- lib/delayed/backend/shared_spec.rb
|
132
|
+
- lib/delayed/command.rb
|
133
|
+
- lib/delayed/deserialization_error.rb
|
134
|
+
- lib/delayed/lifecycle.rb
|
135
|
+
- lib/delayed/message_sending.rb
|
136
|
+
- lib/delayed/performable_mailer.rb
|
137
|
+
- lib/delayed/performable_method.rb
|
138
|
+
- lib/delayed/plugin.rb
|
139
|
+
- lib/delayed/plugins/clear_locks.rb
|
140
|
+
- lib/delayed/psych_ext.rb
|
141
|
+
- lib/delayed/railtie.rb
|
142
|
+
- lib/delayed/recipes.rb
|
143
|
+
- lib/delayed/serialization/active_record.rb
|
144
|
+
- lib/delayed/syck_ext.rb
|
145
|
+
- lib/delayed/tasks.rb
|
146
|
+
- lib/delayed/worker.rb
|
147
|
+
- lib/delayed/yaml_ext.rb
|
148
|
+
- lib/delayed_job.rb
|
149
|
+
- lib/generators/delayed_job/delayed_job_generator.rb
|
150
|
+
- lib/generators/delayed_job/templates/script
|
151
|
+
- recipes/delayed_job.rb
|
152
|
+
- spec/autoloaded/clazz.rb
|
153
|
+
- spec/autoloaded/instance_clazz.rb
|
154
|
+
- spec/autoloaded/instance_struct.rb
|
155
|
+
- spec/autoloaded/struct.rb
|
156
|
+
- spec/delayed/backend/test.rb
|
157
|
+
- spec/delayed/serialization/test.rb
|
158
|
+
- spec/fixtures/bad_alias.yml
|
159
|
+
- spec/lifecycle_spec.rb
|
160
|
+
- spec/message_sending_spec.rb
|
161
|
+
- spec/performable_mailer_spec.rb
|
162
|
+
- spec/performable_method_spec.rb
|
163
|
+
- spec/sample_jobs.rb
|
164
|
+
- spec/spec_helper.rb
|
165
|
+
- spec/test_backend_spec.rb
|
166
|
+
- spec/worker_spec.rb
|
167
|
+
- spec/yaml_ext_spec.rb
|
168
|
+
- MIT-LICENSE
|
169
|
+
- README.textile
|
170
|
+
homepage: http://github.com/collectiveidea/delayed_job
|
171
|
+
licenses: []
|
172
|
+
post_install_message:
|
173
|
+
rdoc_options:
|
174
|
+
- --main
|
175
|
+
- README.textile
|
176
|
+
- --inline-source
|
177
|
+
- --line-numbers
|
178
|
+
require_paths:
|
179
|
+
- lib
|
180
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
181
|
+
none: false
|
182
|
+
requirements:
|
183
|
+
- - ! '>='
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
186
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
|
+
none: false
|
188
|
+
requirements:
|
189
|
+
- - ! '>='
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
requirements: []
|
193
|
+
rubyforge_project:
|
194
|
+
rubygems_version: 1.8.24
|
195
|
+
signing_key:
|
196
|
+
specification_version: 3
|
197
|
+
summary: Database-backed asynchronous priority queue system -- Extracted from Shopify
|
198
|
+
test_files:
|
199
|
+
- spec/autoloaded/clazz.rb
|
200
|
+
- spec/autoloaded/instance_clazz.rb
|
201
|
+
- spec/autoloaded/instance_struct.rb
|
202
|
+
- spec/autoloaded/struct.rb
|
203
|
+
- spec/delayed/backend/test.rb
|
204
|
+
- spec/delayed/serialization/test.rb
|
205
|
+
- spec/fixtures/bad_alias.yml
|
206
|
+
- spec/lifecycle_spec.rb
|
207
|
+
- spec/message_sending_spec.rb
|
208
|
+
- spec/performable_mailer_spec.rb
|
209
|
+
- spec/performable_method_spec.rb
|
210
|
+
- spec/sample_jobs.rb
|
211
|
+
- spec/spec_helper.rb
|
212
|
+
- spec/test_backend_spec.rb
|
213
|
+
- spec/worker_spec.rb
|
214
|
+
- spec/yaml_ext_spec.rb
|