shoryuken 3.2.3 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
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