shoryuken 3.2.3 → 3.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.
Files changed (53) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +89 -23
  3. data/CHANGELOG.md +14 -0
  4. data/Gemfile +4 -0
  5. data/Rakefile +1 -1
  6. data/bin/cli/base.rb +0 -1
  7. data/bin/cli/sqs.rb +3 -3
  8. data/bin/shoryuken +3 -9
  9. data/examples/bootstrap_queues.rb +3 -3
  10. data/examples/default_worker.rb +1 -1
  11. data/lib/shoryuken.rb +0 -1
  12. data/lib/shoryuken/core_ext.rb +1 -1
  13. data/lib/shoryuken/extensions/active_job_adapter.rb +1 -1
  14. data/lib/shoryuken/fetcher.rb +3 -3
  15. data/lib/shoryuken/logging.rb +1 -1
  16. data/lib/shoryuken/middleware/server/active_record.rb +1 -1
  17. data/lib/shoryuken/middleware/server/auto_delete.rb +1 -1
  18. data/lib/shoryuken/middleware/server/auto_extend_visibility.rb +1 -1
  19. data/lib/shoryuken/middleware/server/exponential_backoff_retry.rb +1 -1
  20. data/lib/shoryuken/middleware/server/timing.rb +12 -14
  21. data/lib/shoryuken/polling/base.rb +1 -1
  22. data/lib/shoryuken/polling/strict_priority.rb +8 -8
  23. data/lib/shoryuken/queue.rb +3 -3
  24. data/lib/shoryuken/runner.rb +9 -3
  25. data/lib/shoryuken/version.rb +1 -1
  26. data/lib/shoryuken/worker/inline_executor.rb +12 -3
  27. data/lib/shoryuken/worker_registry.rb +4 -4
  28. data/shoryuken.gemspec +5 -5
  29. data/spec/integration/launcher_spec.rb +2 -2
  30. data/spec/shoryuken/body_parser_spec.rb +2 -2
  31. data/spec/shoryuken/client_spec.rb +1 -1
  32. data/spec/shoryuken/core_ext_spec.rb +6 -6
  33. data/spec/shoryuken/default_worker_registry_spec.rb +2 -4
  34. data/spec/shoryuken/environment_loader_spec.rb +4 -4
  35. data/spec/shoryuken/extensions/active_job_adapter_spec.rb +3 -3
  36. data/spec/shoryuken/manager_spec.rb +1 -1
  37. data/spec/shoryuken/middleware/chain_spec.rb +2 -2
  38. data/spec/shoryuken/middleware/server/auto_delete_spec.rb +9 -7
  39. data/spec/shoryuken/middleware/server/auto_extend_visibility_spec.rb +3 -3
  40. data/spec/shoryuken/middleware/server/exponential_backoff_retry_spec.rb +5 -3
  41. data/spec/shoryuken/options_spec.rb +5 -5
  42. data/spec/shoryuken/polling/strict_priority_spec.rb +1 -1
  43. data/spec/shoryuken/polling/weighted_round_robin_spec.rb +1 -1
  44. data/spec/shoryuken/processor_spec.rb +1 -1
  45. data/spec/shoryuken/queue_spec.rb +3 -3
  46. data/spec/shoryuken/util_spec.rb +1 -1
  47. data/spec/shoryuken/worker/default_executor_spec.rb +10 -5
  48. data/spec/shoryuken/worker/inline_executor_spec.rb +28 -2
  49. data/spec/shoryuken/worker_spec.rb +7 -9
  50. data/spec/spec_helper.rb +1 -1
  51. data/test_workers/endless_interruptive_worker.rb +2 -2
  52. data/test_workers/endless_uninterruptive_worker.rb +3 -3
  53. metadata +7 -7
@@ -121,10 +121,10 @@ RSpec.describe Shoryuken::Queue do
121
121
  it 'accepts SQS request parameters' do
122
122
  # https://docs.aws.amazon.com/sdkforruby/api/Aws/SQS/Client.html#send_message_batch-instance_method
123
123
  expect(sqs).to(
124
- receive(:send_message_batch).with(hash_including(entries: [{id: '0', message_body: 'msg1'}, {id: '1', message_body: 'msg2'}]))
124
+ receive(:send_message_batch).with(hash_including(entries: [{ id: '0', message_body: 'msg1' }, { id: '1', message_body: 'msg2' }]))
125
125
  )
126
126
 
127
- subject.send_messages(entries: [{id: '0', message_body: 'msg1'}, {id: '1', message_body: 'msg2'}])
127
+ subject.send_messages(entries: [{ id: '0', message_body: 'msg1' }, { id: '1', message_body: 'msg2' }])
128
128
  end
