sidekiq-promise 0.2.2 → 0.3.0

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: 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