basquiat 1.3.2 → 1.3.4

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/Gemfile +1 -0
  3. data/Guardfile +17 -13
  4. data/basquiat.gemspec +1 -1
  5. data/lib/basquiat.rb +1 -0
  6. data/lib/basquiat/adapters.rb +1 -0
  7. data/lib/basquiat/adapters/base_adapter.rb +4 -1
  8. data/lib/basquiat/adapters/base_message.rb +1 -0
  9. data/lib/basquiat/adapters/rabbitmq/configuration.rb +6 -4
  10. data/lib/basquiat/adapters/rabbitmq/connection.rb +3 -1
  11. data/lib/basquiat/adapters/rabbitmq/events.rb +1 -0
  12. data/lib/basquiat/adapters/rabbitmq/message.rb +1 -0
  13. data/lib/basquiat/adapters/rabbitmq/requeue_strategies.rb +1 -0
  14. data/lib/basquiat/adapters/rabbitmq/requeue_strategies/auto_acknowledge.rb +1 -0
  15. data/lib/basquiat/adapters/rabbitmq/requeue_strategies/base_strategy.rb +1 -0
  16. data/lib/basquiat/adapters/rabbitmq/requeue_strategies/basic_acknowledge.rb +1 -0
  17. data/lib/basquiat/adapters/rabbitmq/requeue_strategies/dead_lettering.rb +7 -2
  18. data/lib/basquiat/adapters/rabbitmq/requeue_strategies/delayed_delivery.rb +3 -1
  19. data/lib/basquiat/adapters/rabbitmq/session.rb +3 -2
  20. data/lib/basquiat/adapters/rabbitmq_adapter.rb +6 -3
  21. data/lib/basquiat/adapters/test_adapter.rb +6 -1
  22. data/lib/basquiat/errors.rb +1 -0
  23. data/lib/basquiat/errors/strategy_not_registered.rb +1 -0
  24. data/lib/basquiat/errors/subclass_responsibility.rb +1 -0
  25. data/lib/basquiat/interfaces/base.rb +4 -2
  26. data/lib/basquiat/rails/railtie.rb +1 -0
  27. data/lib/basquiat/support.rb +1 -0
  28. data/lib/basquiat/support/configuration.rb +3 -2
  29. data/lib/basquiat/support/hash_refinements.rb +7 -2
  30. data/lib/basquiat/support/json.rb +1 -0
  31. data/lib/basquiat/version.rb +2 -1
  32. data/spec/lib/adapters/base_adapter_spec.rb +2 -3
  33. data/spec/lib/adapters/base_message_spec.rb +1 -2
  34. data/spec/lib/adapters/rabbitmq/configuration_spec.rb +4 -4
  35. data/spec/lib/adapters/rabbitmq/connection_spec.rb +3 -3
  36. data/spec/lib/adapters/rabbitmq/events_spec.rb +6 -5
  37. data/spec/lib/adapters/rabbitmq/message_spec.rb +2 -2
  38. data/spec/lib/adapters/rabbitmq/requeue_strategies/auto_acknowledge_spec.rb +2 -2
  39. data/spec/lib/adapters/rabbitmq/requeue_strategies/base_strategy_spec.rb +1 -1
  40. data/spec/lib/adapters/rabbitmq/requeue_strategies/basic_acknowledge_spec.rb +3 -4
  41. data/spec/lib/adapters/rabbitmq/requeue_strategies/dead_lettering_spec.rb +2 -2
  42. data/spec/lib/adapters/rabbitmq/requeue_strategies/delayed_delivery_spec.rb +2 -2
  43. data/spec/lib/adapters/rabbitmq_adapter_spec.rb +4 -4
  44. data/spec/lib/adapters/test_adapter_spec.rb +1 -2
  45. data/spec/lib/basquiat_spec.rb +1 -2
  46. data/spec/lib/interfaces/base_spec.rb +2 -3
  47. data/spec/lib/support/configuration_spec.rb +1 -2
  48. data/spec/lib/support/hash_refinements_spec.rb +1 -2
  49. data/spec/lib/support/json_spec.rb +2 -1
  50. data/spec/spec_helper.rb +14 -3
  51. data/spec/support/rabbitmq_queue_matchers.rb +4 -3
  52. data/spec/support/shared_examples/basquiat_adapter_shared_examples.rb +7 -6
  53. metadata +4 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a9d30c5b9e300401aaae4a4f540e669089bd54fb
