sidekiq-promise 0.2.2 → 0.3.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/.gitignore +2 -1
- data/lib/sidekiq/promise.rb +6 -0
- data/lib/sidekiq/promise/middleware.rb +4 -4
- data/lib/sidekiq/promise/redis_connection.rb +7 -0
- data/lib/sidekiq/promise/subscription.rb +40 -0
- data/lib/sidekiq/promise/version.rb +1 -1
- data/lib/sidekiq/promise/worker.rb +6 -9
- data/sidekiq-promise.gemspec +2 -2
- data/spec/acceptance/completing_job_spec.rb +3 -3
- data/spec/acceptance/promising_job_spec.rb +2 -4
- data/spec/lib/sidekiq/promise/server_middleware_spec.rb +2 -3
- data/spec/spec_helper.rb +4 -4
- data/spec/support/sidekiq_helpers.rb +2 -1
- metadata +21 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b8d0356b4487f83cc96590083ef6b2bad2f3447
|
4
|
+
data.tar.gz: a6185ea7a90d54d4a0659b5ef97949b7927a3023
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78c89bcb6e6a36014204bc142f8e9d0c1f635bb4b8797833258952fe7472af3f0db6a2e8c40530b8e53507b537d8b4393e68d17e23a7528515413925c6498146
|
7
|
+
data.tar.gz: 87a6c97f24dd82c85a993dfb776b515dee02e21fa2f0f5d1a83d43ac05800224312dfcf90df3e336a7bd97cda69c7d69e33b153035169b886ff49536ba7f5720
|
data/.gitignore
CHANGED
data/lib/sidekiq/promise.rb
CHANGED
@@ -2,6 +2,8 @@ require "sidekiq/promise/version"
|
|
2
2
|
require 'sidekiq'
|
3
3
|
require 'json'
|
4
4
|
require 'mr_darcy'
|
5
|
+
require 'sidekiq/promise/redis_connection'
|
6
|
+
require 'sidekiq/promise/subscription'
|
5
7
|
require 'sidekiq/promise/middleware'
|
6
8
|
require 'sidekiq/promise/client_middleware'
|
7
9
|
require 'sidekiq/promise/server_middleware'
|
@@ -40,6 +42,10 @@ module Sidekiq
|
|
40
42
|
end
|
41
43
|
end
|
42
44
|
end
|
45
|
+
|
46
|
+
def redis_pool
|
47
|
+
@redis_pool ||= Sidekiq::Promise::RedisConnection.create
|
48
|
+
end
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
@@ -4,19 +4,19 @@ module Sidekiq
|
|
4
4
|
|
5
5
|
CHANNEL = '/sidekiq_jobs'
|
6
6
|
|
7
|
-
def job_enqueued job, redis_pool=Sidekiq.redis_pool
|
7
|
+
def job_enqueued job, redis_pool=Sidekiq::Promise.redis_pool
|
8
8
|
publish_message redis_pool, status: 'enqueued', job: job, jid: job['jid']
|
9
9
|
end
|
10
10
|
|
11
|
-
def job_dequeued job, redis_pool=Sidekiq.redis_pool
|
11
|
+
def job_dequeued job, redis_pool=Sidekiq::Promise.redis_pool
|
12
12
|
publish_message redis_pool, status: 'dequeued', job: job, jid: job['jid']
|
13
13
|
end
|
14
14
|
|
15
|
-
def job_completed job, result=nil, redis_pool=Sidekiq.redis_pool
|
15
|
+
def job_completed job, result=nil, redis_pool=Sidekiq::Promise.redis_pool
|
16
16
|
publish_message redis_pool, status: 'complete', job: job, jid: job['jid'], result: result
|
17
17
|
end
|
18
18
|
|
19
|
-
def job_errored job, e, redis_pool=Sidekiq.redis_pool
|
19
|
+
def job_errored job, e, redis_pool=Sidekiq::Promise.redis_pool
|
20
20
|
publish_message redis_pool, status: 'error', job: job, exception: {class: e.class.to_s, message: e.message, backtrace: e.backtrace}, jid: job['jid']
|
21
21
|
end
|
22
22
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Sidekiq
|
2
|
+
module Promise
|
3
|
+
class Subscription
|
4
|
+
class << self
|
5
|
+
def subscribe &block
|
6
|
+
subscriptions << block
|
7
|
+
block
|
8
|
+
end
|
9
|
+
|
10
|
+
def unsubscribe id
|
11
|
+
subscriptions.delete id
|
12
|
+
end
|
13
|
+
|
14
|
+
def ready
|
15
|
+
@ready ||= MrDarcy.promise do |promise|
|
16
|
+
Sidekiq::Promise.redis_pool.with do |redis|
|
17
|
+
redis.subscribe Sidekiq::Promise::Middleware::CHANNEL do |on|
|
18
|
+
on.subscribe do
|
19
|
+
promise.resolve true
|
20
|
+
end
|
21
|
+
on.message do |channel,message|
|
22
|
+
message = JSON.parse(message)
|
23
|
+
subscriptions.each do |block|
|
24
|
+
block.call message
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def subscriptions
|
35
|
+
@subscriptions ||= []
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -14,19 +14,16 @@ module Sidekiq
|
|
14
14
|
private
|
15
15
|
|
16
16
|
def subscribe
|
17
|
-
@
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
process_message message if applicable? message
|
23
|
-
end
|
17
|
+
@subscription_id = Sidekiq::Promise::Subscription.subscribe do |message|
|
18
|
+
process_message message if applicable? message
|
19
|
+
end
|
20
|
+
Sidekiq::Promise::Subscription.ready.then do
|
21
|
+
queue_job
|
24
22
|
end
|
25
23
|
end
|
26
24
|
|
27
25
|
def unsubscribe
|
28
|
-
|
29
|
-
Sidekiq.redis_pool.checkin
|
26
|
+
Sidekiq::Promise::Subscription.unsubscribe @subscription_id if @subscription_id
|
30
27
|
end
|
31
28
|
|
32
29
|
def queue_job
|
data/sidekiq-promise.gemspec
CHANGED
@@ -19,11 +19,11 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
-
%w| rake rspec guard guard-rspec guard-bundler terminal-notifier-guard
|
22
|
+
%w| rake rspec rspec-its guard guard-rspec guard-bundler terminal-notifier-guard
|
23
23
|
pry |.each do |gem|
|
24
24
|
spec.add_development_dependency gem
|
25
25
|
end
|
26
26
|
|
27
|
-
spec.add_dependency 'sidekiq', '>= 3.0
|
27
|
+
spec.add_dependency 'sidekiq', '>= 3.4.0'
|
28
28
|
spec.add_dependency 'mr_darcy', '>= 0.4.0'
|
29
29
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Completing job as promise' do
|
4
|
-
|
5
|
-
|
6
|
-
after
|
4
|
+
|
5
|
+
before { start_worker }
|
6
|
+
after { kill_worker; clear_jobs }
|
7
7
|
|
8
8
|
let(:promise) { SleepyWorker.as_promise(0.1) }
|
9
9
|
subject { promise }
|
@@ -1,10 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Promising job as promise' do
|
4
|
-
before
|
5
|
-
after
|
6
|
-
before { clear_jobs }
|
7
|
-
after { clear_jobs }
|
4
|
+
before { start_worker }
|
5
|
+
after { kill_worker; clear_jobs }
|
8
6
|
|
9
7
|
let(:promise) { PromisingWorker.as_promise }
|
10
8
|
subject { promise }
|
@@ -10,8 +10,7 @@ describe Sidekiq::Promise::ServerMiddleware do
|
|
10
10
|
When 'the job is successful' do
|
11
11
|
it 'dequeues the job, then yields, then completes' do
|
12
12
|
expect(middleware).to receive(:job_dequeued).with(job)
|
13
|
-
expect(middleware).to receive(:job_completed).with(job,
|
14
|
-
# ↓ [[]] is returned by RSpec's block probe. ↑
|
13
|
+
expect(middleware).to receive(:job_completed).with(job, nil)
|
15
14
|
expect { |b| middleware.call(worker, job, queue, &b) }.to yield_control
|
16
15
|
end
|
17
16
|
end
|
@@ -23,7 +22,7 @@ describe Sidekiq::Promise::ServerMiddleware do
|
|
23
22
|
expect(middleware).to receive(:job_errored).with(job, exception)
|
24
23
|
expect do
|
25
24
|
middleware.call(worker,job,queue) { raise exception }
|
26
|
-
end.to raise_error
|
25
|
+
end.to raise_error(RuntimeError)
|
27
26
|
end
|
28
27
|
end
|
29
28
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'rspec/its'
|
2
2
|
require 'mr_darcy'
|
3
|
+
MrDarcy.driver = :celluloid
|
4
|
+
require 'sidekiq/promise'
|
3
5
|
require 'pry'
|
4
6
|
|
5
7
|
Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |f| require f }
|
@@ -8,7 +10,5 @@ Dir[File.expand_path('../workers/**/*.rb', __FILE__)].each { |f| require f }
|
|
8
10
|
RSpec.configure do |config|
|
9
11
|
config.formatter = :documentation
|
10
12
|
config.extend ContextHelpers
|
11
|
-
config.include SidekiqHelpers,
|
12
|
-
file_path: %r(spec/acceptance)
|
13
|
-
}
|
13
|
+
config.include SidekiqHelpers, file_path: %r(spec/acceptance)
|
14
14
|
end
|
@@ -3,8 +3,9 @@ require 'sidekiq/api'
|
|
3
3
|
module SidekiqHelpers
|
4
4
|
def start_worker
|
5
5
|
return if @worker_pid
|
6
|
+
sidekiq_log = File.expand_path('../../sidekiq.log', __FILE__)
|
6
7
|
server_path = File.expand_path('../../spec_server.rb', __FILE__)
|
7
|
-
@worker_pid = Process.spawn("bundle exec sidekiq -t
|
8
|
+
@worker_pid = Process.spawn("bundle exec sidekiq -t 1 -L #{sidekiq_log} -r #{server_path}", out: "/dev/null")
|
8
9
|
end
|
9
10
|
|
10
11
|
def kill_worker
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-promise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Harton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-its
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: guard
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,14 +142,14 @@ dependencies:
|
|
128
142
|
requirements:
|
129
143
|
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: 3.0
|
145
|
+
version: 3.4.0
|
132
146
|
type: :runtime
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: 3.0
|
152
|
+
version: 3.4.0
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: mr_darcy
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -167,7 +181,9 @@ files:
|
|
167
181
|
- lib/sidekiq/promise.rb
|
168
182
|
- lib/sidekiq/promise/client_middleware.rb
|
169
183
|
- lib/sidekiq/promise/middleware.rb
|
184
|
+
- lib/sidekiq/promise/redis_connection.rb
|
170
185
|
- lib/sidekiq/promise/server_middleware.rb
|
186
|
+
- lib/sidekiq/promise/subscription.rb
|
171
187
|
- lib/sidekiq/promise/version.rb
|
172
188
|
- lib/sidekiq/promise/worker.rb
|
173
189
|
- sidekiq-promise.gemspec
|
@@ -214,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
230
|
version: '0'
|
215
231
|
requirements: []
|
216
232
|
rubyforge_project:
|
217
|
-
rubygems_version: 2.
|
233
|
+
rubygems_version: 2.4.6
|
218
234
|
signing_key:
|
219
235
|
specification_version: 4
|
220
236
|
summary: Wrap Sidekiq jobs in promises
|