129
129
 
130
130
  it 'accepts an array of messages' do
@@ -188,7 +188,7 @@ RSpec.describe Shoryuken::Queue do
188
188
  )
189
189
  )
190
190
 
191
- subject.send_messages(%w(msg1 msg2))
191
+ subject.send_messages(%w[msg1 msg2])
192
192
  end
193
193
  end
194
194
 
@@ -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
@@ -18,7 +18,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
18
18
  }
19
19
  },
20
20
  message_body: 'message',
21
- delay_seconds: 60)
21
+ delay_seconds: 60
22
+ )
22
23
 
23
24
  TestWorker.perform_in(60, 'message')
24
25
  end
@@ -40,7 +41,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
40
41
  }
41
42
  },
42
43
  message_body: 'message',
43
- delay_seconds: 60)
44
+ delay_seconds: 60
45
+ )
44
46
 
45
47
  TestWorker.perform_in(Time.now + 60, 'message')
46
48
  end
@@ -61,7 +63,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
61
63
  data_type: 'String'
62
64
  }
63
65
  },
64
- message_body: 'message')
66
+ message_body: 'message'
67
+ )
65
68
 
66
69
  TestWorker.perform_async('message')
67
70
  end
@@ -75,7 +78,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
75
78
  data_type: 'String'
76
79
  }
77
80
  },
78
- message_body: 'delayed message')
81
+ message_body: 'delayed message'
82
+ )
79
83
 
80
84
  TestWorker.perform_async('delayed message', delay_seconds: 60)
81
85
  end
@@ -92,7 +96,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
92
96
  data_type: 'String'
93
97
  }
94
98
  },
95
- message_body: 'delayed message')
99
+ message_body: 'delayed message'
100
+ )
96
101
 
97
102
  TestWorker.perform_async('delayed message', queue: new_queue)
98
103
  end
@@ -7,7 +7,7 @@ RSpec.describe Shoryuken::Worker::InlineExecutor do
7
7
 
8
8
  describe '.perform_async' do
9
9
  specify do
10
- expect_any_instance_of(TestWorker).to receive(:perform)
10
+ expect_any_instance_of(TestWorker).to receive(:perform).with(anything, 'test')
11
11
 
12
12
  TestWorker.perform_async('test')
13
13
  end
@@ -15,9 +15,35 @@ RSpec.describe Shoryuken::Worker::InlineExecutor do
15
15
 
16
16
  describe '.perform_in' do
17
17
  specify do
18
- expect_any_instance_of(TestWorker).to receive(:perform)
18
+ expect_any_instance_of(TestWorker).to receive(:perform).with(anything, 'test')
19
19
 
20
20
  TestWorker.perform_in(60, 'test')
21
21
  end
22
22
  end
23
+
24
+ context 'batch' do
25
+ before do
26
+ TestWorker.get_shoryuken_options['batch'] = true
27
+ end
28
+
29
+ after do
30
+ TestWorker.get_shoryuken_options['batch'] = false
31
+ end
32
+
33
+ describe '.perform_async' do
34
+ specify do
35
+ expect_any_instance_of(TestWorker).to receive(:perform).with(anything, ['test'])
36
+
37
+ TestWorker.perform_async('test')
38
+ end
39
+ end
40
+
41
+ describe '.perform_in' do
42
+ specify do
43
+ expect_any_instance_of(TestWorker).to receive(:perform).with(anything, ['test'])
44
+
45
+ TestWorker.perform_in(60, 'test')
46
+ end
47
+ end
48
+ end
23
49
  end
@@ -19,7 +19,7 @@ RSpec.describe Shoryuken::Worker do
19
19
  class NewTestWorker
20
20
  include Shoryuken::Worker
21
21
 
22
- shoryuken_options queue: ->{ "#{$queue_prefix}_default" }
22
+ shoryuken_options queue: -> { "#{$queue_prefix}_default" }
23
23
  end
24
24
 
25
25
  expect(Shoryuken.worker_registry.workers('production_default')).to eq([NewTestWorker])
@@ -30,7 +30,7 @@ RSpec.describe Shoryuken::Worker do
30
30
  class TestWorker
31
31
  include Shoryuken::Worker
32
32
 
33
- OPT = { queue: :default }
33
+ OPT = { queue: :default }.freeze
34
34
 
35
35
  shoryuken_options OPT
36
36
  end
@@ -93,15 +93,15 @@ RSpec.describe Shoryuken::Worker do
93
93
  class ParentWorker
94
94
  include Shoryuken::Worker
