sucker_punch 1.4.0 → 1.5.0
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.
- 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
|