sucker_punch 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +6 -0
- data/README.md +16 -0
- data/lib/sucker_punch.rb +4 -0
- data/lib/sucker_punch/queue.rb +15 -2
- data/lib/sucker_punch/railtie.rb +1 -1
- data/lib/sucker_punch/version.rb +1 -1
- data/spec/sucker_punch/queue_spec.rb +37 -5
- data/spec/sucker_punch_spec.rb +10 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfa2c3188160d11c140e02f6935357ef0cdf8dc7
|
4
|
+
data.tar.gz: a9bfa22e4f43208aee4a6cc660db600d1be62c49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eba72894093e01f2fd3900c548c14d4c68deec3da4f248ffc3577dceb99247ea9505f122d0c74fc419a34ee7d269a2368a7d7a91ce64a1a41dcbc7e873e1a0cb
|
7
|
+
data.tar.gz: 2ba835f123989034ec6a86f06ec0d5ec336991808e4c3c98b25f7d7afa7e82c8194b144d4fbc6829284b6321804e6b8f50c2252e25223e299b649c6dafdf66c7
|
data/CHANGES.md
CHANGED
data/README.md
CHANGED
@@ -145,6 +145,22 @@ SuckerPunch.logger # => #<Logger:0x007fa1f28b83f0>
|
|
145
145
|
_Note: If Sucker Punch is being used within a Rails application, Sucker Punch's logger
|
146
146
|
is set to Rails.logger by default._
|
147
147
|
|
148
|
+
## Exceptions
|
149
|
+
|
150
|
+
You can customize how to handle uncaught exceptions that are raised by your jobs.
|
151
|
+
|
152
|
+
For example, using Rails and the ExceptionNotification gem, add a new initializer `config/initializers/sucker_punch.rb`:
|
153
|
+
|
154
|
+
```Ruby
|
155
|
+
SuckerPunch.exception_handler { |ex| ExceptionNotifier.notify_exception(ex) }
|
156
|
+
```
|
157
|
+
|
158
|
+
Or, using Airbrake:
|
159
|
+
|
160
|
+
```Ruby
|
161
|
+
SuckerPunch.exception_handler { |ex| Airbrake.notify(ex) }
|
162
|
+
```
|
163
|
+
|
148
164
|
## Testing
|
149
165
|
|
150
166
|
Requiring this library causes your jobs to run everything inline. So a call to the following will actually be SYNCHRONOUS:
|
data/lib/sucker_punch.rb
CHANGED
data/lib/sucker_punch/queue.rb
CHANGED
@@ -6,6 +6,7 @@ module SuckerPunch
|
|
6
6
|
attr_accessor :pool
|
7
7
|
|
8
8
|
DEFAULT_OPTIONS = { workers: 2 }
|
9
|
+
PREFIX = "sucker_punch"
|
9
10
|
class MaxWorkersExceeded < StandardError; end
|
10
11
|
class NotEnoughWorkers < StandardError; end
|
11
12
|
|
@@ -14,6 +15,17 @@ module SuckerPunch
|
|
14
15
|
Celluloid::Actor[queue.name]
|
15
16
|
end
|
16
17
|
|
18
|
+
def self.clear_all
|
19
|
+
Celluloid::Actor.all.each do |actor|
|
20
|
+
registered_name = actor.registered_name.to_s
|
21
|
+
matches = registered_name.match(PREFIX).to_a
|
22
|
+
|
23
|
+
if matches.any?
|
24
|
+
Celluloid::Actor.delete(registered_name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
17
29
|
def initialize(klass)
|
18
30
|
@klass = klass
|
19
31
|
@pool = nil
|
@@ -22,7 +34,7 @@ module SuckerPunch
|
|
22
34
|
|
23
35
|
def register(num_workers = DEFAULT_OPTIONS[:workers])
|
24
36
|
num_workers ||= DEFAULT_OPTIONS[:workers]
|
25
|
-
raise MaxWorkersExceeded if num_workers >
|
37
|
+
raise MaxWorkersExceeded if num_workers > 200
|
26
38
|
raise NotEnoughWorkers if num_workers < 1
|
27
39
|
|
28
40
|
@mutex.synchronize {
|
@@ -39,7 +51,8 @@ module SuckerPunch
|
|
39
51
|
end
|
40
52
|
|
41
53
|
def name
|
42
|
-
klass.to_s.underscore
|
54
|
+
klass_name = klass.to_s.underscore
|
55
|
+
"#{PREFIX}_#{klass_name}".to_sym
|
43
56
|
end
|
44
57
|
|
45
58
|
private
|
data/lib/sucker_punch/railtie.rb
CHANGED
data/lib/sucker_punch/version.rb
CHANGED
@@ -15,7 +15,7 @@ describe SuckerPunch::Queue do
|
|
15
15
|
Celluloid::Actor.clear_registry
|
16
16
|
end
|
17
17
|
|
18
|
-
describe "
|
18
|
+
describe ".find" do
|
19
19
|
it "returns the Celluloid Actor from the registry" do
|
20
20
|
SuckerPunch::Queue.new(FakeJob).register
|
21
21
|
queue = SuckerPunch::Queue.find(FakeJob)
|
@@ -23,6 +23,32 @@ describe SuckerPunch::Queue do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
describe ".clear_all" do
|
27
|
+
it "removes SuckerPunch actors from Celluloid registry" do
|
28
|
+
sucker_punch_actor_name = "#{SuckerPunch::Queue::PREFIX}_fake_job".to_sym
|
29
|
+
Celluloid::Actor[sucker_punch_actor_name] = FakeJob.new
|
30
|
+
|
31
|
+
SuckerPunch::Queue.clear_all
|
32
|
+
|
33
|
+
expect(Celluloid::Actor[sucker_punch_actor_name]).to be_nil
|
34
|
+
end
|
35
|
+
|
36
|
+
it "does not remove non-SuckerPunch actors from Celluloid registry" do
|
37
|
+
class ::OtherJob
|
38
|
+
include ::Celluloid
|
39
|
+
def self.pool(options); end
|
40
|
+
def perform; end
|
41
|
+
end
|
42
|
+
actor_name = :other_job
|
43
|
+
job = OtherJob.new
|
44
|
+
Celluloid::Actor[actor_name] = job
|
45
|
+
|
46
|
+
SuckerPunch::Queue.clear_all
|
47
|
+
|
48
|
+
expect(Celluloid::Actor[actor_name]).to eq job
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
26
52
|
describe "#register" do
|
27
53
|
let(:job) { FakeJob }
|
28
54
|
let(:queue) { SuckerPunch::Queue.new(job) }
|
@@ -33,18 +59,24 @@ describe SuckerPunch::Queue do
|
|
33
59
|
end
|
34
60
|
|
35
61
|
it "registers the pool with Celluloid" do
|
62
|
+
expected_pool_name = "#{SuckerPunch::Queue::PREFIX}_fake_job".to_sym
|
63
|
+
|
36
64
|
pool = queue.register
|
37
|
-
|
65
|
+
|
66
|
+
expect(Celluloid::Actor[expected_pool_name]).to eq(pool)
|
38
67
|
end
|
39
68
|
|
40
69
|
it "registers the pool with Celluloid and 3 workers" do
|
41
|
-
|
42
|
-
|
70
|
+
expected_pool_name = "#{SuckerPunch::Queue::PREFIX}_fake_job"
|
71
|
+
|
72
|
+
queue.register(3)
|
73
|
+
|
74
|
+
expect(Celluloid::Actor[expected_pool_name].size).to eq(3)
|
43
75
|
end
|
44
76
|
|
45
77
|
context "when too many workers are specified" do
|
46
78
|
it "raises a MaxWorkersExceeded exception" do
|
47
|
-
expect{ queue.register(
|
79
|
+
expect{ queue.register(201) }.to raise_error(SuckerPunch::Queue::MaxWorkersExceeded)
|
48
80
|
end
|
49
81
|
end
|
50
82
|
|
data/spec/sucker_punch_spec.rb
CHANGED
@@ -11,4 +11,14 @@ describe SuckerPunch do
|
|
11
11
|
SuckerPunch.logger = nil
|
12
12
|
end
|
13
13
|
end
|
14
|
+
|
15
|
+
describe '.clear_queues' do
|
16
|
+
it "clears SuckerPunch queues" do
|
17
|
+
allow(SuckerPunch::Queue).to receive(:clear_all)
|
18
|
+
|
19
|
+
SuckerPunch.clear_queues
|
20
|
+
|
21
|
+
expect(SuckerPunch::Queue).to have_received(:clear_all)
|
22
|
+
end
|
23
|
+
end
|
14
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sucker_punch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Hilkert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|