shoryuken 3.1.8 → 3.1.9
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/CHANGELOG.md +8 -0
- data/lib/shoryuken/manager.rb +1 -1
- data/lib/shoryuken/middleware/chain.rb +4 -0
- data/lib/shoryuken/util.rb +2 -2
- data/lib/shoryuken/version.rb +1 -1
- data/spec/shoryuken/manager_spec.rb +2 -2
- data/spec/shoryuken/middleware/chain_spec.rb +16 -4
- data/spec/shoryuken/util_spec.rb +25 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17dbef4b25b83a6c3529947b5fabf45ff89e868d
|
4
|
+
data.tar.gz: aab8f0e8521732396865abbcb5394ad6e21ed317
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54c17164557879edcc48b053dad99009989a7be515a0d8e38bd7eb47e95d5f7629389a54d92dfa137494966168d0e34a2a95f1c6e3ee29ff6950bdd8f970bf96
|
7
|
+
data.tar.gz: eca828404986cc2aa5dcf22f01ccb3552591f676c299efac6139ce46dfc9f078d8fcdc1d4dbc5c0269361929f1b0673084733c09fbd23ded26c11142605cb7d4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [v3.1.9] - 2017-08-24
|
2
|
+
|
3
|
+
- Add support for dispatch fire event
|
4
|
+
- [#426](https://github.com/phstc/shoryuken/pull/426)
|
5
|
+
|
6
|
+
- Add support for adding a middleware to the front of chain
|
7
|
+
- [#427](https://github.com/phstc/shoryuken/pull/427)
|
8
|
+
|
1
9
|
## [v3.1.8] - 2017-08-17
|
2
10
|
|
3
11
|
- Make Polling strategy backward compatibility
|
data/lib/shoryuken/manager.rb
CHANGED
@@ -61,6 +61,10 @@ module Shoryuken
|
|
61
61
|
entries << Entry.new(klass, *args) unless exists?(klass)
|
62
62
|
end
|
63
63
|
|
64
|
+
def prepend(klass, *args)
|
65
|
+
entries.insert(0, Entry.new(klass, *args)) unless exists?(klass)
|
66
|
+
end
|
67
|
+
|
64
68
|
def insert_before(oldklass, newklass, *args)
|
65
69
|
i = entries.index { |entry| entry.klass == newklass }
|
66
70
|
new_entry = i.nil? ? Entry.new(newklass, *args) : entries.delete_at(i)
|
data/lib/shoryuken/util.rb
CHANGED
@@ -4,13 +4,13 @@ module Shoryuken
|
|
4
4
|
Shoryuken.logger
|
5
5
|
end
|
6
6
|
|
7
|
-
def fire_event(event, reverse = false)
|
7
|
+
def fire_event(event, reverse = false, event_options = {})
|
8
8
|
logger.debug { "Firing '#{event}' lifecycle event" }
|
9
9
|
arr = Shoryuken.options[:lifecycle_events][event]
|
10
10
|
arr.reverse! if reverse
|
11
11
|
arr.each do |block|
|
12
12
|
begin
|
13
|
-
block.call
|
13
|
+
block.call(event_options)
|
14
14
|
rescue => ex
|
15
15
|
logger.warn(event: event)
|
16
16
|
logger.warn "#{ex.class.name}: #{ex.message}"
|
data/lib/shoryuken/version.rb
CHANGED
@@ -70,7 +70,7 @@ RSpec.describe Shoryuken::Manager do
|
|
70
70
|
q = Shoryuken::Polling::QueueConfiguration.new(queue, {})
|
71
71
|
|
72
72
|
expect(fetcher).to receive(:fetch).with(q, concurrency).and_return(messages)
|
73
|
-
expect(subject).to receive(:fire_event).with(:dispatch)
|
73
|
+
expect(subject).to receive(:fire_event).with(:dispatch, false, queue_name: q.name)
|
74
74
|
expect(Shoryuken::Processor).to receive(:process).with(q, message)
|
75
75
|
expect(Shoryuken.logger).to_not receive(:info)
|
76
76
|
|
@@ -83,7 +83,7 @@ RSpec.describe Shoryuken::Manager do
|
|
83
83
|
q = Shoryuken::Polling::QueueConfiguration.new(queue, {})
|
84
84
|
|
85
85
|
expect(fetcher).to receive(:fetch).with(q, described_class::BATCH_LIMIT).and_return(messages)
|
86
|
-
expect(subject).to receive(:fire_event).with(:dispatch)
|
86
|
+
expect(subject).to receive(:fire_event).with(:dispatch, false, queue_name: q.name)
|
87
87
|
allow(subject).to receive(:batched_queue?).with(q).and_return(true)
|
88
88
|
expect(Shoryuken::Processor).to receive(:process).with(q, messages)
|
89
89
|
expect(Shoryuken.logger).to_not receive(:info)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Shoryuken::Middleware::Chain do
|
3
|
+
RSpec.describe Shoryuken::Middleware::Chain do
|
4
4
|
class CustomMiddleware
|
5
5
|
def initialize(name, recorder)
|
6
6
|
@name = name
|
@@ -14,20 +14,32 @@ describe Shoryuken::Middleware::Chain do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
class CustomMiddlewareB < CustomMiddleware; end
|
18
|
+
|
17
19
|
it 'supports custom middleware' do
|
18
20
|
subject.add CustomMiddleware, 1, []
|
19
21
|
|
20
22
|
expect(CustomMiddleware).to eq subject.entries.last.klass
|
21
23
|
end
|
22
24
|
|
25
|
+
it 'can add middleware to the front of chain' do
|
26
|
+
subject.prepend CustomMiddleware, 1, []
|
27
|
+
|
28
|
+
expect([CustomMiddleware]).to eq subject.entries.map(&:klass)
|
29
|
+
|
30
|
+
subject.prepend CustomMiddlewareB, 1, []
|
31
|
+
|
32
|
+
expect([CustomMiddlewareB, CustomMiddleware]).to eq subject.entries.map(&:klass)
|
33
|
+
end
|
34
|
+
|
23
35
|
it 'invokes a middleware' do
|
24
36
|
recorder = []
|
25
|
-
subject.add CustomMiddleware, '
|
37
|
+
subject.add CustomMiddleware, 'custom', recorder
|
26
38
|
|
27
39
|
final_action = nil
|
28
40
|
subject.invoke { final_action = true }
|
29
41
|
expect(final_action).to eq true
|
30
|
-
expect(recorder).to eq [%w
|
42
|
+
expect(recorder).to eq [%w(custom before), %w(custom after)]
|
31
43
|
end
|
32
44
|
|
33
45
|
class NonYieldingMiddleware
|
@@ -37,7 +49,7 @@ describe Shoryuken::Middleware::Chain do
|
|
37
49
|
it 'allows middleware to abruptly stop processing rest of chain' do
|
38
50
|
recorder = []
|
39
51
|
subject.add NonYieldingMiddleware
|
40
|
-
subject.add CustomMiddleware, '
|
52
|
+
subject.add CustomMiddleware, 'custom', recorder
|
41
53
|
|
42
54
|
final_action = nil
|
43
55
|
subject.invoke { final_action = true }
|
data/spec/shoryuken/util_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe 'Shoryuken::Util' do
|
|
9
9
|
|
10
10
|
describe '#unparse_queues' do
|
11
11
|
it 'returns queues and weights' do
|
12
|
-
queues = %w
|
12
|
+
queues = %w(queue1 queue1 queue2 queue3 queue4 queue4 queue4)
|
13
13
|
|
14
14
|
expect(subject.unparse_queues(queues)).to eq([['queue1', 2], ['queue2', 1], ['queue3', 1], ['queue4', 3]])
|
15
15
|
end
|
@@ -26,4 +26,28 @@ describe 'Shoryuken::Util' do
|
|
26
26
|
|
27
27
|
it 'returns ActiveJob worker name'
|
28
28
|
end
|
29
|
+
|
30
|
+
describe '#fire_event' do
|
31
|
+
let(:value_holder) { Object.new }
|
32
|
+
let(:callback_without_options) { proc { value_holder.value = :without_options } }
|
33
|
+
let(:callback_with_options) { proc { |options| value_holder.value = [:with_options, options] } }
|
34
|
+
|
35
|
+
after :all do
|
36
|
+
Shoryuken.options[:lifecycle_events].delete(:some_event)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'triggers callbacks that do not accept arguments' do
|
40
|
+
Shoryuken.options[:lifecycle_events][:some_event] = [callback_without_options]
|
41
|
+
|
42
|
+
expect(value_holder).to receive(:value=).with(:without_options)
|
43
|
+
subject.fire_event(:some_event)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'triggers callbacks that accept an argument' do
|
47
|
+
Shoryuken.options[:lifecycle_events][:some_event] = [callback_with_options]
|
48
|
+
|
49
|
+
expect(value_holder).to receive(:value=).with([:with_options, { my_option: :some_option }])
|
50
|
+
subject.fire_event(:some_event, false, my_option: :some_option)
|
51
|
+
end
|
52
|
+
end
|
29
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shoryuken
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Cantero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -220,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
220
|
version: '0'
|
221
221
|
requirements: []
|
222
222
|
rubyforge_project:
|
223
|
-
rubygems_version: 2.6.
|
223
|
+
rubygems_version: 2.6.11
|
224
224
|
signing_key:
|
225
225
|
specification_version: 4
|
226
226
|
summary: Shoryuken is a super efficient AWS SQS thread based message processor
|