sucker_punch 1.0.2 → 1.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.
- checksums.yaml +4 -4
- data/.travis.yml +5 -1
- data/README.md +44 -14
- data/lib/sucker_punch/queue.rb +1 -6
- data/lib/sucker_punch/railtie.rb +4 -0
- data/lib/sucker_punch/version.rb +1 -1
- data/spec/sucker_punch/queue_spec.rb +5 -7
- data/sucker_punch.gemspec +1 -1
- metadata +17 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3176eeae888f0de8b24a633fd09eb3bd1a903b75
|
4
|
+
data.tar.gz: 6ed863474d1d0efdb0009a40a440b424f6e6656e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: deb547d6b67c54576d1f2398abec30356dfa9f324e793190396b67e47f460048accdf1160810201505366b3ad7a76a3c3429afb71a5b234f0d0fd4a1d173cdb7
|
7
|
+
data.tar.gz: 0ca6cddc806a3a6cffbfb58b2f0254b68875a08a703717cc173e622677f865d95b32540ba3710bb5ef1a3af37e059ea9a9fa6f4e41eda22fb8b89ec3313e6d05
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -86,8 +86,7 @@ class AwesomeJob
|
|
86
86
|
end
|
87
87
|
```
|
88
88
|
|
89
|
-
The number of workers
|
90
|
-
|
89
|
+
The number of workers can be set from the Job using the `workers` method:
|
91
90
|
|
92
91
|
```Ruby
|
93
92
|
class LogJob
|
@@ -100,16 +99,41 @@ class LogJob
|
|
100
99
|
end
|
101
100
|
```
|
102
101
|
|
103
|
-
If the `workers` method is not set,
|
102
|
+
If the `workers` method is not set, the default is `2`.
|
103
|
+
|
104
|
+
## Perform In
|
105
|
+
|
106
|
+
Many background processing libraries have methods to perform operations after a
|
107
|
+
certain amount of time. Fortunately, timers are built-in to Celluloid, so you
|
108
|
+
can take advantage of them with the `after` method:
|
109
|
+
|
110
|
+
``` ruby
|
111
|
+
class Job
|
112
|
+
include SuckerPunch::Job
|
113
|
+
|
114
|
+
def perform(data)
|
115
|
+
sleep 2
|
116
|
+
puts data
|
117
|
+
end
|
118
|
+
|
119
|
+
def later(sec, data)
|
120
|
+
after(sec) { perform(data) }
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
Job.new.async.perform("asdf")
|
125
|
+
Job.new.async.later(60, "asdf") # `perform` will be excuted 60 sec. later
|
126
|
+
```
|
104
127
|
|
105
128
|
## Logger
|
106
129
|
|
107
130
|
```Ruby
|
108
|
-
SuckerPunch.logger = Logger.new('sucker_punch')
|
131
|
+
SuckerPunch.logger = Logger.new('sucker_punch.log')
|
109
132
|
SuckerPunch.logger # => #<Logger:0x007fa1f28b83f0>
|
110
133
|
```
|
111
134
|
|
112
|
-
If Sucker Punch is being used within a Rails application, Sucker Punch's logger
|
135
|
+
_Note: If Sucker Punch is being used within a Rails application, Sucker Punch's logger
|
136
|
+
is set to Rails.logger by default._
|
113
137
|
|
114
138
|
## Testing
|
115
139
|
|
@@ -128,15 +152,17 @@ Log.new.async.perform("login") # => Will be synchronous and block until job is f
|
|
128
152
|
|
129
153
|
### Initializers for forking servers (Unicorn, Passenger, etc.)
|
130
154
|
|
131
|
-
Previously, Sucker Punch required an initializer and that posed problems for
|
132
|
-
|
133
|
-
|
155
|
+
Previously, Sucker Punch required an initializer and that posed problems for
|
156
|
+
Unicorn and Passenger and other servers that fork. Version 1 was rewritten to
|
157
|
+
not require any special code to be executed after forking occurs. Please remove
|
158
|
+
if you're using version `>= 1.0.0`
|
134
159
|
|
135
160
|
### Class naming
|
136
161
|
|
137
|
-
Job classes are ultimately Celluloid Actor classes. As a result, class names
|
138
|
-
|
139
|
-
|
162
|
+
Job classes are ultimately Celluloid Actor classes. As a result, class names
|
163
|
+
are susceptible to being clobbered by Celluloid's internal classes. To ensure
|
164
|
+
the intended application class is loaded, preface classes with `::`, or use
|
165
|
+
names like `NotificationsMailer` or `UserMailer`. Example:
|
140
166
|
|
141
167
|
```Ruby
|
142
168
|
class EmailJob
|
@@ -151,7 +177,7 @@ end
|
|
151
177
|
|
152
178
|
### Cleaning test data transactions
|
153
179
|
|
154
|
-
If you're running tests in transactions (using Database Cleaner or a native solution), Sucker Punch jobs may have trouble finding database records that were created during test setup because the job class is running in a separate thread and the Transaction operates on a different thread so it clears out the data before the
|
180
|
+
If you're running tests in transactions (using Database Cleaner or a native solution), Sucker Punch jobs may have trouble finding database records that were created during test setup because the job class is running in a separate thread and the Transaction operates on a different thread so it clears out the data before the job can do its business. The best thing to do is cleanup data created for tests jobs through a truncation strategy by tagging the rspec tests as jobs and then specifying the strategy in `spec_helper` like below:
|
155
181
|
|
156
182
|
```Ruby
|
157
183
|
# spec/spec_helper.rb
|
@@ -161,7 +187,7 @@ RSpec.configure do |config|
|
|
161
187
|
end
|
162
188
|
|
163
189
|
# Clean up all jobs specs with truncation
|
164
|
-
config.before(:each, :
|
190
|
+
config.before(:each, job: true) do
|
165
191
|
DatabaseCleaner.strategy = :truncation
|
166
192
|
end
|
167
193
|
|
@@ -172,6 +198,7 @@ RSpec.configure do |config|
|
|
172
198
|
config.after(:each) do
|
173
199
|
DatabaseCleaner.clean
|
174
200
|
end
|
201
|
+
end
|
175
202
|
|
176
203
|
# spec/jobs/email_job_spec.rb
|
177
204
|
require 'spec_helper'
|
@@ -192,7 +219,9 @@ end
|
|
192
219
|
|
193
220
|
## Gem Name
|
194
221
|
|
195
|
-
...is awesome. But I can't take credit for it. Thanks to
|
222
|
+
...is awesome. But I can't take credit for it. Thanks to
|
223
|
+
[@jmazzi](https://twitter.com/jmazzi) for his superior naming skills. If you're
|
224
|
+
looking for a name for something, he is the one to go to.
|
196
225
|
|
197
226
|
## Contributing
|
198
227
|
|
@@ -201,3 +230,4 @@ end
|
|
201
230
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
202
231
|
4. Push to the branch (`git push origin my-new-feature`)
|
203
232
|
5. Create new Pull Request
|
233
|
+
|
data/lib/sucker_punch/queue.rb
CHANGED
@@ -29,14 +29,13 @@ module SuckerPunch
|
|
29
29
|
unless registered?
|
30
30
|
initialize_celluloid_pool(num_workers)
|
31
31
|
register_celluloid_pool
|
32
|
-
register_queue_with_master_list
|
33
32
|
end
|
34
33
|
}
|
35
34
|
self.class.find(klass)
|
36
35
|
end
|
37
36
|
|
38
37
|
def registered?
|
39
|
-
|
38
|
+
Celluloid::Actor.registered.include?(name.to_sym)
|
40
39
|
end
|
41
40
|
|
42
41
|
def name
|
@@ -52,10 +51,6 @@ module SuckerPunch
|
|
52
51
|
def register_celluloid_pool
|
53
52
|
Celluloid::Actor[name] = pool
|
54
53
|
end
|
55
|
-
|
56
|
-
def register_queue_with_master_list
|
57
|
-
SuckerPunch::Queues.register(name)
|
58
|
-
end
|
59
54
|
end
|
60
55
|
end
|
61
56
|
|
data/lib/sucker_punch/railtie.rb
CHANGED
data/lib/sucker_punch/version.rb
CHANGED
@@ -11,6 +11,10 @@ describe SuckerPunch::Queue do
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
after :each do
|
15
|
+
Celluloid::Actor.clear_registry
|
16
|
+
end
|
17
|
+
|
14
18
|
describe "#find" do
|
15
19
|
it "returns the Celluloid Actor from the registry" do
|
16
20
|
SuckerPunch::Queue.new(FakeJob).register
|
@@ -33,17 +37,11 @@ describe SuckerPunch::Queue do
|
|
33
37
|
expect(Celluloid::Actor[:fake_job]).to eq(pool)
|
34
38
|
end
|
35
39
|
|
36
|
-
it "registers the pool with Celluloid" do
|
40
|
+
it "registers the pool with Celluloid and 3 workers" do
|
37
41
|
pool = queue.register(3)
|
38
42
|
expect(Celluloid::Actor[:fake_job].size).to eq(3)
|
39
43
|
end
|
40
44
|
|
41
|
-
it "registers with master list of queues" do
|
42
|
-
queue.register
|
43
|
-
queues = SuckerPunch::Queues.all
|
44
|
-
expect(queues.size).to be(1)
|
45
|
-
end
|
46
|
-
|
47
45
|
context "when too many workers are specified" do
|
48
46
|
it "raises a MaxWorkersExceeded exception" do
|
49
47
|
expect{ queue.register(101) }.to raise_error(SuckerPunch::Queue::MaxWorkersExceeded)
|
data/sucker_punch.gemspec
CHANGED
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sucker_punch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Hilkert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: celluloid
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.15.
|
61
|
+
version: 0.15.2
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.15.
|
68
|
+
version: 0.15.2
|
69
69
|
description: Asynchronous processing library for Ruby
|
70
70
|
email:
|
71
71
|
- brandonhilkert@gmail.com
|
@@ -73,8 +73,8 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
-
- .gitignore
|
77
|
-
- .travis.yml
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
78
78
|
- CHANGES.md
|
79
79
|
- Gemfile
|
80
80
|
- LICENSE.txt
|
@@ -150,17 +150,17 @@ require_paths:
|
|
150
150
|
- lib
|
151
151
|
required_ruby_version: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- -
|
153
|
+
- - ">="
|
154
154
|
- !ruby/object:Gem::Version
|
155
155
|
version: '0'
|
156
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - ">="
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
requirements: []
|
162
162
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.2.2
|
164
164
|
signing_key:
|
165
165
|
specification_version: 4
|
166
166
|
summary: Sucker Punch is a Ruby asynchronous processing using Celluloid, heavily influenced
|