4
- data.tar.gz: 8f55ad82b149cf79dc7298f456ddd2f07d60eba4
2
+ SHA256:
3
+ metadata.gz: b56c04fa01dfd0ac7184fb888147847eaf32984b3f4c45288f320643d009f76c
4
+ data.tar.gz: c79977131ec506e134765047d91bd35cefb6b8c4c33abee851815bf08f81c1ab
5
5
  SHA512:
6
- metadata.gz: a6ab916581627800c6244ebf6a0c1c50e8f137d3a0d2f34212369e6ddec45b9e9402ca97bda3fb448494c865c680a0a5de8f41df35b018b0b60a85ae8f5136d9
7
- data.tar.gz: 34cfdbe22e53a74953de85808ec55493b7dc95317476e1cfa71c75f851198b3fc6caa7ba558f918fd60d53fc9baf9f99bd662d44e427ead0fdf6e2fc1c7ccf82
6
+ metadata.gz: b086c6f28292cb39c7c26f27027e01489908a0301401e1a78b9fe42ca828925ae4a907779067eb7acc60400c03fb48c9ee9e1362265f0e88c7ad92f062436f47
7
+ data.tar.gz: 9902027d312973ba2e5eeace7712c76dbfbd7a7c87de6bcaae2ea8215ea886dfbf406170a3685c3d4df70f0b7414b98c549e2a3eb23c1d65be6c6aa765873232
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  source 'https://rubygems.org'
3
4
 
4
5
  # Specify your gem's dependencies in basquiat.gemspec
data/Guardfile CHANGED
@@ -4,20 +4,24 @@ guard :bundler do
4
4
  watch('basquiat.gemspec')
5
5
  end
6
6
 
7
- guard :rspec, cmd: 'bundle exec rspec', all_on_start: true,
8
- keep: true, all_after_pass: true, run_all: { cmd: 'rspec -f progress' } do
9
- watch(%r{^spec/.+_spec.rb$})
10
- watch(%r{^spec/lib/.+_spec.rb$})
11
- watch(%r{^lib/basquiat/(.+)\.rb$}) { |matchdata| "spec/lib/#{matchdata[1]}_spec.rb" }
12
- watch('spec/spec_helper.rb') { 'spec' }
13
- watch(%r{spec/support/.+\.rb}) { 'spec' }
14
- end
7
+ group :bdd, halt_on_fail: true do
8
+ guard :rspec, cmd: 'bundle exec rspec', keep: true, all_on_start: true,
9
+ all_after_pass: true, run_all: { cmd: 'rspec -f progress' } do
10
+ watch(%r{^spec/.+_spec.rb$})
11
+ watch(%r{^spec/lib/.+_spec.rb$})
12
+ watch(%r{^lib/basquiat/(.+)\.rb$}) { |matchdata| "spec/lib/#{matchdata[1]}_spec.rb" }
13
+ watch('spec/spec_helper.rb') { 'spec' }
14
+ watch(%r{spec/support/.+\.rb}) { 'spec' }
15
+ end
15
16
 
16
- guard :rubocop, cmd: 'rubocop', cli: '-fs -c./.rubocop.yml' do
17
- # watch(%r{.+\.rb$})
18
- # watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
17
+ guard :rubocop, cmd: 'rubocop', cli: '-D -E -fs -c./.rubocop.yml' do
18
+ watch(%r{.+\.rb$})
19
+ watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
20
+ end
19
21
  end
20
22
 
