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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0666812a472f98087bf90ff23f4420b0ba78bb9
4
- data.tar.gz: fe0c97e16e371afed0895bc8560d77503c2c8962
3
+ metadata.gz: 17dbef4b25b83a6c3529947b5fabf45ff89e868d
4
+ data.tar.gz: aab8f0e8521732396865abbcb5394ad6e21ed317
5
5
  SHA512:
6
- metadata.gz: ee9e3b82feb7124d3ef165c632c0b2078d22be7939bb2eaef7da036812859a13529f08c09b2b6c1b0eccf24f1c06ed6be9310415e894d59d1363d7574ce5764f
7
- data.tar.gz: 65b44b013c44cf6521ab9cb6a4d21095d6475ba2cf8bb196436807ec0269fe56ef3e6ddd7a3d0efd0cdf04c2408f06fdea89688aea1da12ef1e609d413f2eed2
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
@@ -37,7 +37,7 @@ module Shoryuken
37
37
  return sleep(MIN_DISPATCH_INTERVAL)
38
38
  end
39
39
 
40
- fire_event(:dispatch)
40
+ fire_event(:dispatch, false, queue_name: queue.name)
41
41
 
42
42
  logger.debug { "Ready: #{ready}, Busy: #{busy}, Active Queues: #{@polling_strategy.active_queues}" }
43
43
 
@@ -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)
@@ -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}"
@@ -1,3 +1,3 @@
1
1
  module Shoryuken
2
- VERSION = '3.1.8'.freeze
2
+ VERSION = '3.1.9'.freeze
3
3
  end
@@ -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, 'Pablo', recorder
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[Pablo before], %w[Pablo after]]
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, 'Pablo', recorder
52
+ subject.add CustomMiddleware, 'custom', recorder
41
53
 
42
54
  final_action = nil
43
55
  subject.invoke { final_action = true }
@@ -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[queue1 queue1 queue2 queue3 queue4 queue4 queue4]
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.8
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-17 00:00:00.000000000 Z
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.8
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