shoryuken 5.0.0 → 5.0.5

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
  SHA256:
3
- metadata.gz: ce36f4dac1c75e383185df15db196aec57c968dda1a5823b8d944ad4a9675906
4
- data.tar.gz: a460a585e97a6c0a3432f6b28bec254d494900672a06bffbd7461e830a8de0cf
3
+ metadata.gz: c2a0f01f40da91819e9e8e0b127a2504fccdd927365866f7971a7df207cea287
4
+ data.tar.gz: 3da85303fc49af5b0ad06888d667bde14ef12b79c595c98cdc3232d085d08350
5
5
  SHA512:
6
- metadata.gz: 833bab295345b25456f617f36e4ec2f2cfd0d823a01ddb87d8f528597ab79b91ce0ae8c67b47ffc2a9d1400f0a5cf62df3125fbdfbb49abd3a5e4a5eb3b7b0ee
7
- data.tar.gz: 91a4355cd9e180f006e8768bde9627c1df9cf0057d294bdfcb422f479de2ef1784aa5b904c7b97dac8ed7bb7b9879bdea56eb4cd00d51ff456d3b4555f88c991
6
+ metadata.gz: 8a94cf02d3c7c25bf8282097449b83f1f4f3b4816b0e7be396048585ccc5667e9dcbdfe839f593c0ed04b2304fc1c0ca2d5d9564c86b854de63de6dafddc5de9
7
+ data.tar.gz: 20844e414f26d4a6a4e9d3db14bd4ea89bad4550486b91a1a1b8ba6eff2145e89fdf63007e356c707e54dbe8e0d1bb608844ec81db02516e84c4971633fd621d
@@ -0,0 +1,12 @@
1
+ # These are supported funding model platforms
2
+
3
+ github: phstc
4
+ patreon: # Replace with a single Patreon username
5
+ open_collective: # Replace with a single Open Collective username
6
+ ko_fi: # Replace with a single Ko-fi username
7
+ tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8
+ community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9
+ liberapay: # Replace with a single Liberapay username
10
+ issuehunt: # Replace with a single IssueHunt username
11
+ otechie: # Replace with a single Otechie username
12
+ custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
@@ -1,7 +1,7 @@
1
1
  AllCops:
2
2
  Exclude:
3
3
  - '**/Gemfile'
4
- TargetRubyVersion: 2.3
4
+ TargetRubyVersion: 2.4
5
5
 
6
6
  Metrics/PerceivedComplexity:
7
7
  Enabled: false
@@ -32,7 +32,7 @@ Style/Alias:
32
32
  Style/PerlBackrefs:
33
33
  Enabled: false
34
34
 
35
- Layout/TrailingBlankLines:
35
+ Layout/TrailingEmptyLines:
36
36
  Enabled: false
37
37
 
38
38
  # Override the HoundCI custom rules (they do not use Rubocop defaults)
@@ -76,7 +76,7 @@ Style/GuardClause:
76
76
  Style/RegexpLiteral:
77
77
  Enabled: false
78
78
 
79
- Lint/HandleExceptions:
79
+ Lint/SuppressedException:
80
80
  Enabled: false
81
81
 
82
82
  Lint/AssignmentInCondition:
@@ -117,6 +117,3 @@ Security/YAMLLoad:
117
117
 
118
118
  Naming/MemoizedInstanceVariableName:
119
119
  Enabled: false
120
-
121
- Performance/RedundantBlockCall:
122
- Enabled: false
@@ -1,10 +1,6 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.0.0
5
- - 2.1.10
6
- - 2.2.10
7
- - 2.3.8
8
4
  - 2.4.4
9
5
  - 2.5.1
10
6
  - 2.6.3
