sucker_punch 1.0.0.beta → 1.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d30899558c37fb7f4f048e63520446ab0713746e
4
- data.tar.gz: d1d3aa2d0e641b78b30c17fc49f48ddab368cbb9
3
+ metadata.gz: f9d68b7c7b9b1609f465227f56920578ca0cd037
4
+ data.tar.gz: 561bf68629e9c4fc95b3156d29c168e081f85bcf
5
5
  SHA512:
6
- metadata.gz: 2568a1953bedf82b39675ce6a4d55ec0d60266aaf5c6e5c7203b0ccd6cab8d4bdd9a5e393a4badd9e3bc6a4e75e7e320c8657ce548828c617da2b2b755d1e292
7
- data.tar.gz: 4b9355da76ac828677c9081330e64c48b9c85618f466c4b3149afc47233e3b163b2b9a7871dbb9b781efe3abd3eb8d00e67d83d7bf3161997dfebffc0c620391
6
+ metadata.gz: 04688497fae792eb3bedd54c34261848632e18b956e2fe3fb539e4c9fee229a2c062745eede2f99359c3723b00eded0f065d4965597609a750125151f46d534a
7
+ data.tar.gz: 7b579b1302292f6d36848f7a805dbe47d4b0521892b8b892d8821b2cdf7d46497b5a42450dfdb9c07459fdd9db90ddeb63a2a622c00bc8bf4ab591055d900404
data/CHANGES.md CHANGED
@@ -1,4 +1,9 @@
1
- 1.0.0.pre
1
+ 1.0.0.beta2
2
+ --------
3
+
4
+ - Add `workers` method to job to specify number of Celluloid pool workers
5
+
6
+ 1.0.0.beta
2
7
  --------
3
8
 
4
9
  - Removed the need for a configuration initializer
data/README.md CHANGED
@@ -86,6 +86,22 @@ class AwesomeJob
86
86
  end
87
87
  ```
88
88
 
89
+ The number of workers that get created can be set from the Job using the `workers` method:
90
+
91
+
92
+ ```Ruby
93
+ class LogJob
94
+ include SuckerPunch::Job
95
+ workers 4
96
+
97
+ def perform(event)
98
+ Log.new(event).track
99
+ end
100
+ end
101
+ ```
102
+
103
+ If the `workers` method is not set, it is by default set to 2.
104
+
89
105
  ## Logger
90
106
 
91
107
  ```Ruby
@@ -5,15 +5,21 @@ module SuckerPunch
5
5
  base.extend(ClassMethods)
6
6
 
7
7
  base.class_eval do
8
+ @workers = SuckerPunch::Queue::DEFAULT_OPTIONS[:workers]
9
+
8
10
  def self.new
9
- define_celluloid_pool(self)
11
+ define_celluloid_pool(self, @workers)
10
12
  end
11
13
  end
12
14
  end
13
15
 
14
16
  module ClassMethods
15
- def define_celluloid_pool(klass)
16
- SuckerPunch::Queue.new(klass).register
17
+ def workers(num)
18
+ @workers = num
19
+ end
20
+
21
+ def define_celluloid_pool(klass, workers)
22
+ SuckerPunch::Queue.new(klass).register(workers)
17
23
  end
18
24
  end
19
25
 
@@ -5,6 +5,8 @@ module SuckerPunch
5
5
  attr_reader :klass
6
6
  attr_accessor :pool
7
7
 
8
+ DEFAULT_OPTIONS = { workers: 2 }
9
+
8
10
  def self.find(klass)
9
11
  queue = self.new(klass)
10
12
  Celluloid::Actor[queue.name]
@@ -16,10 +18,10 @@ module SuckerPunch
16
18
  @mutex = Mutex.new
17
19
  end
18
20
 
19
- def register
21
+ def register(workers = DEFAULT_OPTIONS[:workers] )
20
22
  @mutex.synchronize {
21
23
  unless registered?
22
- initialize_celluloid_pool
24
+ initialize_celluloid_pool(workers)
23
25
  register_celluloid_pool
24
26
  register_queue_with_master_list
25
27
  end
@@ -37,8 +39,8 @@ module SuckerPunch
37
39
 
38
40
  private
39
41
 
40
- def initialize_celluloid_pool
41
- self.pool = klass.send(:pool)
42
+ def initialize_celluloid_pool(workers)
43
+ self.pool = klass.send(:pool, { size: workers })
42
44
  end
43
45
 
44
46
  def register_celluloid_pool
@@ -1,3 +1,3 @@
1
1
  module SuckerPunch
2
- VERSION = "1.0.0.beta"
2
+ VERSION = "1.0.0.beta2"
3
3
  end
@@ -4,6 +4,7 @@ describe SuckerPunch::Job do
4
4
  before :each do
5
5
  class ::FakeJob
6
6
  include SuckerPunch::Job
7
+ workers 4
7
8
 
8
9
  def perform(name)
9
10
  "response #{name}"
@@ -11,24 +12,31 @@ describe SuckerPunch::Job do
11
12
  end
12
13
  end
13
14
 
15
+ after :each do
16
+ Celluloid::Actor.clear_registry
17
+ end
18
+
14
19
  it "includes Celluloid into requesting class when included" do
15
20
  FakeJob.should respond_to(:pool)
16
21
  end
17
22
 
18
- describe "#perform" do
19
- context "when pool hasn't been created" do
20
- it "creates pool and registers queue" do
21
- expect(Celluloid::Actor[:fake_job]).to eq(nil)
22
- expect(SuckerPunch::Queues.all).to eq([])
23
+ it "sets the pool size to 4" do
24
+ pool = FakeJob.new
25
+ expect(pool.size).to eq(4)
26
+ end
23
27
 
24
- # Don't use #async here b/c of a race condition
25
- # The expectation will run before the asynchronous
26
- # job is executed
27
- FakeJob.new.perform("test")
28
+ it "returns the same pool on each instantiation" do
29
+ pool = FakeJob.new
30
+ pool2 = FakeJob.new
31
+ expect(pool.thread).to eq(pool2.thread)
32
+ end
28
33
 
29
- expect(Celluloid::Actor[:fake_job]).to be
30
- expect(SuckerPunch::Queues.all).to eq([:fake_job])
31
- end
34
+ describe "when pool hasn't been created" do
35
+ it "registers queue" do
36
+ queue = stub("queue")
37
+ SuckerPunch::Queue.stub(new: queue)
38
+ queue.should_receive(:register).with(4)
39
+ pool = FakeJob.new
32
40
  end
33
41
  end
34
42
  end
@@ -33,6 +33,11 @@ describe SuckerPunch::Queue do
33
33
  expect(Celluloid::Actor[:fake_job]).to eq(pool)
34
34
  end
35
35
 
36
+ it "registers the pool with Celluloid" do
37
+ pool = queue.register(3)
38
+ expect(Celluloid::Actor[:fake_job].size).to eq(3)
39
+ end
40
+
36
41
  it "registers with master list of queues" do
37
42
  queue.register
38
43
  queues = SuckerPunch::Queues.all
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.0.0.beta
4
+ version: 1.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Hilkert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-02 00:00:00.000000000 Z
11
+ date: 2013-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec