coney_island 0.11.0 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/coney_island.rb +5 -3
- data/lib/coney_island/job.rb +8 -5
- data/lib/coney_island/performer.rb +17 -6
- data/lib/coney_island/submitter.rb +12 -9
- data/lib/coney_island/version.rb +1 -1
- data/test/dummy/log/test.log +38 -6
- data/test/performer_test.rb +31 -0
- data/test/submitter_test.rb +48 -1
- data/test/test_helper.rb +0 -1
- metadata +27 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a2c8ec4f4899725ab76ece82b50bb13c9bfc1cb
|
4
|
+
data.tar.gz: 4f2dc9c0ce8897c03f05f880f507d794fa87208c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ef8d2beed8302ee04a4be2d0affacfb6e2803ff2eaaae1fd9802235daf6125ffc5f77271c42434b195afe09f10d362cf3a12e839e182863b0522d9f270e6dc3
|
7
|
+
data.tar.gz: e9526c3ccf4ce3aa5e178d606db9d5679ddced9d21c35b55557435935614d3071b4bbcc1119ae1ec2dfa746d4ab2e2d4e7f5d62e3197f84a4bbb81f0ee653108
|
data/lib/coney_island.rb
CHANGED
@@ -2,8 +2,6 @@ module ConeyIsland
|
|
2
2
|
|
3
3
|
### BEGIN configuration
|
4
4
|
|
5
|
-
BG_TIMEOUT_SECONDS = 30
|
6
|
-
|
7
5
|
def self.amqp_connection
|
8
6
|
@connection
|
9
7
|
end
|
@@ -120,6 +118,10 @@ module ConeyIsland
|
|
120
118
|
end
|
121
119
|
end
|
122
120
|
|
121
|
+
def self.default_settings
|
122
|
+
{ work_queue: 'default', timeout: 30, delay: 0 }
|
123
|
+
end
|
124
|
+
|
123
125
|
end
|
124
126
|
|
125
127
|
require 'coney_island/notifiers/honeybadger_notifier'
|
@@ -128,4 +130,4 @@ require 'coney_island/job'
|
|
128
130
|
require 'coney_island/submitter'
|
129
131
|
require 'coney_island/job_argument_error'
|
130
132
|
require 'coney_island/railtie' if defined?(Rails)
|
131
|
-
require 'coney_island/performer'
|
133
|
+
require 'coney_island/performer'
|
data/lib/coney_island/job.rb
CHANGED
@@ -22,11 +22,14 @@ module ConeyIsland
|
|
22
22
|
@retry_on_exception = args['retry_on_exception']
|
23
23
|
|
24
24
|
@metadata = metadata
|
25
|
-
|
26
|
-
|
27
|
-
@
|
25
|
+
|
26
|
+
if @klass.included_modules.include?(Performer)
|
27
|
+
@delay ||= @klass.get_coney_settings[:delay]
|
28
|
+
@timeout ||= @klass.get_coney_settings[:timeout]
|
28
29
|
end
|
29
|
-
|
30
|
+
|
31
|
+
@timeout ||= ConeyIsland.default_settings[:timeout]
|
32
|
+
|
30
33
|
if @instance_id.present?
|
31
34
|
@object = @klass.find(@instance_id)
|
32
35
|
elsif @singleton
|
@@ -107,4 +110,4 @@ module ConeyIsland
|
|
107
110
|
end
|
108
111
|
|
109
112
|
end
|
110
|
-
end
|
113
|
+
end
|
@@ -3,6 +3,8 @@ module ConeyIsland
|
|
3
3
|
|
4
4
|
def self.included(base)
|
5
5
|
base.extend ClassMethods
|
6
|
+
# http://apidock.com/rails/Class/class_attribute
|
7
|
+
base.class_attribute :coney_island_settings
|
6
8
|
end
|
7
9
|
|
8
10
|
def method_missing(method_name, *args)
|
@@ -21,16 +23,25 @@ module ConeyIsland
|
|
21
23
|
|
22
24
|
module ClassMethods
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
# Sets inheritable class defaults for ConeyIsland.
|
27
|
+
# Valid options:
|
28
|
+
# :work_queue - use a named queue for this class.
|
29
|
+
# :delay - Delay execution of the job on the worker. The delay value is
|
30
|
+
# a number of seconds.
|
31
|
+
# :timeout - Timeout the job with retry. The timeout value is a number
|
32
|
+
# of seconds. By default ConeyIsland will retry 3 times before bailing
|
33
|
+
# out.
|
34
|
+
def set_background_defaults(options = {})
|
35
|
+
options = options.dup.symbolize_keys.slice(:work_queue, :delay, :timeout)
|
36
|
+
self.coney_island_settings = get_coney_settings.merge(options)
|
28
37
|
end
|
29
38
|
|
30
|
-
def
|
31
|
-
|
39
|
+
def get_coney_settings
|
40
|
+
self.coney_island_settings ||= ConeyIsland.default_settings
|
32
41
|
end
|
33
42
|
|
43
|
+
protected
|
44
|
+
|
34
45
|
def method_missing(method_name, *args)
|
35
46
|
method_str = method_name.to_s
|
36
47
|
if method_str =~ /.*_async$/
|
@@ -115,19 +115,22 @@ module ConeyIsland
|
|
115
115
|
job_args['klass'] = klass_name
|
116
116
|
job_args['method_name'] = method_name
|
117
117
|
job_args.stringify_keys!
|
118
|
+
# Extract non job args
|
119
|
+
delay = job_args.delete 'delay'
|
120
|
+
work_queue = job_args.delete 'work_queue'
|
121
|
+
# Set class defaults if they exist
|
122
|
+
if klass.included_modules.include?(Performer)
|
123
|
+
delay ||= klass.get_coney_settings[:delay]
|
124
|
+
work_queue ||= klass.get_coney_settings[:work_queue]
|
125
|
+
end
|
126
|
+
# Set our own defaults if we still don't have any
|
127
|
+
work_queue ||= ConeyIsland.default_settings[:work_queue]
|
128
|
+
delay ||= ConeyIsland.default_settings[:delay]
|
129
|
+
|
118
130
|
if @run_inline
|
119
131
|
job = ConeyIsland::Job.new(nil, job_args)
|
120
132
|
job.handle_job
|
121
133
|
else
|
122
|
-
work_queue = job_args.delete 'work_queue'
|
123
|
-
if klass.respond_to? :coney_island_settings
|
124
|
-
work_queue ||= klass.coney_island_settings[:work_queue]
|
125
|
-
end
|
126
|
-
work_queue ||= 'default'
|
127
|
-
delay = job_args['delay']
|
128
|
-
if klass.respond_to? :coney_island_settings
|
129
|
-
delay ||= klass.coney_island_settings[:delay]
|
130
|
-
end
|
131
134
|
if delay && delay.to_i > 0
|
132
135
|
@delay_queue[work_queue] ||= {}
|
133
136
|
unless @delay_queue[work_queue][delay].present?
|
data/lib/coney_island/version.rb
CHANGED
data/test/dummy/log/test.log
CHANGED
@@ -1,32 +1,64 @@
|
|
1
|
+
undefined method `pry' for #<Binding:0x007f08a9ff6dc0>
|
2
|
+
undefined method `pry' for #<Binding:0x007f08a9fd5120>
|
3
|
+
undefined method `pry' for #<Binding:0x007f08a9fb4bf0>
|
1
4
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
2
5
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
3
6
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
4
7
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
8
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
9
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
10
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
11
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
12
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
13
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
14
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
15
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
16
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
17
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
18
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
19
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
20
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
5
21
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
22
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
23
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
6
24
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
7
25
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
26
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
8
27
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
28
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
9
29
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
30
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
31
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
10
32
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
11
33
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
12
34
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
13
|
-
|
14
|
-
|
35
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
36
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
37
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
15
38
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
16
39
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
17
|
-
|
18
|
-
undefined method `[]' for nil:NilClass
|
19
|
-
undefined method `[]' for nil:NilClass
|
40
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
20
41
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
21
42
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
22
|
-
|
43
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
44
|
+
undefined method `publish' for nil:NilClass
|
45
|
+
undefined method `publish' for nil:NilClass
|
23
46
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
24
47
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
48
|
+
undefined method `publish' for nil:NilClass
|
49
|
+
undefined method `publish' for nil:NilClass
|
50
|
+
undefined method `publish' for nil:NilClass
|
51
|
+
undefined method `publish' for nil:NilClass
|
25
52
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
26
53
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
54
|
+
undefined method `publish' for nil:NilClass
|
55
|
+
undefined method `publish' for nil:NilClass
|
27
56
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
28
57
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
58
|
+
mocked method :publish called with unexpected arguments ["{\"args\":[[]],\"klass\":\"TestModel\",\"method_name\":\"add_to_list\"}", {:routing_key=>"carousels.default"}]
|
59
|
+
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
29
60
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
30
61
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
62
|
+
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
31
63
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
32
64
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
data/test/performer_test.rb
CHANGED
@@ -50,6 +50,34 @@ class PerformerTest < MiniTest::Test
|
|
50
50
|
@exchange.verify
|
51
51
|
::PerformerTest.messages[:publish_hash][:routing_key].must_equal "carousels.boardwalk"
|
52
52
|
end
|
53
|
+
|
54
|
+
it "inherits settings from a base class" do
|
55
|
+
@exchange = Minitest::Mock.new
|
56
|
+
def @exchange.publish(payload,options,&blk)
|
57
|
+
::PerformerTest.messages[:publish_hash] = options
|
58
|
+
end
|
59
|
+
ConeyIsland::Submitter.stub(:handle_connection, nil) do
|
60
|
+
ConeyIsland::Submitter.stub(:exchange, @exchange) do
|
61
|
+
ConeyIsland::Submitter.stop_running_inline
|
62
|
+
ConeyIsland::Submitter.submit(MyInheritedPerformer, :perform, args: [], delay: 0)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
@exchange.verify
|
66
|
+
::PerformerTest.messages[:publish_hash][:routing_key].must_equal "carousels.this-other-queue"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#get_coney_settings" do
|
71
|
+
it "inherits from the defaults" do
|
72
|
+
MySingleton.get_coney_settings.must_equal ConeyIsland.default_settings
|
73
|
+
end
|
74
|
+
|
75
|
+
it "is inheritable by subclasses" do
|
76
|
+
MyInheritedPerformer.get_coney_settings[:work_queue].must_equal 'this-other-queue'
|
77
|
+
# These come from the base class
|
78
|
+
MyInheritedPerformer.get_coney_settings[:timeout].must_equal 5
|
79
|
+
MyInheritedPerformer.get_coney_settings[:delay].must_equal 1
|
80
|
+
end
|
53
81
|
end
|
54
82
|
|
55
83
|
describe 'async methods' do
|
@@ -122,3 +150,6 @@ class MyPerformer
|
|
122
150
|
end
|
123
151
|
end
|
124
152
|
|
153
|
+
class MyInheritedPerformer < MyPerformer
|
154
|
+
set_background_defaults work_queue: "this-other-queue"
|
155
|
+
end
|
data/test/submitter_test.rb
CHANGED
@@ -33,5 +33,52 @@ class SubmitterTest < MiniTest::Test
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
36
|
+
|
37
|
+
def setup_mock(klass, method, args, expected_work_queue, work_queue=nil)
|
38
|
+
exchange = Minitest::Mock.new
|
39
|
+
options = { args: args }
|
40
|
+
options.merge! work_queue: work_queue if work_queue
|
41
|
+
exchange.expect :publish, nil, [String,{routing_key: "carousels.#{expected_work_queue}"}]
|
42
|
+
ConeyIsland::Submitter.stub(:handle_connection, nil) do
|
43
|
+
ConeyIsland::Submitter.stub(:exchange, exchange) do
|
44
|
+
ConeyIsland::Submitter.stop_running_inline
|
45
|
+
ConeyIsland::Submitter.submit(klass, method, options)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
exchange
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '.submit' do
|
52
|
+
|
53
|
+
it "is aware of default_settings" do
|
54
|
+
@exchange = setup_mock TestModel, :add_to_list, [[]], ConeyIsland.default_settings[:work_queue]
|
55
|
+
@exchange.verify
|
56
|
+
end
|
57
|
+
|
58
|
+
it "overrides defaults if passed in the args" do
|
59
|
+
@exchange = setup_mock TestModel, :add_to_list, [[]], 'my-queue', 'my-queue'
|
60
|
+
@exchange.verify
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "when submitting a performer" do
|
65
|
+
it "inherits the settings from the performer set_background_defaults" do
|
66
|
+
@exchange = setup_mock DummyPerformer, :perform, nil, 'foo'
|
67
|
+
@exchange.verify
|
68
|
+
end
|
69
|
+
|
70
|
+
it "still allows overriding the set_background_defaults" do
|
71
|
+
@exchange = setup_mock DummyPerformer, :perform, nil, 'bar', 'bar'
|
72
|
+
@exchange.verify
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
36
76
|
end
|
37
|
-
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class DummyPerformer
|
80
|
+
include ConeyIsland::Performer
|
81
|
+
set_background_defaults work_queue: 'foo'
|
82
|
+
|
83
|
+
def perform; end
|
84
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coney_island
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Draut
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-05-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -180,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
180
|
version: '0'
|
181
181
|
requirements: []
|
182
182
|
rubyforge_project:
|
183
|
-
rubygems_version: 2.
|
183
|
+
rubygems_version: 2.2.2
|
184
184
|
signing_key:
|
185
185
|
specification_version: 4
|
186
186
|
summary: Want guaranteed delivery between your queue and your workers using ACKs?
|
@@ -188,44 +188,44 @@ summary: Want guaranteed delivery between your queue and your workers using ACKs
|
|
188
188
|
features other background worker systems offer and you must have a ticket to ride
|
189
189
|
at Coney Island.
|
190
190
|
test_files:
|
191
|
-
- test/coney_island_test.rb
|
192
|
-
- test/dummy/app/assets/javascripts/application.js
|
193
191
|
- test/dummy/app/assets/stylesheets/application.css
|
192
|
+
- test/dummy/app/assets/javascripts/application.js
|
194
193
|
- test/dummy/app/controllers/application_controller.rb
|
195
194
|
- test/dummy/app/helpers/application_helper.rb
|
196
195
|
- test/dummy/app/views/layouts/application.html.erb
|
197
|
-
- test/dummy/bin/bundle
|
198
|
-
- test/dummy/bin/rails
|
199
|
-
- test/dummy/bin/rake
|
200
|
-
- test/dummy/config/application.rb
|
201
|
-
- test/dummy/config/boot.rb
|
202
196
|
- test/dummy/config/database.yml
|
203
|
-
- test/dummy/config/
|
204
|
-
- test/dummy/config/
|
205
|
-
- test/dummy/config/environments/production.rb
|
206
|
-
- test/dummy/config/environments/test.rb
|
207
|
-
- test/dummy/config/initializers/assets.rb
|
197
|
+
- test/dummy/config/routes.rb
|
198
|
+
- test/dummy/config/secrets.yml
|
208
199
|
- test/dummy/config/initializers/backtrace_silencers.rb
|
209
|
-
- test/dummy/config/initializers/cookies_serializer.rb
|
210
|
-
- test/dummy/config/initializers/filter_parameter_logging.rb
|
211
|
-
- test/dummy/config/initializers/inflections.rb
|
212
200
|
- test/dummy/config/initializers/mime_types.rb
|
201
|
+
- test/dummy/config/initializers/inflections.rb
|
202
|
+
- test/dummy/config/initializers/assets.rb
|
213
203
|
- test/dummy/config/initializers/session_store.rb
|
204
|
+
- test/dummy/config/initializers/cookies_serializer.rb
|
214
205
|
- test/dummy/config/initializers/wrap_parameters.rb
|
206
|
+
- test/dummy/config/initializers/filter_parameter_logging.rb
|
207
|
+
- test/dummy/config/application.rb
|
215
208
|
- test/dummy/config/locales/en.yml
|
216
|
-
- test/dummy/config/
|
217
|
-
- test/dummy/config/
|
218
|
-
- test/dummy/config.
|
219
|
-
- test/dummy/
|
220
|
-
- test/dummy/
|
209
|
+
- test/dummy/config/environment.rb
|
210
|
+
- test/dummy/config/environments/production.rb
|
211
|
+
- test/dummy/config/environments/development.rb
|
212
|
+
- test/dummy/config/environments/test.rb
|
213
|
+
- test/dummy/config/boot.rb
|
221
214
|
- test/dummy/public/404.html
|
222
215
|
- test/dummy/public/422.html
|
223
|
-
- test/dummy/public/500.html
|
224
216
|
- test/dummy/public/favicon.ico
|
225
|
-
- test/dummy/
|
217
|
+
- test/dummy/public/500.html
|
218
|
+
- test/dummy/db/test.sqlite3
|
226
219
|
- test/dummy/README.rdoc
|
227
|
-
- test/
|
228
|
-
- test/
|
220
|
+
- test/dummy/bin/rails
|
221
|
+
- test/dummy/bin/rake
|
222
|
+
- test/dummy/bin/bundle
|
223
|
+
- test/dummy/config.ru
|
224
|
+
- test/dummy/log/test.log
|
225
|
+
- test/dummy/Rakefile
|
229
226
|
- test/submitter_test.rb
|
227
|
+
- test/job_test.rb
|
230
228
|
- test/test_helper.rb
|
231
229
|
- test/worker_test.rb
|
230
|
+
- test/performer_test.rb
|
231
|
+
- test/coney_island_test.rb
|