21
- guard 'yard', cli: '-r' do
22
- watch %r{lib/.+\.rb}
23
+ group :docs do
24
+ guard 'yard', cli: '-r' do
25
+ watch(%r{lib/.+\.rb}) { 'lib' }
26
+ end
23
27
  end
data/basquiat.gemspec CHANGED
@@ -33,7 +33,7 @@ EOD
33
33
  spec.add_development_dependency 'yajl-ruby'
34
34
  spec.add_development_dependency 'simplecov'
35
35
  spec.add_development_dependency 'rubocop'
36
- spec.add_development_dependency 'metric_fu'
36
+ spec.add_development_dependency 'rubycritic'
37
37
  spec.add_development_dependency 'codeclimate-test-reporter'
38
38
  spec.add_development_dependency 'yard'
39
39
 
data/lib/basquiat.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'multi_json'
3
4
  require 'naught'
4
5
  require 'yaml'
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'basquiat/adapters/base_adapter'
3
4
  require 'basquiat/adapters/test_adapter'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'delegate'
3
4
  require 'basquiat/adapters/base_message'
4
5
 
@@ -91,10 +92,12 @@ module Basquiat
91
92
  raise Basquiat::Errors::SubclassResponsibility
92
93
  end
93
94
  # @!endgroup
95
+ #
96
+ attr_reader :procs
94
97
 
95
98
  private
96
99
 
97
- attr_reader :procs, :options
100
+ attr_reader :options
98
101
  end
99
102
  end
100
103
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  # The simplest Message class. It's encouraged to tailor it to your adapter needs (hence BaseMessage).
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -10,16 +11,17 @@ module Basquiat
10
11
  @options = { connection:
11
12
  { hosts: ['localhost'],
12
13
  port: 5672,
13
- auth: { user: 'guest', password: 'guest' }
14
- },
14
+ auth: { user: 'guest', password: 'guest' } },
15
15
  queue: {
16
16
  name: Basquiat.configuration.queue_name,
17
17
  durable: true,
18
- options: {} },
18
+ options: {}
19
+ },
19
20
  exchange: {
20
21
  name: Basquiat.configuration.exchange_name,
21
22
  durable: true,
22
- options: {} },
23
+ options: {}
24
+ },
23
25
  publisher: { confirm: true, persistent: false },
24
26
  consumer: { prefetch: 1000, manual_ack: true },
25
27
  requeue: { enabled: false } }
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -60,7 +61,8 @@ module Basquiat
60
61
  recovery_attempts: @failover.fetch(:max_retries, 5),
61
62
  network_recovery_interval: @failover.fetch(:default_timeout, 5),
62
63
  connection_timeout: @failover.fetch(:connection_timeout, 5),
63
- logger: Basquiat.logger)
64
+ logger: Basquiat.logger
65
+ )
64
66
  __setobj__(@connection)
65
67
  end
66
68
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'basquiat/adapters/rabbitmq/requeue_strategies/base_strategy'
3
4
  require 'basquiat/adapters/rabbitmq/requeue_strategies/auto_acknowledge'
4
5
  require 'basquiat/adapters/rabbitmq/requeue_strategies/basic_acknowledge'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -11,8 +12,12 @@ module Basquiat
11
12
  session: {
12
13
  queue: {
13
14
  options: {
14
- 'x-dead-letter-exchange' => opts.fetch(:exchange, 'basquiat.dlx') } } },
15
- dlx: { ttl: opts.fetch(:ttl, 1_000) } }
15
+ 'x-dead-letter-exchange' => opts.fetch(:exchange, 'basquiat.dlx')
16
+ }
17
+ }
18
+ },
19
+ dlx: { ttl: opts.fetch(:ttl, 1_000) }
20
+ }
16
21
  end
17
22
 
18
23
  def session_options
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -76,7 +77,8 @@ module Basquiat
76
77
  durable: true,