@@ -1,3 +1,29 @@
1
+ ## [v5.0.5] - 2020-06-07
2
+
3
+ - Add ability to configure queue by ARN
4
+ - [#603](https://github.com/phstc/shoryuken/pull/603)
5
+
6
+ ## [v5.0.4] - 2020-02-20
7
+
8
+ - Add endpoint option to SQS CLI
9
+ - [#595](https://github.com/phstc/shoryuken/pull/595)
10
+
11
+ ## [v5.0.3] - 2019-11-30
12
+
13
+ - Add support for sending messages asynchronous with Active Job using `shoryuken_concurrent_send`
14
+ - [#589](https://github.com/phstc/shoryuken/pull/589)
15
+ - [#588](https://github.com/phstc/shoryuken/pull/588)
16
+
17
+ ## [v5.0.2] - 2019-11-02
18
+
19
+ - Fix Queue order is reversed if passed through CLI
20
+ - [#571](https://github.com/phstc/shoryuken/pull/583)
21
+
22
+ ## [v5.0.1] - 2019-06-19
23
+
24
+ - Add back attr_accessor for `stop_callback`
25
+ - [#571](https://github.com/phstc/shoryuken/pull/571)
26
+
1
27
  ## [v5.0.0] - 2019-06-18
2
28
 
3
29
  - Fix bug where empty queues were not paused in batch processing mode
data/README.md CHANGED
@@ -21,7 +21,7 @@ Shoryuken _sho-ryu-ken_ is a super-efficient [Amazon SQS](https://aws.amazon.com
21
21
 
22
22
  ## Requirements
23
23
 
24
- Ruby 2.0 or greater.
24
+ Ruby 2.4 or greater.
25
25
 
26
26
  ## Installation
27
27
 
@@ -37,7 +37,7 @@ If you are using AWS SDK version 3, please also add this line:
37
37
  gem 'aws-sdk-sqs'
38
38
  ```
39
39
 
40
- The extra gem `aws-sdk-sqs` is required in order to keep Shoryuken compatible with AWS SDK version 2 and 3.
40
+ The extra gem `aws-sdk-sqs` is required in order to keep Shoryuken compatible with AWS SDK version 2 and 3.
41
41
 
42
42
  And then execute:
43
43
 
@@ -5,6 +5,7 @@ module Shoryuken
5
5
  module CLI
6
6
  class SQS < Base
7
7
  namespace :sqs
8
+ class_option :endpoint, aliases: '-e', type: :string, default: ENV['SHORYUKEN_SQS_ENDPOINT'], desc: 'Endpoint URL'
8
9
 
9
10
  no_commands do
10
11
  def normalize_dump_message(message)
@@ -19,8 +20,15 @@ module Shoryuken
19
20
  }
20
21
  end
21
22
 
23
+ def client_options
24
+ endpoint = options[:endpoint]
25
+ {}.tap do |hash|
26
+ hash[:endpoint] = endpoint unless endpoint.to_s.empty?
27
+ end
28
+ end
29
+
22
30
  def sqs
23
- @_sqs ||= Aws::SQS::Client.new
31
+ @_sqs ||= Aws::SQS::Client.new(client_options)
24
32
  end
25
33
 
26
34
  def find_queue_url(queue_name)
@@ -88,4 +88,7 @@ module Shoryuken
88
88
  )
89
89
  end
90
90
 
91
- require 'shoryuken/extensions/active_job_adapter' if Shoryuken.active_job?
91
+ if Shoryuken.active_job?
92
+ require 'shoryuken/extensions/active_job_adapter'
93
+ require 'shoryuken/extensions/active_job_concurrent_send_adapter'
94
+ end
@@ -1,7 +1,7 @@
1
1
  module Shoryuken
2
2
  class DefaultWorkerRegistry < WorkerRegistry
3
3
  def initialize
4
- @workers = {}
4
+ @workers = Concurrent::Hash.new
5
5
  end
6
6
 
7
7
  def batch_receive_messages?(queue)
@@ -20,7 +20,6 @@ module Shoryuken
20
20
  def setup_options
21
21
  initialize_options
22
22
  initialize_logger
23
- merge_cli_defined_queues
24
23
  end
25
24
 
26
25
  def load
@@ -76,17 +75,6 @@ module Shoryuken
76
75
  end
77
76
  end
78
77
 
79
- def merge_cli_defined_queues
80
- cli_defined_queues = options[:queues].to_a
81
-
82
- cli_defined_queues.each do |cli_defined_queue|
83
- # CLI defined queues override config_file defined queues
84
- Shoryuken.options[:queues].delete_if { |config_file_queue| config_file_queue[0] == cli_defined_queue[0] }
85
-
86
- Shoryuken.options[:queues] << cli_defined_queue
87
- end
88
- end
89
-
90
78
  def prefix_active_job_queue_name(queue_name, weight)
91
79
  queue_name_prefix = ::ActiveJob::Base.queue_name_prefix
92
80
  queue_name_delimiter = ::ActiveJob::Base.queue_name_delimiter
@@ -0,0 +1,50 @@
1
+ # ActiveJob docs: http://edgeguides.rubyonrails.org/active_job_basics.html
2
+ # Example adapters ref: https://github.com/rails/rails/tree/master/activejob/lib/active_job/queue_adapters
3
+ module ActiveJob
4
+ module QueueAdapters
5
+ # == Shoryuken concurrent adapter for Active Job
6
+ #
7
+ # This adapter sends messages asynchronously (ie non-blocking) and allows
8
+ # the caller to set up handlers for both success and failure
9
+ #
10
+ # To use this adapter, set up as:
11
+ #
12
+ # success_handler = ->(response, job, options) { StatsD.increment("#{job.class.name}.success") }
13
+ # error_handler = ->(err, job, options) { StatsD.increment("#{job.class.name}.failure") }
14
+ #
15
+ # adapter = ActiveJob::QueueAdapters::ShoryukenConcurrentSendAdapter.new(success_handler, error_handler)
16
+ #
17
+ # config.active_job.queue_adapter = adapter
18
+ class ShoryukenConcurrentSendAdapter < ShoryukenAdapter
19
+ def initialize(success_handler = nil, error_handler = nil)
20
+ @success_handler = success_handler
21
+ @error_handler = error_handler
22
+ end
23
+
24
+ def enqueue(job, options = {})
25
+ send_concurrently(job, options) { |f_job, f_options| super(f_job, f_options) }
26
+ end
27
+
28
+ def success_handler
29
+ @success_handler ||= ->(_send_message_response, _job, _options) { nil }
30
+ end
31
+
32
+ def error_handler
33
+ @error_handler ||= begin
34
+ lambda { |error, job, _options|
35
+ Shoryuken.logger.warn("Failed to enqueue job: #{job.inspect} due to error: #{error}")
36
+ }
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def send_concurrently(job, options)
43
+ Concurrent::Promises
44
+ .future(job, options) { |f_job, f_options| [yield(f_job, f_options), f_job, f_options] }
45
+ .then { |send_message_response, f_job, f_options| success_handler.call(send_message_response, f_job, f_options) }
46
+ .rescue(job, options) { |err, f_job, f_options| error_handler.call(err, f_job, f_options) }
47
+ end
48
+ end
49
+ end
50
+ end
@@ -14,9 +14,11 @@ module Shoryuken
14
14
  }
15
15
  }.freeze
16
16
 
17
- attr_accessor :active_job_queue_name_prefixing, :cache_visibility_timeout, :default_worker_options, :groups,
18
- :launcher_executor, :sqs_client, :sqs_client_receive_message_opts,
19
- :start_callback, :worker_executor, :worker_registry
17
+ attr_accessor :active_job_queue_name_prefixing, :cache_visibility_timeout, :groups,
18
+ :launcher_executor,
19
+ :start_callback, :stop_callback, :worker_executor, :worker_registry
20
+ attr_writer :default_worker_options, :sqs_client
21
+ attr_reader :sqs_client_receive_message_opts
20
22
 
21
23
  def initialize
22
24
  self.groups = {}
@@ -8,9 +8,9 @@ module Shoryuken
8
8
 
9
9
  attr_accessor :name, :client, :url
10
10
 
11
- def initialize(client, name_or_url)
11
+ def initialize(client, name_or_url_or_arn)
12
12
  self.client = client
13
- set_name_and_url(name_or_url)
13
+ set_name_and_url(name_or_url_or_arn)
14
14
  end
15
15
 
16
16
  def visibility_timeout
@@ -50,32 +50,60 @@ module Shoryuken
50
50
  # Make sure the memoization work with boolean to avoid multiple calls to SQS
51
51
  # see https://github.com/phstc/shoryuken/pull/529
52
52
  return @_fifo if defined?(@_fifo)
53
+
53
54
  @_fifo = queue_attributes.attributes[FIFO_ATTR] == 'true'
55
+ @_fifo
54
56
  end
55
57
 
56
58
  private
57
59
 
58
- def set_by_name(name)
60
+ def initialize_fifo_attribute
61
+ # calling fifo? will also initialize it
62
+ fifo?
63
+ end
64
+
65
+ def set_by_name(name) # rubocop:disable Naming/AccessorMethodName
59
66
  self.name = name
60
67
  self.url = client.get_queue_url(queue_name: name).queue_url
61
68
  end
62
69
 
63
- def set_by_url(url)
70
+ def set_by_url(url) # rubocop:disable Naming/AccessorMethodName
64
71
  self.name = url.split('/').last
65
72
  self.url = url
66
73
  end
67
74
 
68
- def set_name_and_url(name_or_url)
69
- if name_or_url.include?('://')
70
- set_by_url(name_or_url)
75
+ def arn_to_url(arn_str)
76
+ *, region, account_id, resource = arn_str.split(':')
77
+
78
+ required = [region, account_id, resource].map(&:to_s)
79
+ valid = required.none?(&:empty?)
80
+
81
+ abort "Invalid ARN: #{arn_str}. A valid ARN must include: region, account_id and resource." unless valid
82
+
83
+ "https://sqs.#{region}.amazonaws.com/#{account_id}/#{resource}"
84
+ end
85
+
86
+ def set_name_and_url(name_or_url_or_arn) # rubocop:disable Naming/AccessorMethodName
87
+ if name_or_url_or_arn.include?('://')
88
+ set_by_url(name_or_url_or_arn)
89
+
90
+ # anticipate the fifo? checker for validating the queue URL
91
+ initialize_fifo_attribute
92
+ return
93
+ end
94
+
95
+ if name_or_url_or_arn.start_with?('arn:')
96
+ url = arn_to_url(name_or_url_or_arn)
97
+ set_by_url(url)
71
98
 
72
99
  # anticipate the fifo? checker for validating the queue URL
73
- return fifo?
100
+ initialize_fifo_attribute
101
+ return
74
102
  end
75
103
 
76
- set_by_name(name_or_url)
77
- rescue Aws::Errors::NoSuchEndpointError, Aws::SQS::Errors::NonExistentQueue => ex
78
- raise ex, "The specified queue #{name_or_url} does not exist."
104
+ set_by_name(name_or_url_or_arn)
105
+ rescue Aws::Errors::NoSuchEndpointError, Aws::SQS::Errors::NonExistentQueue => e
106
+ raise e, "The specified queue #{name_or_url_or_arn} does not exist."
79
107
  end
80
108
 
81
109
  def queue_attributes
@@ -1,3 +1,3 @@
1
1
  module Shoryuken
2
- VERSION = '5.0.0'.freeze
2
+ VERSION = '5.0.5'.freeze
3
3
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ['lib']
19
19
 
20
20
  spec.add_development_dependency 'dotenv'
21
- spec.add_development_dependency 'pry-byebug'
21
+ spec.add_development_dependency 'pry-byebug', '3.9.0'
22
22
  spec.add_development_dependency 'rake'
23
23
  spec.add_development_dependency 'rspec'
24
24
 
@@ -0,0 +1,62 @@
1
+ # rubocop:disable Metrics/BlockLength
2
+ RSpec.shared_examples 'active_job_adapters' do
3
+ let(:job) { double 'Job', id: '123', queue_name: 'queue' }
4
+ let(:fifo) { false }
5
+ let(:queue) { double 'Queue', fifo?: fifo }
6
+
7
+ before do
8
+ allow(Shoryuken::Client).to receive(:queues).with(job.queue_name).and_return(queue)
9
+ allow(job).to receive(:serialize).and_return(
10
+ 'job_class' => 'Worker',
11
+ 'job_id' => job.id,
12
+ 'queue_name' => job.queue_name,
13
+ 'arguments' => nil,
14
+ 'locale' => nil
15
+ )
16
+ end
17
+
18
+ describe '#enqueue' do
19
+ specify do
20
+ expect(queue).to receive(:send_message) do |hash|
21
+ expect(hash[:message_deduplication_id]).to_not be
22
+ end
23
+ expect(Shoryuken).to receive(:register_worker).with(job.queue_name, described_class::JobWrapper)
24
+
25
+ subject.enqueue(job)
26
+ end
27
+
28
+ context 'when fifo' do
29
+ let(:fifo) { true }
30
+
31
+ it 'does not include job_id in the deduplication_id' do
32
+ expect(queue).to receive(:send_message) do |hash|
33
+ message_deduplication_id = Digest::SHA256.hexdigest(JSON.dump(job.serialize.except('job_id')))
34
+
35
+ expect(hash[:message_deduplication_id]).to eq(message_deduplication_id)
36
+ end
37
+ expect(Shoryuken).to receive(:register_worker).with(job.queue_name, described_class::JobWrapper)
38
+
39
+ subject.enqueue(job)
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '#enqueue_at' do
45
+ specify do
46
+ delay = 1
47
+
48
+ expect(queue).to receive(:send_message) do |hash|
49
+ expect(hash[:message_deduplication_id]).to_not be
50
+ expect(hash[:delay_seconds]).to eq(delay)
51
+ end
52
+
53
+ expect(Shoryuken).to receive(:register_worker).with(job.queue_name, described_class::JobWrapper)
54
+
55
+ # need to figure out what to require Time.current and N.minutes to remove the stub
56
+ allow(subject).to receive(:calculate_delay).and_return(delay)
57
+
58
+ subject.enqueue_at(job, nil)
59
+ end
60
+ end
61
+ end
62
+ # rubocop:enable Metrics/BlockLength
@@ -74,4 +74,28 @@ RSpec.describe Shoryuken::EnvironmentLoader do
74
74
  expect(Shoryuken.groups['group1'][:queues]).to eq(%w[test_group1_queue1 test_group1_queue2])
75
75
  end
76
76
  end
77
+ describe "#setup_options" do
78
+ let (:cli_queues) { { "queue1"=> 10, "queue2" => 20 } }
79
+ let (:config_queues) { [["queue1", 8], ["queue2", 4]] }
80
+ context "when given queues through config and CLI" do
81
+ specify do
82
+ allow_any_instance_of(Shoryuken::EnvironmentLoader).to receive(:config_file_options).and_return({ queues: config_queues })
83
+ Shoryuken::EnvironmentLoader.setup_options(queues: cli_queues)
84
+ expect(Shoryuken.options[:queues]).to eq(cli_queues)
85
+ end
86
+ end
87
+ context "when given queues through config only" do
88
+ specify do
89
+ allow_any_instance_of(Shoryuken::EnvironmentLoader).to receive(:config_file_options).and_return({ queues: config_queues })
90
+ Shoryuken::EnvironmentLoader.setup_options({})
91
+ expect(Shoryuken.options[:queues]).to eq(config_queues)
92
+ end
93
+ end
94
+ context "when given queues through CLI only" do
95
+ specify do
96
+ Shoryuken::EnvironmentLoader.setup_options(queues: cli_queues)
97
+ expect(Shoryuken.options[:queues]).to eq(cli_queues)
98
+ end
99
+ end
100
+ end
77
101
  end
@@ -1,64 +1,7 @@
1
1
  require 'spec_helper'
2
- require 'active_job'
3
2
  require 'shoryuken/extensions/active_job_adapter'
3
+ require 'shared_examples_for_active_job'
4
4
 
5
5
  RSpec.describe ActiveJob::QueueAdapters::ShoryukenAdapter do
6
- let(:job) { double 'Job', id: '123', queue_name: 'queue' }
7
- let(:fifo) { false }
8
- let(:queue) { double 'Queue', fifo?: fifo }
9
-
10
- before do
11
- allow(Shoryuken::Client).to receive(:queues).with(job.queue_name).and_return(queue)
12
- allow(job).to receive(:serialize).and_return(
13
- 'job_class' => 'Worker',
14
- 'job_id' => job.id,
15
- 'queue_name' => job.queue_name,
16
- 'arguments' => nil,
17
- 'locale' => nil
18
- )
19
- end
20
-
21
- describe '#enqueue' do
22
- specify do
23
- expect(queue).to receive(:send_message) do |hash|
24
- expect(hash[:message_deduplication_id]).to_not be
25
- end
26
- expect(Shoryuken).to receive(:register_worker).with(job.queue_name, described_class::JobWrapper)
27
-
28
- subject.enqueue(job)
29
- end
30
-
31
- context 'when fifo' do
32
- let(:fifo) { true }
33
-
34
- it 'does not include job_id in the deduplication_id' do
35
- expect(queue).to receive(:send_message) do |hash|
36
- message_deduplication_id = Digest::SHA256.hexdigest(JSON.dump(job.serialize.except('job_id')))
37
-
38
- expect(hash[:message_deduplication_id]).to eq(message_deduplication_id)
39
- end
40
- expect(Shoryuken).to receive(:register_worker).with(job.queue_name, described_class::JobWrapper)
41
-
42
- subject.enqueue(job)
43
- end
44
- end
45
- end
46
-
47
- describe '#enqueue_at' do
48
- specify do
49
- delay = 1
50
-
51
- expect(queue).to receive(:send_message) do |hash|
52
- expect(hash[:message_deduplication_id]).to_not be
53
- expect(hash[:delay_seconds]).to eq(delay)
54
- end
55
-
56
- expect(Shoryuken).to receive(:register_worker).with(job.queue_name, described_class::JobWrapper)
57
-
58
- # need to figure out what to require Time.current and N.minutes to remove the stub
59
- allow(subject).to receive(:calculate_delay).and_return(delay)
60
-
61
- subject.enqueue_at(job, nil)
62
- end
63
- end
6
+ include_examples 'active_job_adapters'
64
7
  end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'shared_examples_for_active_job'
3
+ require 'shoryuken/extensions/active_job_adapter'
4
+ require 'shoryuken/extensions/active_job_concurrent_send_adapter'
5
+
6
+ RSpec.describe ActiveJob::QueueAdapters::ShoryukenConcurrentSendAdapter do
7
+ include_examples 'active_job_adapters'
8
+
9
+ let(:options) { {} }
10
+ let(:error_handler) { -> {} }
11
+ let(:success_handler) { -> {} }
12
+
13
+ subject { described_class.new(success_handler, error_handler) }
14
+
15
+ context 'when success' do
16
+ it 'calls success_handler' do
17
+ response = true
18
+ allow(queue).to receive(:send_message).and_return(response)
19
+ expect(success_handler).to receive(:call).with(response, job, options)
20
+
21
+ subject.enqueue(job, options)
22
+ end
23
+ end
24
+
25
+ context 'when failure' do
26
+ it 'calls error_handler' do
27
+ response = Aws::SQS::Errors::InternalError.new('error', 'error')
28
+
29
+ allow(queue).to receive(:send_message).and_raise(response)
30
+ expect(error_handler).to receive(:call).with(response, job, options).and_call_original
31
+
32
+ subject.enqueue(job, options)
33
+ end
34
+ end
35
+ end
@@ -3,6 +3,24 @@ require 'spec_helper'
3
3
  RSpec.describe Shoryuken::Options do
4
4
  subject { Shoryuken.shoryuken_options }
5
5
 
6
+ describe '.on_stop' do
7
+ specify do
8
+ on_stop = Proc.new {}
9
+ Shoryuken.on_stop(&on_stop)
10
+
11
+ expect(Shoryuken.stop_callback).to eq(on_stop)
12
+ end
13
+ end
14
+
15
+ describe '.on_start' do
16
+ specify do
17
+ on_start = Proc.new {}
18
+ Shoryuken.on_start(&on_start)
19
+
20
+ expect(Shoryuken.start_callback).to eq(on_start)
21
+ end
22
+ end
23
+
6
24
  describe '.add_group adds queues and optional delay' do
7
25
  before do
8
26
  Shoryuken.groups.clear
@@ -39,6 +39,29 @@ RSpec.describe Shoryuken::Queue do
39
39
  end
40
40
  end
41
41
 
42
+ context 'when queue ARN supplied' do
43
+ let(:queue_arn) { 'arn:aws:sqs:ap-southeast-2:000000000000:queue-name' }
44
+
45
+ it 'initializes by URL and validate the URL' do
46
+ subject = described_class.new(sqs, queue_arn)
47
+
48
+ expect(subject.name).to eq('queue-name')
49
+ expect(subject.url).to eq('https://sqs.ap-southeast-2.amazonaws.com/000000000000/queue-name')
50
+ end
51
+ end
52
+
53
+ context 'when invalid queue ARN supplied' do
54
+ let(:queue_arn) { 'arn:aws:sqs::000000000000:queue-name' }
55
+
56
+ it 'raises an error' do
57
+ expect do
58
+ described_class.new(sqs, queue_arn)
59
+ end.to raise_error(
60
+ 'Invalid ARN: arn:aws:sqs::000000000000:queue-name. A valid ARN must include: region, account_id and resource.'
61
+ )
62
+ end
63
+ end
64
+
42
65
  context 'when queue name supplied' do
43
66
  subject { described_class.new(sqs, queue_name) }
44
67
 
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: 5.0.0
4
+ version: 5.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Cantero
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-18 00:00:00.000000000 Z
11
+ date: 2020-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: pry-byebug
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 3.9.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 3.9.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -117,6 +117,7 @@ extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
119
  - ".codeclimate.yml"
120
+ - ".github/FUNDING.yml"
120
121
  - ".gitignore"
121
122
  - ".rspec"
122
123
  - ".rubocop.yml"
@@ -139,6 +140,7 @@ files:
139
140
  - lib/shoryuken/default_worker_registry.rb
140
141
  - lib/shoryuken/environment_loader.rb
141
142
  - lib/shoryuken/extensions/active_job_adapter.rb
143
+ - lib/shoryuken/extensions/active_job_concurrent_send_adapter.rb
142
144
  - lib/shoryuken/fetcher.rb
143
145
  - lib/shoryuken/launcher.rb
144
146
  - lib/shoryuken/logging.rb
@@ -166,6 +168,7 @@ files:
166
168
  - shoryuken.gemspec
167
169
  - shoryuken.jpg
168
170
  - spec/integration/launcher_spec.rb
171
+ - spec/shared_examples_for_active_job.rb
169
172
  - spec/shoryuken.yml
170
173
  - spec/shoryuken/body_parser_spec.rb
171
174
  - spec/shoryuken/client_spec.rb
@@ -173,6 +176,7 @@ files:
173
176
  - spec/shoryuken/default_worker_registry_spec.rb
174
177
  - spec/shoryuken/environment_loader_spec.rb
175
178
  - spec/shoryuken/extensions/active_job_adapter_spec.rb
179
+ - spec/shoryuken/extensions/active_job_concurrent_send_adapter_spec.rb
176
180
  - spec/shoryuken/fetcher_spec.rb
177
181
  - spec/shoryuken/manager_spec.rb
178
182
  - spec/shoryuken/middleware/chain_spec.rb
@@ -198,7 +202,7 @@ homepage: https://github.com/phstc/shoryuken
198
202
  licenses:
199
203
  - LGPL-3.0
200
204
  metadata: {}
201
- post_install_message:
205
+ post_install_message:
202
206
  rdoc_options: []
203
207
  require_paths:
204
208
  - lib
@@ -213,13 +217,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
217
  - !ruby/object:Gem::Version
214
218
  version: '0'
215
219
  requirements: []
216
- rubyforge_project:
220
+ rubyforge_project:
217
221
  rubygems_version: 2.7.6.2
218
- signing_key:
222
+ signing_key:
219
223
  specification_version: 4
220
224
  summary: Shoryuken is a super efficient AWS SQS thread based message processor
221
225
  test_files:
222
226
  - spec/integration/launcher_spec.rb
227
+ - spec/shared_examples_for_active_job.rb
223
228
  - spec/shoryuken.yml
224
229
  - spec/shoryuken/body_parser_spec.rb
225
230
  - spec/shoryuken/client_spec.rb
@@ -227,6 +232,7 @@ test_files:
227
232
  - spec/shoryuken/default_worker_registry_spec.rb
228
233
  - spec/shoryuken/environment_loader_spec.rb
229
234
  - spec/shoryuken/extensions/active_job_adapter_spec.rb
235
+ - spec/shoryuken/extensions/active_job_concurrent_send_adapter_spec.rb
230
236
  - spec/shoryuken/fetcher_spec.rb
231
237
  - spec/shoryuken/manager_spec.rb
232
238
  - spec/shoryuken/middleware/chain_spec.rb