95
95
 
96
- shoryuken_options queue: "myqueue", auto_delete: false
96
+ shoryuken_options queue: 'myqueue', auto_delete: false
97
97
  end
98
98
 
99
99
  class ChildWorker < ParentWorker
100
100
  shoryuken_options auto_delete: true
101
101
  end
102
102
 
103
- expect(ParentWorker.get_shoryuken_options['queue']).to eq("myqueue")
104
- expect(ChildWorker.get_shoryuken_options['queue']).to eq("myqueue")
103
+ expect(ParentWorker.get_shoryuken_options['queue']).to eq('myqueue')
104
+ expect(ChildWorker.get_shoryuken_options['queue']).to eq('myqueue')
105
105
  expect(ParentWorker.get_shoryuken_options['auto_delete']).to eq(false)
106
106
  expect(ChildWorker.get_shoryuken_options['auto_delete']).to eq(true)
107
107
  end
@@ -110,7 +110,7 @@ RSpec.describe Shoryuken::Worker do
110
110
  describe '.server_middleware' do
111
111
  before do
112
112
  class FakeMiddleware
113
- def call(*args)
113
+ def call(*_args)
114
114
  yield
115
115
  end
116
116
  end
@@ -133,9 +133,7 @@ RSpec.describe Shoryuken::Worker do
133
133
  class NewTestWorker2
134
134
  include Shoryuken::Worker
135
135
 
136
- server_middleware do |chain|
137
- chain.clear
138
- end
136
+ server_middleware(&:clear)
139
137
  end
140
138
  end
141
139
 
@@ -13,7 +13,7 @@ if ENV['CODECLIMATE_REPO_TOKEN']
13
13
  SimpleCov.start
14
14
  end
15
15
 
16
- config_file = File.join(File.expand_path('../..', __FILE__), 'spec', 'shoryuken.yml')
16
+ config_file = File.join(File.expand_path('..', __dir__), 'spec', 'shoryuken.yml')
17
17
 
18
18
  Shoryuken::EnvironmentLoader.setup_options(config_file: config_file)
19
19
 
@@ -12,7 +12,7 @@ class EndlessInterruptiveWorker
12
12
  end
13
13
 
14
14
  def max_execution_time
15
- ENV["MAX_EXECUTION_TIME"] ? ENV["MAX_EXECUTION_TIME"].to_i : 100
15
+ ENV['MAX_EXECUTION_TIME'] ? ENV['MAX_EXECUTION_TIME'].to_i : 100
16
16
  end
17
17
 
18
18
  def rng
@@ -25,7 +25,7 @@ class EndlessInterruptiveWorker
25
25
  end
26
26
  end
27
27
 
28
- def perform(sqs_msg, body)
28
+ def perform(_sqs_msg, body)
29
29
  Shoryuken.logger.info("Received message: '#{body}'")
30
30
 
31
31
  execution_ms = self.class.random_number(self.class.max_execution_time)
@@ -12,7 +12,7 @@ class EndlessUninterruptiveWorker
12
12
  end
13
13
 
14
14
  def max_execution_time
15
- ENV["MAX_EXECUTION_TIME"] ? ENV["MAX_EXECUTION_TIME"].to_i : 100
15
+ ENV['MAX_EXECUTION_TIME'] ? ENV['MAX_EXECUTION_TIME'].to_i : 100
16
16
  end
17
17
 
18
18
  def rng
@@ -25,13 +25,13 @@ class EndlessUninterruptiveWorker
25
25
  end
26
26
  end
27
27
 
28
- def perform(sqs_msg, body)
28
+ def perform(_sqs_msg, body)
29
29
  Shoryuken.logger.info("Received message: #{body}")
30
30
 
31
31
  execution_ms = self.class.random_number(self.class.max_execution_time)
32
32
  Shoryuken.logger.info("Going to burn metal for #{execution_ms}ms")
33
33
  end_time = Time.now + execution_ms.to_f / 1000
34
- while Time.now < end_time do
34
+ while Time.now < end_time
35
35
  # burn metal
36
36
  end
37
37
 
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.2.3
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Cantero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-25 00:00:00.000000000 Z
11
+ date: 2018-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: dotenv
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: pry-byebug
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: pry-byebug
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: dotenv
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -228,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
228
  version: '0'
229
229
  requirements: []
230
230
  rubyforge_project:
231
- rubygems_version: 2.6.13
231
+ rubygems_version: 2.7.3
232
232
  signing_key:
233
233
  specification_version: 4
234
234
  summary: Shoryuken is a super efficient AWS SQS thread based message processor