77
78
  arguments: {
78
79
  'x-dead-letter-exchange' => session.exchange.name,
79
- 'x-message-ttl' => timeout * 1_000 })
80
+ 'x-message-ttl' => timeout * 1_000
81
+ })
80
82
  queue.bind(@exchange, routing_key: "#{timeout * 1_000}.#")
81
83
  end
82
84
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  class RabbitMq
@@ -31,8 +32,8 @@ module Basquiat
31
32
  end
32
33
 
33
34
  def queue
34
- @queue ||= channel.queue(@options[:queue][:name],
35
- durable: @options[:queue][:durable],
35
+ @queue ||= channel.queue(@options.dig(:queue, :name),
36
+ durable: @options.dig(:queue, :durable),
36
37
  arguments: (@options[:queue][:options] || {}))
37
38
  end
38
39
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'bunny'
3
4
  require 'delegate'
4
5
 
@@ -8,6 +9,8 @@ module Basquiat
8
9
  class RabbitMq < Basquiat::Adapters::Base
9
10
  using Basquiat::HashRefinements
10
11
 
12
+ attr_reader :procs
13
+
11
14
  # Avoid superclass mismatch errors
12
15
  require 'basquiat/adapters/rabbitmq/events'
13
16
  require 'basquiat/adapters/rabbitmq/message'
@@ -17,8 +20,8 @@ module Basquiat
17
20
  require 'basquiat/adapters/rabbitmq/requeue_strategies'
18
21
 
19
22
  # Initializes the superclass using a {Events} object as the procs instance variable
20
- def initialize
21
- super(procs: Events.new)
23
+ def initialize(procs: Events.new)
24
+ super(procs: procs)
22
25
  end
23
26
 
24
27
  # Since the RabbitMQ configuration options are quite vast and it's interations with the requeue strategies a bit
@@ -57,7 +60,7 @@ module Basquiat
57
60
 
58
61
  def process_message(message, rescue_proc)
59
62
  procs[message.routing_key].call(message)
60
- rescue => ex
63
+ rescue StandardError => ex
61
64
  rescue_proc.call(ex, message)
62
65
  end
63
66
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Adapters
4
5
  # An adapter to be used in testing
@@ -9,7 +10,7 @@ module Basquiat
9
10
  end
10
11
 
11
12
  def clean
12
- @events.clear if @events
13
+ @events&.clear
13
14
  end
14
15
  end
15
16
 
@@ -39,6 +40,10 @@ module Basquiat
39
40
  msg ? procs[event].call(BaseMessage.new(msg)) : nil
40
41
  end
41
42
 
43
+ def connected?
44
+ true
45
+ end
46
+
42
47
  private
43
48
 
44
49
  def subscribed_event
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'basquiat/errors/subclass_responsibility'
3
4
  require 'basquiat/errors/strategy_not_registered'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Errors
4
5
  class StrategyNotRegistered < KeyError
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module Errors
4
5
  class SubclassResponsibility < NoMethodError
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'set'
3
4
 
4
5
  module Basquiat
@@ -19,7 +20,8 @@ module Basquiat
19
20
  end
20
21
 
21
22
  def reload_adapter_from_configuration
22
- @adapter = Kernel.const_get Basquiat.configuration.default_adapter
23
+ @procs = adapter.procs
24
+ self.adapter = Kernel.const_get(Basquiat.configuration.default_adapter)
23
25
  adapter_options Basquiat.configuration.adapter_options
24
26
  end
25
27
 
@@ -28,7 +30,7 @@ module Basquiat
28
30
  # @return [Basquiat::Adapter] the adapter instance for the current class
29
31
  # @deprecated event_adapter is deprecated and will be removed eventually. Please use {#adapter}.
30
32
  def adapter=(adapter_klass)
31
- @adapter = adapter_klass.new
33
+ @adapter = @procs ? adapter_klass.new(procs: @procs) : adapter_klass.new
32
34
  end
33
35
 
34
36
  alias event_adapter= adapter=
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  class Railtie < ::Rails::Railtie
4
5
  initializer 'load_basquiat_configuration' do
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'basquiat/support/hash_refinements'
3
4
  require 'basquiat/support/configuration'
4
5
  require 'basquiat/support/json'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'naught'
3
4
  require 'erb'
4
5
  require 'basquiat/support/hash_refinements'
@@ -61,7 +62,7 @@ module Basquiat
61
62
 
62
63
  # @return [Hash] return the configured adapter options. Defaults to an empty {::Hash}
63
64
  def adapter_options
64
- config.fetch(:adapter_options) { Hash.new }
65
+ config.fetch(:adapter_options) { {} }
65
66
  end
66
67
 
67
68
  # @return [String] return the configured default adapter. Defaults to {Adapters::Test}
@@ -81,7 +82,7 @@ module Basquiat
81
82
  end
82
83
 
83
84
  def load_yaml(path)
84
- @yaml = YAML.load(ERB.new(IO.readlines(path).join).result).symbolize_keys
85
+ @yaml = YAML.safe_load(ERB.new(IO.readlines(path).join).result).symbolize_keys
85
86
  end
86
87
 
87
88
  def setup_basic_options
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  module HashRefinements
4
5
  # @!method deep_merge
@@ -25,8 +26,12 @@ module Basquiat
25
26
 
26
27
  def symbolize_keys
27
28
  each_with_object({}) do |(key, value), new_hash|
28
- new_key = key.to_sym rescue key
29
- new_value = (value.is_a? Hash) ? value.symbolize_keys : value
29
+ new_key = begin
30
+ key.to_sym
31
+ rescue StandardError
32
+ key
33
+ end
34
+ new_value = value.is_a?(Hash) ? value.symbolize_keys : value
30
35
  new_hash[new_key] = new_value
31
36
  end
32
37
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Basquiat
3
4
  # A simple MultiJson wrapper to protect against eventual API changes.
4
5
  module Json
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Version file
3
4
  module Basquiat
4
- VERSION = '1.3.2'
5
+ VERSION = '1.3.4'
5
6
  end
@@ -1,11 +1,10 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
2
 
4
3
  # Sample class used for testing
5
- describe Basquiat::Adapters::Base do
4
+ RSpec.describe Basquiat::Adapters::Base do
6
5
  subject(:adapter) { Basquiat::Adapters::Base.new }
7
6
 
8
- [:disconnect, :subscribe_to, :publish].each do |meth|
7
+ %i[disconnect subscribe_to publish].each do |meth|
9
8
  it "raise a SubclassResponsibility error if #{meth} isn't implemented" do
10
9
  expect { adapter.public_send(meth) }.to raise_error Basquiat::Errors::SubclassResponsibility
11
10
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
2
 
4
- describe Basquiat::Adapters::BaseMessage do
3
+ RSpec.describe Basquiat::Adapters::BaseMessage do
5
4
  subject(:message) { Basquiat::Adapters::BaseMessage.new({ data: 'everything is AWESOME!' }.to_json) }
6
5
 
7
6
  it 'delegates calls to the JSON' do
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
5
  class AwesomeStrategy < Basquiat::Adapters::RabbitMq::BaseStrategy
@@ -8,11 +8,11 @@ class AwesomeStrategy < Basquiat::Adapters::RabbitMq::BaseStrategy
8
8
  end
9
9
  end
10
10
 
11
- describe Basquiat::Adapters::RabbitMq::Configuration do
11
+ RSpec.describe Basquiat::Adapters::RabbitMq::Configuration do
12
12
  subject(:config) { Basquiat::Adapters::RabbitMq::Configuration.new }
13
13
 
14
14
  # used by the Adapter::Base class
15
- describe '#merge_user_options', focus: true do
15
+ describe '#merge_user_options' do
16
16
  it 'merges the user supplied options with the default ones' do
17
17
  config.merge_user_options(queue: { name: 'config.test.queue' })
18
18
  expect(config.base_options[:queue][:name]).to eq('config.test.queue')
@@ -39,7 +39,7 @@ describe Basquiat::Adapters::RabbitMq::Configuration do
39
39
  expect { config.strategy }.to raise_error Basquiat::Errors::StrategyNotRegistered
40
40
  end
41
41
 
42
- it 'deals with the requeue strategy options', focus: true do
42
+ it 'deals with the requeue strategy options' do
43
43
  Basquiat::Adapters::RabbitMq.register_strategy :dlx, Basquiat::Adapters::RabbitMq::DeadLettering
44
44
  config.merge_user_options(requeue: { enabled: true, strategy: 'dlx', options: { exchange: 'dlx.topic' } })
45
45
  expect(config.session_options[:queue][:options]).to include('x-dead-letter-exchange' => 'dlx.topic')
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
- describe Basquiat::Adapters::RabbitMq::Connection do
5
+ RSpec.describe Basquiat::Adapters::RabbitMq::Connection do
6
6
  subject(:connection) { Basquiat::Adapters::RabbitMq::Connection }
7
7
 
8
8
  let(:hosts) do
@@ -34,7 +34,7 @@ describe Basquiat::Adapters::RabbitMq::Connection do
34
34
  it 'uses another server after all retries on a single one' do
35
35
  conn = connection.new(hosts: hosts, failover: failover)
36
36
  expect { conn.start }.to_not raise_error
37
- expect(conn.host).to match "#{ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_ADDR') { 'localhost' }}"
37
+ expect(conn.host).to match(ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_ADDR') { 'localhost' })
38
38
  conn.close
39
39
  end
40
40
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
- describe Basquiat::Adapters::RabbitMq::Events do
5
+ RSpec.describe Basquiat::Adapters::RabbitMq::Events do
6
6
  subject(:events) { Basquiat::Adapters::RabbitMq::Events.new }
7
7
 
8
8
  context 'basic functionality' do
@@ -21,7 +21,7 @@ describe Basquiat::Adapters::RabbitMq::Events do
21
21
  let(:proc) { -> { 'Hello from the lambda! o/' } }
22
22
 
23
23
  describe '*' do
24
- let(:words) { %w(awesome lame dumb cool) }
24
+ let(:words) { %w[awesome lame dumb cool] }
25
25
 
26
26
  it 'event.* does not match event_some_word' do
27
27
  events['event.*'] = proc
@@ -64,18 +64,19 @@ describe Basquiat::Adapters::RabbitMq::Events do
64
64
  end
65
65
  end
66
66
  end
67
+
67
68
  describe '#' do
68
69
  context 'matches any number of words' do
69
70
  it '# matches all events' do
70
71
  events['#'] = proc
71
- %w(some.cool.event event cool.event).each do |event|
72
+ %w[some.cool.event event cool.event].each do |event|
72
73
  expect(events[event]).to eq(proc)
73
74
  end
74
75
  end
75
76
 
76
77
  it 'matches specific events' do
77
78
  events['#.event'] = proc
78
- %w(some.cool.event cool.event).each do |event|
79
+ %w[some.cool.event cool.event].each do |event|
79
80
  expect(events[event]).to eq(proc)
80
81
  end
81
82
  expect { events['event'] }.to raise_error KeyError
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
- describe Basquiat::Adapters::RabbitMq::Message do
5
+ RSpec.describe Basquiat::Adapters::RabbitMq::Message do
6
6
  let(:json) do
7
7
  { key: 'value', date: Date.new.iso8601 }.to_json
8
8
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
- describe Basquiat::Adapters::RabbitMq::AutoAcknowledge do
5
+ RSpec.describe Basquiat::Adapters::RabbitMq::AutoAcknowledge do
6
6
  let(:adapter) { Basquiat::Adapters::RabbitMq.new }
7
7
  let(:base_options) do
8
8
  { connection: { hosts: [ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_ADDR') { 'localhost' }],
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
5
  RSpec.describe Basquiat::Adapters::RabbitMq::BaseStrategy do
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
- describe 'Requeue Strategies' do
5
+ RSpec.describe 'Requeue Strategies' do
6
6
  let(:adapter) { Basquiat::Adapters::RabbitMq.new }
7
7
  let(:base_options) do
8
8
  { connection: { hosts: [ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_ADDR') { 'localhost' }],
9
9
  port: ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_PORT') { 5672 } },
10
10
  publisher: { persistent: true },
11
- requeue: { enabled: true, strategy: 'basic_ack' }
12
- }
11
+ requeue: { enabled: true, strategy: 'basic_ack' } }
13
12
  end
14
13
 
15
14
  before(:each) { adapter.adapter_options(base_options) }
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
- describe Basquiat::Adapters::RabbitMq::DeadLettering do
5
+ RSpec.describe Basquiat::Adapters::RabbitMq::DeadLettering do
6
6
  let(:adapter) { Basquiat::Adapters::RabbitMq.new }
7
7
  let(:base_options) do
8
8
  { connection: { hosts: [ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_ADDR') { 'localhost' }],
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
- describe Basquiat::Adapters::RabbitMq::DelayedDelivery do
5
+ RSpec.describe Basquiat::Adapters::RabbitMq::DelayedDelivery do
6
6
  let(:adapter) { Basquiat::Adapters::RabbitMq.new }
7
7
  let(:base_options) do
8
8
  { connection: { hosts: [ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_ADDR') { 'localhost' }],
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
2
+
3
3
  require 'basquiat/adapters/rabbitmq_adapter'
4
4
 
5
- describe Basquiat::Adapters::RabbitMq do
5
+ RSpec.describe Basquiat::Adapters::RabbitMq do
6
6
  subject(:adapter) { Basquiat::Adapters::RabbitMq.new }
7
7
 
8
8
  let(:base_options) do
@@ -32,8 +32,8 @@ describe Basquiat::Adapters::RabbitMq do
32
32
  context 'listener' do
33
33
  it 'runs the rescue block when an exception happens' do
34
34
  coisa = ''
35
- adapter.subscribe_to('some.event', ->(_msg) { fail ArgumentError })
36
- adapter.listen(block: false, rescue_proc: -> (ex, _msg) { coisa = ex.class.to_s })
35
+ adapter.subscribe_to('some.event', ->(_msg) { raise ArgumentError })
36
+ adapter.listen(block: false, rescue_proc: ->(ex, _msg) { coisa = ex.class.to_s })
37
37
  adapter.publish('some.event', data: 'coisa')
38
38
  sleep 0.3
39
39
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
2
 
4
- describe Basquiat::Adapters::Test do
3
+ RSpec.describe Basquiat::Adapters::Test do
5
4
  subject(:adapter) { Basquiat::Adapters::Test.new }
6
5
 
7
6
  context 'publisher' do
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
2
 
4
- describe Basquiat do
3
+ RSpec.describe Basquiat do
5
4
  it 'should have a version number' do
6
5
  expect(Basquiat::VERSION).not_to be_nil
7
6
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
2
 
4
- describe Basquiat::Base do
3
+ RSpec.describe Basquiat::Base do
5
4
  # Sample class used for testing
6
5
  class SampleClass
7
6
  extend Basquiat::Base
@@ -87,7 +86,7 @@ describe Basquiat::Base do
87
86
  end
88
87
 
89
88
  subject.subscribe_to('some.event', :test_method)
90
- expect(subject.listen(block: false)).to eq(%w(e e e))
89
+ expect(subject.listen(block: false)).to eq(%w[e e e])
91
90
  end
92
91
  end
93
92
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
2
 
4
- describe Basquiat::Configuration do
3
+ RSpec.describe Basquiat::Configuration do
5
4
  subject(:config) { Basquiat::Configuration.new }
6
5
 
7
6
  context 'accessors' do
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'spec_helper'
3
2
 
4
- describe Basquiat::HashRefinements do
3
+ RSpec.describe Basquiat::HashRefinements do
5
4
  using Basquiat::HashRefinements
6
5
 
7
6
  subject(:hash) do
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- describe Basquiat::Json do
2
+
3
+ RSpec.describe Basquiat::Json do
3
4
  it "returns an empty hash if it can't parse the payload" do
4
5
  expect(Basquiat::Json.decode('Idaho Potato')).to eq({})
5
6
  end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
- require 'codeclimate-test-reporter'
4
4
  require 'simplecov'
5
5
 
6
- CodeClimate::TestReporter.start
7
-
8
6
  SimpleCov.start do
9
7
  add_filter { |source| source.lines_of_code <= 3 }
10
8
  add_filter { |source| source.filename =~ /spec/ }
@@ -22,3 +20,16 @@ require 'basquiat'
22
20
 
23
21
  require 'support/shared_examples/basquiat_adapter_shared_examples'
24
22
  require 'support/rabbitmq_queue_matchers'
23
+
24
+ RSpec.configure do |config|
25
+ config.mock_with :rspec do |mocks|
26
+ mocks.verify_partial_doubles = true
27
+ end
28
+
29
+ config.filter_run :focus
30
+ config.run_all_when_everything_filtered = true
31
+ config.disable_monkey_patching!
32
+ config.default_formatter = 'doc' if config.files_to_run.one?
33
+
34
+ config.order = :random
35
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'uri'
3
4
  require 'net/http'
4
5
 
@@ -7,11 +8,11 @@ class QueueStats
7
8
  @queue = queue
8
9
  host = ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_15672_TCP_ADDR', 'localhost')
9
10
  port = ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_15672_TCP_PORT', 15_672)
10
- @uri = URI.parse("http://#{host}:#{port}/api/queues/%2F/#{@queue}")
11
+ @uri = URI.parse("http://#{host}:#{port}/api/queues/%2f/#{@queue}")
11
12
  end
12
13
 
13
14
  def unacked_messages
14
- queue_status.fetch(:messages_unacknowledged)
15
+ queue_status.fetch(:messages_unacknowledged) { 0 }
15
16
  end
16
17
 
17
18
  private
@@ -40,7 +41,7 @@ end
40
41
 
41
42
  RSpec::Matchers.define :have_unacked_messages do
42
43
  match do |queue|
43
- QueueStats.new(queue.name).unacked_messages > 0
44
+ QueueStats.new(queue.name).unacked_messages.positive?
44
45
  end
45
46
 
46
47
  failure_message_when_negated do |queue|
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  shared_examples_for 'a Basquiat::Adapter' do
3
- [:adapter_options,
4
- :base_options,
5
- :default_options,
6
- :publish,
7
- :subscribe_to,
8
- :disconnect].each do |meth|
4
+ %i[adapter_options
5
+ base_options
6
+ default_options
7
+ publish
8
+ subscribe_to
9
+ disconnect].each do |meth|
9
10
  it meth.to_s do
10
11
  expect(adapter).to respond_to(:meth)
11
12
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: basquiat
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcello "mereghost" Rocha
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-20 00:00:00.000000000 Z
11
+ date: 2018-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -179,7 +179,7 @@ dependencies:
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
- name: metric_fu
182
+ name: rubycritic
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - ">="
@@ -333,7 +333,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
333
333
  version: '0'
334
334
  requirements: []
335
335
  rubyforge_project:
336
- rubygems_version: 2.5.1
336
+ rubygems_version: 2.7.3
337
337
  signing_key:
338
338
  specification_version: 4
339
339
  summary: A pluggable library that aims to hide message queue complexity
@@ -360,4 +360,3 @@ test_files:
360
360
  - spec/support/basquiat.yml
361
361
  - spec/support/rabbitmq_queue_matchers.rb
362
362
  - spec/support/shared_examples/basquiat_adapter_shared_examples.rb
363
- has_rdoc: