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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d1ad1d63b7ed4f72b139aa1ac53e7a3b96d38d4
4
- data.tar.gz: 9f79851dc5d9b034045b33219c189e9de34b8235
3
+ metadata.gz: 5b8d0356b4487f83cc96590083ef6b2bad2f3447
4
+ data.tar.gz: a6185ea7a90d54d4a0659b5ef97949b7927a3023
5
5
  SHA512:
6
- metadata.gz: 0b36eae7845325451d53887e2b9b0b8368a8257db7b85f1079f54848966c3814aa432cb7f84ac78f8ff474583286ea093cb6a11189b7f6c5273bd6528446f074
7
- data.tar.gz: 88c8086066a71273f1b03db80c5b883199b168d2132c94c5c4ef3ddf202297e0ab1458e58894936efd53785ed572c477258386952855d4c4a43993de5200e2de
6
+ metadata.gz: 78c89bcb6e6a36014204bc142f8e9d0c1f635bb4b8797833258952fe7472af3f0db6a2e8c40530b8e53507b537d8b4393e68d17e23a7528515413925c6498146
7
+ data.tar.gz: 87a6c97f24dd82c85a993dfb776b515dee02e21fa2f0f5d1a83d43ac05800224312dfcf90df3e336a7bd97cda69c7d69e33b153035169b886ff49536ba7f5720
data/.gitignore CHANGED
@@ -3,10 +3,10 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
- Gemfile.lock
7
6
  InstalledFiles
8
7
  _yardoc
9
8
  coverage
9
+ Gemfile.lock
10
10
  doc/
11
11
  lib/bundler/man
12
12
  pkg
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ spec/sidekiq.log
@@ -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,7 @@
1
+ module Sidekiq
2
+ module Promise
3
+ class RedisConnection < ::Sidekiq::RedisConnection
4
+ def self.log_info *_; end
5
+ end
6
+ end
7
+ end
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Promise
3
- VERSION = "0.2.2"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -14,19 +14,16 @@ module Sidekiq
14
14
  private
15
15
 
16
16
  def subscribe
17
- @redis = Sidekiq.redis_pool.checkout
18
- @redis.subscribe ::Sidekiq::Promise::Middleware::CHANNEL do |on|
19
- on.subscribe { queue_job }
20
- on.message do |channel,message|
21
- message = JSON.parse(message)
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
- @redis.unsubscribe
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
@@ -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.1'
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
- before(:all) { start_worker }
5
- after(:all) { kill_worker }
6
- after { clear_jobs }
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(:all) { start_worker }
5
- after(:all) { kill_worker }
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 'sidekiq/promise'
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, example_group: {
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 0 -r #{server_path}")
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.2.2
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: 2014-12-01 00:00:00.000000000 Z
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.1
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.1
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.2.2
233
+ rubygems_version: 2.4.6
218
234
  signing_key:
219
235
  specification_version: 4
220
236
  summary: Wrap Sidekiq jobs in promises