message-driver 0.3.0 → 0.4.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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +18 -0
  3. data/.rubocop_todo.yml +160 -0
  4. data/.travis.yml +5 -4
  5. data/CHANGELOG.md +5 -0
  6. data/Gemfile +9 -8
  7. data/Guardfile +14 -7
  8. data/README.md +2 -0
  9. data/Rakefile +16 -10
  10. data/examples/basic_producer_and_consumer/Gemfile +2 -2
  11. data/examples/basic_producer_and_consumer/common.rb +3 -3
  12. data/examples/basic_producer_and_consumer/consumer.rb +5 -5
  13. data/examples/basic_producer_and_consumer/producer.rb +7 -7
  14. data/features/CHANGELOG.md +5 -0
  15. data/features/message_consumers/transactional_ack_consumers.feature +1 -0
  16. data/features/rabbitmq_specific_features/publisher_acknowledgements.feature +51 -0
  17. data/features/step_definitions/error_handling_steps.rb +2 -2
  18. data/features/step_definitions/logging_steps.rb +4 -4
  19. data/features/step_definitions/message_consumers_steps.rb +8 -8
  20. data/features/step_definitions/rabbitmq_specific_steps.rb +10 -0
  21. data/features/step_definitions/steps.rb +15 -15
  22. data/features/support/env.rb +3 -0
  23. data/features/support/firewall_helper.rb +5 -6
  24. data/features/support/message_table_matcher.rb +3 -4
  25. data/features/support/no_error_matcher.rb +3 -3
  26. data/features/support/test_runner.rb +11 -3
  27. data/features/support/transforms.rb +1 -1
  28. data/lib/message-driver.rb +1 -1
  29. data/lib/message_driver.rb +0 -1
  30. data/lib/message_driver/adapters/base.rb +10 -10
  31. data/lib/message_driver/adapters/bunny_adapter.rb +57 -30
  32. data/lib/message_driver/adapters/in_memory_adapter.rb +4 -5
  33. data/lib/message_driver/adapters/stomp_adapter.rb +4 -6
  34. data/lib/message_driver/broker.rb +5 -4
  35. data/lib/message_driver/client.rb +6 -6
  36. data/lib/message_driver/destination.rb +2 -2
  37. data/lib/message_driver/errors.rb +1 -4
  38. data/lib/message_driver/logging.rb +1 -1
  39. data/lib/message_driver/message.rb +2 -2
  40. data/lib/message_driver/subscription.rb +1 -1
  41. data/lib/message_driver/version.rb +1 -1
  42. data/lib/{message_driver/vendor → vendor}/.document +0 -0
  43. data/lib/vendor/nesty.rb +1 -0
  44. data/lib/vendor/nesty/nested_error.rb +28 -0
  45. data/message-driver.gemspec +15 -14
  46. data/spec/integration/bunny/amqp_integration_spec.rb +43 -43
  47. data/spec/integration/bunny/bunny_adapter_spec.rb +117 -101
  48. data/spec/integration/in_memory/in_memory_adapter_spec.rb +35 -35
  49. data/spec/integration/stomp/stomp_adapter_spec.rb +42 -42
  50. data/spec/spec_helper.rb +4 -1
  51. data/spec/support/shared/adapter_examples.rb +7 -7
  52. data/spec/support/shared/client_ack_examples.rb +6 -6
  53. data/spec/support/shared/context_examples.rb +4 -4
  54. data/spec/support/shared/destination_examples.rb +10 -10
  55. data/spec/support/shared/subscription_examples.rb +29 -29
  56. data/spec/support/shared/transaction_examples.rb +10 -10
  57. data/spec/units/message_driver/adapters/base_spec.rb +19 -19
  58. data/spec/units/message_driver/broker_spec.rb +57 -58
  59. data/spec/units/message_driver/client_spec.rb +84 -84
  60. data/spec/units/message_driver/destination_spec.rb +4 -4
  61. data/spec/units/message_driver/message_spec.rb +19 -19
  62. data/spec/units/message_driver/subscription_spec.rb +4 -4
  63. data/test_lib/broker_config.rb +2 -2
  64. metadata +27 -6
  65. data/lib/message_driver/vendor/nesty.rb +0 -1
  66. data/lib/message_driver/vendor/nesty/nested_error.rb +0 -26
@@ -1,14 +1,14 @@
1
- shared_examples "transactions are not supported" do
2
- describe "#supports_transactions?" do
3
- it "returns false" do
1
+ shared_examples 'transactions are not supported' do
2
+ describe '#supports_transactions?' do
3
+ it 'returns false' do
4
4
  expect(subject.supports_transactions?).to eq(false)
5
5
  end
6
6
  end
7
7
  end
8
8
 
9
- shared_examples "transactions are supported" do
10
- describe "#supports_transactions?" do
11
- it "returns true" do
9
+ shared_examples 'transactions are supported' do
10
+ describe '#supports_transactions?' do
11
+ it 'returns true' do
12
12
  expect(subject.supports_transactions?).to eq(true)
13
13
  end
14
14
  end
@@ -18,24 +18,24 @@ shared_examples "transactions are supported" do
18
18
  it { should respond_to :rollback_transaction }
19
19
  it { should respond_to :in_transaction? }
20
20
 
21
- describe "#in_transaction?" do
21
+ describe '#in_transaction?' do
22
22
  it "returns false if you aren't in a transaction" do
23
23
  expect(subject.in_transaction?).to eq(false)
24
24
  end
25
25
  end
26
26
 
27
- it "raises a MessageDriver::TransactionError error if you begin two transactions" do
27
+ it 'raises a MessageDriver::TransactionError error if you begin two transactions' do
28
28
  subject.begin_transaction
29
29
  expect {
30
30
  subject.begin_transaction
31
31
  }.to raise_error MessageDriver::TransactionError
32
32
  end
33
- it "raises a MessageDriver::TransactionError error if you commit outside of a transaction" do
33
+ it 'raises a MessageDriver::TransactionError error if you commit outside of a transaction' do
34
34
  expect {
35
35
  subject.commit_transaction
36
36
  }.to raise_error MessageDriver::TransactionError
37
37
  end
38
- it "raises a MessageDriver::TransactionError error if you rollback outside of a transaction" do
38
+ it 'raises a MessageDriver::TransactionError error if you rollback outside of a transaction' do
39
39
  expect {
40
40
  subject.rollback_transaction
41
41
  }.to raise_error MessageDriver::TransactionError
@@ -3,16 +3,16 @@ require 'spec_helper'
3
3
  module MessageDriver::Adapters
4
4
  describe Base do
5
5
  class TestAdapter < Base
6
- def initialize(configuration)
6
+ def initialize(_configuration)
7
7
  end
8
8
  end
9
9
  subject(:adapter) { TestAdapter.new({}) }
10
10
 
11
- describe "#new_context" do
12
- it "raises an error" do
11
+ describe '#new_context' do
12
+ it 'raises an error' do
13
13
  expect {
14
14
  subject.new_context
15
- }.to raise_error "Must be implemented in subclass"
15
+ }.to raise_error 'Must be implemented in subclass'
16
16
  end
17
17
  end
18
18
 
@@ -21,32 +21,32 @@ module MessageDriver::Adapters
21
21
  end
22
22
  subject(:adapter_context) { TestContext.new(adapter) }
23
23
 
24
- it_behaves_like "an adapter context"
25
- it_behaves_like "transactions are not supported"
26
- it_behaves_like "client acks are not supported"
27
- it_behaves_like "subscriptions are not supported"
24
+ it_behaves_like 'an adapter context'
25
+ it_behaves_like 'transactions are not supported'
26
+ it_behaves_like 'client acks are not supported'
27
+ it_behaves_like 'subscriptions are not supported'
28
28
 
29
- describe "#create_destination" do
30
- it "raises an error" do
29
+ describe '#create_destination' do
30
+ it 'raises an error' do
31
31
  expect {
32
- subject.create_destination("foo")
33
- }.to raise_error "Must be implemented in subclass"
32
+ subject.create_destination('foo')
33
+ }.to raise_error 'Must be implemented in subclass'
34
34
  end
35
35
  end
36
36
 
37
- describe "#publish" do
38
- it "raises an error" do
37
+ describe '#publish' do
38
+ it 'raises an error' do
39
39
  expect {
40
- subject.publish(:destination, {foo: "bar"})
41
- }.to raise_error "Must be implemented in subclass"
40
+ subject.publish(:destination, foo: 'bar')
41
+ }.to raise_error 'Must be implemented in subclass'
42
42
  end
43
43
  end
44
44
 
45
- describe "#pop_message" do
46
- it "raises an error" do
45
+ describe '#pop_message' do
46
+ it 'raises an error' do
47
47
  expect {
48
48
  subject.pop_message(:destination)
49
- }.to raise_error "Must be implemented in subclass"
49
+ }.to raise_error 'Must be implemented in subclass'
50
50
  end
51
51
  end
52
52
 
@@ -6,8 +6,8 @@ module MessageDriver
6
6
  let(:broker_name) { described_class::DEFAULT_BROKER_NAME }
7
7
  let(:options) { { adapter: :in_memory } }
8
8
 
9
- describe ".configure and .broker" do
10
- it "calls new, passing in the options and saves the instance" do
9
+ describe '.configure and .broker' do
10
+ it 'calls new, passing in the options and saves the instance' do
11
11
  options = {foo: :bar}
12
12
  result = double(described_class).as_null_object
13
13
  described_class.should_receive(:new).with(described_class::DEFAULT_BROKER_NAME, options).and_return(result)
@@ -22,15 +22,15 @@ module MessageDriver
22
22
  described_class.configure(broker_name, options)
23
23
  expect {
24
24
  described_class.configure(broker_name, options)
25
- }.to raise_error MessageDriver::BrokerAlreadyConfigured, match("default")
25
+ }.to raise_error MessageDriver::BrokerAlreadyConfigured, match('default')
26
26
  end
27
27
 
28
- context "when configurating multiple brokers" do
29
- it "allows you to fetch each configured broker through .broker" do
28
+ context 'when configurating multiple brokers' do
29
+ it 'allows you to fetch each configured broker through .broker' do
30
30
  options1 = {foo: :bar}
31
31
  options2 = {bar: :baz}
32
- result1 = double("result1").as_null_object
33
- result2 = double("result2").as_null_object
32
+ result1 = double('result1').as_null_object
33
+ result2 = double('result2').as_null_object
34
34
  allow(described_class).to receive(:new).with(:result1, options1).and_return(result1)
35
35
  allow(described_class).to receive(:new).with(:result2, options2).and_return(result2)
36
36
 
@@ -43,7 +43,7 @@ module MessageDriver
43
43
  end
44
44
 
45
45
  context "when you try to access a broker that isn't configured" do
46
- it "should raise an error" do
46
+ it 'should raise an error' do
47
47
  expect {
48
48
  described_class.broker(:not_an_adapter)
49
49
  }.to raise_error BrokerNotConfigured
@@ -51,8 +51,8 @@ module MessageDriver
51
51
  end
52
52
  end
53
53
 
54
- describe ".reset" do
55
- it "stops and removes all the brokers" do
54
+ describe '.reset' do
55
+ it 'stops and removes all the brokers' do
56
56
  broker1 = described_class.configure(:broker1, adapter: :in_memory)
57
57
  broker2 = described_class.configure(:broker2, adapter: :in_memory)
58
58
 
@@ -73,12 +73,12 @@ module MessageDriver
73
73
  }.to raise_error BrokerNotConfigured
74
74
  end
75
75
 
76
- context "when one of the brokers raises and error" do
77
- it "still stops all the brokers" do
76
+ context 'when one of the brokers raises and error' do
77
+ it 'still stops all the brokers' do
78
78
  broker1 = described_class.configure(:broker1, adapter: :in_memory)
79
79
  broker2 = described_class.configure(:broker2, adapter: :in_memory)
80
80
 
81
- allow(broker1).to receive(:stop).and_raise "error stopping broker1!"
81
+ allow(broker1).to receive(:stop).and_raise 'error stopping broker1!'
82
82
  allow(broker2).to receive(:stop).and_call_original
83
83
 
84
84
  expect {
@@ -99,20 +99,20 @@ module MessageDriver
99
99
  end
100
100
  end
101
101
 
102
- describe ".client" do
102
+ describe '.client' do
103
103
  let(:broker_name) { described_class::DEFAULT_BROKER_NAME }
104
- it "returns a module that extends MessageDriver::Client for the specified broker" do
104
+ it 'returns a module that extends MessageDriver::Client for the specified broker' do
105
105
  expect(described_class.client(broker_name)).to be_kind_of MessageDriver::Client
106
106
  expect(described_class.client(broker_name).broker_name).to eq(broker_name)
107
107
  end
108
108
 
109
- it "caches the modules" do
109
+ it 'caches the modules' do
110
110
  first = described_class.client(broker_name)
111
111
  second = described_class.client(broker_name)
112
112
  expect(second).to be first
113
113
  end
114
114
 
115
- context "when the broker has a non-default name" do
115
+ context 'when the broker has a non-default name' do
116
116
  let(:broker_name) { :my_cool_broker }
117
117
  it "returns a module that extends MessageDriver::Client that knows it's broker" do
118
118
  expect(described_class.client(broker_name)).to be_kind_of MessageDriver::Client
@@ -121,28 +121,28 @@ module MessageDriver
121
121
  end
122
122
  end
123
123
 
124
- describe "#initialize" do
124
+ describe '#initialize' do
125
125
  it "raises an error if you don't specify an adapter" do
126
126
  expect {
127
127
  described_class.new({})
128
128
  }.to raise_error(/must specify an adapter/)
129
129
  end
130
130
 
131
- it "if you provide an adapter instance, it uses that one" do
131
+ it 'if you provide an adapter instance, it uses that one' do
132
132
  adapter = Adapters::InMemoryAdapter.new({})
133
133
 
134
134
  instance = described_class.new(adapter: adapter)
135
135
  expect(instance.adapter).to be adapter
136
136
  end
137
137
 
138
- it "if you provide an adapter class, it will instansiate it" do
138
+ it 'if you provide an adapter class, it will instansiate it' do
139
139
  adapter = Adapters::InMemoryAdapter
140
140
 
141
141
  instance = described_class.new(adapter: adapter)
142
142
  expect(instance.adapter).to be_a adapter
143
143
  end
144
144
 
145
- it "if you provide a symbol, it will try to look up the adapter class" do
145
+ it 'if you provide a symbol, it will try to look up the adapter class' do
146
146
  adapter = :in_memory
147
147
 
148
148
  instance = described_class.new(adapter: adapter)
@@ -157,14 +157,14 @@ module MessageDriver
157
157
  }.to raise_error(/adapter must be a MessageDriver::Adapters::Base/)
158
158
  end
159
159
 
160
- it "starts off with the adapter not stopped" do
160
+ it 'starts off with the adapter not stopped' do
161
161
  adapter = :in_memory
162
162
 
163
163
  instance = described_class.new(adapter: adapter)
164
164
  expect(instance).not_to be_stopped
165
165
  end
166
166
 
167
- it "has a default name of :default" do
167
+ it 'has a default name of :default' do
168
168
  adapter = :in_memory
169
169
 
170
170
  instance = described_class.new(adapter: adapter)
@@ -180,13 +180,12 @@ module MessageDriver
180
180
  end
181
181
  end
182
182
 
183
-
184
183
  context do
185
184
  subject!(:broker) { described_class.configure(broker_name, options) }
186
185
 
187
- describe "#stop" do
186
+ describe '#stop' do
188
187
  let(:adapter) { broker.adapter }
189
- it "calls stop on the adapter" do
188
+ it 'calls stop on the adapter' do
190
189
  allow(adapter).to receive(:stop).and_call_original
191
190
 
192
191
  subject.stop
@@ -194,14 +193,14 @@ module MessageDriver
194
193
  expect(adapter).to have_received(:stop)
195
194
  end
196
195
 
197
- it "marks the broker as stopped" do
196
+ it 'marks the broker as stopped' do
198
197
  expect {
199
198
  subject.stop
200
199
  }.to change { subject.stopped? }.from(false).to(true)
201
200
  end
202
201
 
203
- it "invalidates the contexts" do
204
- my_ctx = double("context", invalidate: nil)
202
+ it 'invalidates the contexts' do
203
+ my_ctx = double('context', invalidate: nil)
205
204
  adapter.contexts << my_ctx
206
205
  subject.stop
207
206
  expect(adapter.contexts).to be_empty
@@ -209,13 +208,13 @@ module MessageDriver
209
208
  end
210
209
  end
211
210
 
212
- describe "#restart" do
211
+ describe '#restart' do
213
212
  let!(:original_adapter) { subject.adapter }
214
213
  before do
215
214
  allow(original_adapter).to receive(:stop).and_call_original
216
215
  end
217
216
 
218
- it "reconfigures the adapter" do
217
+ it 'reconfigures the adapter' do
219
218
  expect {
220
219
  subject.restart
221
220
  }.to change { subject.adapter }
@@ -226,7 +225,7 @@ module MessageDriver
226
225
  expect(original_adapter).to have_received(:stop).once
227
226
  end
228
227
 
229
- it "does not stop the adapter again if it has already been stopped" do
228
+ it 'does not stop the adapter again if it has already been stopped' do
230
229
  expect(subject.adapter).to be original_adapter
231
230
  subject.stop
232
231
  expect {
@@ -236,30 +235,30 @@ module MessageDriver
236
235
  end
237
236
  end
238
237
 
239
- describe "#configuration" do
240
- it "returns the configuration hash you passed to .configure" do
238
+ describe '#configuration' do
239
+ it 'returns the configuration hash you passed to .configure' do
241
240
  config = {adapter: :in_memory, foo: :bar, baz: :boz}
242
241
  instance = described_class.new(config)
243
242
  expect(instance.configuration).to be config
244
243
  end
245
244
  end
246
245
 
247
- describe "#destination" do
248
- it "returns the destination" do
249
- destination = broker.destination(:my_queue, "my_queue", exclusive: true)
246
+ describe '#destination' do
247
+ it 'returns the destination' do
248
+ destination = broker.destination(:my_queue, 'my_queue', exclusive: true)
250
249
  expect(destination).to be_a MessageDriver::Destination::Base
251
250
  end
252
251
  end
253
252
 
254
- describe "#find_destination" do
255
- it "finds the previously defined destination" do
256
- my_destination = broker.destination(:my_queue, "my_queue", exclusive: true)
253
+ describe '#find_destination' do
254
+ it 'finds the previously defined destination' do
255
+ my_destination = broker.destination(:my_queue, 'my_queue', exclusive: true)
257
256
  expect(broker.find_destination(:my_queue)).to be(my_destination)
258
257
  end
259
258
 
260
259
  context "when the destination can't be found" do
261
260
  let(:bad_dest_name) { :not_a_queue }
262
- it "raises a MessageDriver:NoSuchDestinationError" do
261
+ it 'raises a MessageDriver:NoSuchDestinationError' do
263
262
  expect {
264
263
  broker.find_destination(bad_dest_name)
265
264
  }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/)
@@ -267,32 +266,32 @@ module MessageDriver
267
266
  end
268
267
  end
269
268
 
270
- describe "#consumer" do
271
- let(:consumer_double) { lambda do |m| end }
272
- it "saves the provided consumer" do
269
+ describe '#consumer' do
270
+ let(:consumer_double) { lambda do |_| end }
271
+ it 'saves the provided consumer' do
273
272
  broker.consumer(:my_consumer, &consumer_double)
274
273
  expect(broker.consumers[:my_consumer]).to be(consumer_double)
275
274
  end
276
275
 
277
- context "when no consumer is provided" do
278
- it "raises an error" do
276
+ context 'when no consumer is provided' do
277
+ it 'raises an error' do
279
278
  expect {
280
279
  broker.consumer(:my_consumer)
281
- }.to raise_error(MessageDriver::Error, "you must provide a block")
280
+ }.to raise_error(MessageDriver::Error, 'you must provide a block')
282
281
  end
283
282
  end
284
283
  end
285
284
 
286
- describe "#find_consumer" do
287
- let(:consumer_double) { lambda do |m| end }
288
- it "finds the previously defined consumer" do
285
+ describe '#find_consumer' do
286
+ let(:consumer_double) { lambda do |_| end }
287
+ it 'finds the previously defined consumer' do
289
288
  my_consumer = broker.consumer(:my_consumer, &consumer_double)
290
289
  expect(broker.find_consumer(:my_consumer)).to be(my_consumer)
291
290
  end
292
291
 
293
292
  context "when the consumer can't be found" do
294
293
  let(:bad_consumer_name) { :not_a_queue }
295
- it "raises a MessageDriver:NoSuchConsumerError" do
294
+ it 'raises a MessageDriver:NoSuchConsumerError' do
296
295
  expect {
297
296
  broker.find_consumer(bad_consumer_name)
298
297
  }.to raise_error(MessageDriver::NoSuchConsumerError, /#{bad_consumer_name}/)
@@ -300,14 +299,14 @@ module MessageDriver
300
299
  end
301
300
  end
302
301
 
303
- describe "#dynamic_destination" do
304
- it "returns the destination" do
305
- destination = broker.dynamic_destination("my_queue", exclusive: true)
302
+ describe '#dynamic_destination' do
303
+ it 'returns the destination' do
304
+ destination = broker.dynamic_destination('my_queue', exclusive: true)
306
305
  expect(destination).to be_a MessageDriver::Destination::Base
307
306
  end
308
307
  end
309
308
 
310
- describe "#client" do
309
+ describe '#client' do
311
310
  let(:broker_name) { described_class::DEFAULT_BROKER_NAME }
312
311
  it "returns a module that extends MessageDriver::Client that knows it's broker" do
313
312
  expect(broker.client).to be_kind_of MessageDriver::Client
@@ -315,17 +314,17 @@ module MessageDriver
315
314
  expect(broker.client.broker).to be(broker)
316
315
  end
317
316
 
318
- it "caches the modules" do
317
+ it 'caches the modules' do
319
318
  first = broker.client
320
319
  second = broker.client
321
320
  expect(second).to be first
322
321
  end
323
322
 
324
- it "returns the same module as .client" do
323
+ it 'returns the same module as .client' do
325
324
  expect(broker.client).to be described_class.client(broker.name)
326
325
  end
327
326
 
328
- context "when the broker has a non-default name" do
327
+ context 'when the broker has a non-default name' do
329
328
  let(:broker_name) { :my_cool_broker }
330
329
  it "returns a module that extends MessageDriver::Client that knows it's broker" do
331
330
  expect(broker.name).to eq(broker_name)
@@ -14,54 +14,54 @@ module MessageDriver
14
14
  let(:adapter) { broker.adapter }
15
15
  let(:adapter_context) { adapter.new_context }
16
16
 
17
- shared_examples "a Client" do
18
- describe "#broker" do
19
- it "returns the broker_name" do
17
+ shared_examples 'a Client' do
18
+ describe '#broker' do
19
+ it 'returns the broker_name' do
20
20
  expect(subject.broker_name).to eq(broker_name)
21
21
  end
22
22
  end
23
23
 
24
- describe "#current_adapter_context" do
24
+ describe '#current_adapter_context' do
25
25
  before { subject.clear_context }
26
26
 
27
- it "returns an adapter_context" do
27
+ it 'returns an adapter_context' do
28
28
  expect(subject.current_adapter_context).to be_a Adapters::ContextBase
29
29
  end
30
30
 
31
- it "returns the same adapter context on the second call" do
31
+ it 'returns the same adapter context on the second call' do
32
32
  ctx = subject.current_adapter_context
33
33
  expect(subject.current_adapter_context).to be ctx
34
34
  end
35
35
 
36
- context "when called with false" do
36
+ context 'when called with false' do
37
37
  it "doesn't initialize the adapter context if there isn't one" do
38
38
  expect(subject.current_adapter_context(false)).to be_nil
39
39
  end
40
40
  end
41
41
  end
42
42
 
43
- context "with a given adapter_context" do
43
+ context 'with a given adapter_context' do
44
44
  around(:each) do |example|
45
45
  subject.with_adapter_context(adapter_context, &example)
46
46
  end
47
47
 
48
- describe "#dynamic_destination" do
49
- let(:dest_name) { "my_new_queue" }
48
+ describe '#dynamic_destination' do
49
+ let(:dest_name) { 'my_new_queue' }
50
50
  let(:dest_options) { {type: 2} }
51
- let(:message_props) { {expires: "soon"} }
52
- let(:created_dest) { double("created destination") }
51
+ let(:message_props) { {expires: 'soon'} }
52
+ let(:created_dest) { double('created destination') }
53
53
  before do
54
54
  adapter_context.stub(:create_destination) { created_dest }
55
55
  end
56
56
 
57
- it "delegates to the adapter_context" do
57
+ it 'delegates to the adapter_context' do
58
58
  result = subject.dynamic_destination(dest_name, dest_options, message_props)
59
59
  expect(result).to be(created_dest)
60
60
 
61
61
  adapter_context.should have_received(:create_destination).with(dest_name, dest_options, message_props)
62
62
  end
63
63
 
64
- it "only requires destination name" do
64
+ it 'only requires destination name' do
65
65
  result = subject.dynamic_destination(dest_name)
66
66
  expect(result).to be(created_dest)
67
67
 
@@ -69,26 +69,26 @@ module MessageDriver
69
69
  end
70
70
  end
71
71
 
72
- describe "#publish" do
73
- let(:destination) { broker.destination(:my_queue, "my_queue", exclusive: true) }
74
- let(:body) { "my message" }
72
+ describe '#publish' do
73
+ let(:destination) { broker.destination(:my_queue, 'my_queue', exclusive: true) }
74
+ let(:body) { 'my message' }
75
75
  let(:headers) { {foo: :bar} }
76
76
  let(:properties) { {bar: :baz} }
77
77
  before do
78
78
  adapter_context.stub(:publish)
79
79
  end
80
80
 
81
- it "delegates to the adapter_context" do
81
+ it 'delegates to the adapter_context' do
82
82
  subject.publish(destination, body, headers, properties)
83
83
  adapter_context.should have_received(:publish).with(destination, body, headers, properties)
84
84
  end
85
85
 
86
- it "only requires destination and body" do
86
+ it 'only requires destination and body' do
87
87
  subject.publish(destination, body)
88
88
  adapter_context.should have_received(:publish).with(destination, body, {}, {})
89
89
  end
90
90
 
91
- it "looks up the destination if necessary" do
91
+ it 'looks up the destination if necessary' do
92
92
  destination
93
93
  subject.publish(:my_queue, body, headers, properties)
94
94
  adapter_context.should have_received(:publish).with(destination, body, headers, properties)
@@ -96,7 +96,7 @@ module MessageDriver
96
96
 
97
97
  context "when the destination can't be found" do
98
98
  let(:bad_dest_name) { :not_a_queue }
99
- it "raises a MessageDriver:NoSuchDestinationError" do
99
+ it 'raises a MessageDriver:NoSuchDestinationError' do
100
100
  expect {
101
101
  subject.publish(bad_dest_name, body, headers, properties)
102
102
  }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/)
@@ -105,20 +105,20 @@ module MessageDriver
105
105
  end
106
106
  end
107
107
 
108
- describe "#pop_message" do
108
+ describe '#pop_message' do
109
109
  let(:expected) { double(MessageDriver::Message) }
110
- let(:destination) { broker.destination(:my_queue, "my_queue", exclusive: true) }
110
+ let(:destination) { broker.destination(:my_queue, 'my_queue', exclusive: true) }
111
111
  let(:options) { {foo: :bar} }
112
112
  before do
113
113
  adapter_context.stub(:pop_message)
114
114
  end
115
115
 
116
- it "delegates to the adapter_context" do
116
+ it 'delegates to the adapter_context' do
117
117
  subject.pop_message(destination, options)
118
118
  adapter_context.should have_received(:pop_message).with(destination, options)
119
119
  end
120
120
 
121
- it "looks up the destination if necessary" do
121
+ it 'looks up the destination if necessary' do
122
122
  destination
123
123
  subject.pop_message(:my_queue, options)
124
124
  adapter_context.should have_received(:pop_message).with(destination, options)
@@ -126,7 +126,7 @@ module MessageDriver
126
126
 
127
127
  context "when the destination can't be found" do
128
128
  let(:bad_dest_name) { :not_a_queue }
129
- it "raises a MessageDriver:NoSuchDestinationError" do
129
+ it 'raises a MessageDriver:NoSuchDestinationError' do
130
130
  expect {
131
131
  subject.pop_message(bad_dest_name, options)
132
132
  }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/)
@@ -134,7 +134,7 @@ module MessageDriver
134
134
  end
135
135
  end
136
136
 
137
- it "requires the destination and returns the message" do
137
+ it 'requires the destination and returns the message' do
138
138
  adapter_context.should_receive(:pop_message).with(destination, {}).and_return(expected)
139
139
 
140
140
  actual = subject.pop_message(destination)
@@ -142,7 +142,7 @@ module MessageDriver
142
142
  expect(actual).to be expected
143
143
  end
144
144
 
145
- it "passes the options through and returns the message" do
145
+ it 'passes the options through and returns the message' do
146
146
  adapter_context.should_receive(:pop_message).with(destination, options).and_return(expected)
147
147
 
148
148
  actual = subject.pop_message(destination, options)
@@ -151,18 +151,18 @@ module MessageDriver
151
151
  end
152
152
  end
153
153
 
154
- describe "#with_message_transaction" do
154
+ describe '#with_message_transaction' do
155
155
  before do
156
156
  adapter_context.stub(:begin_transaction)
157
157
  adapter_context.stub(:commit_transaction)
158
158
  adapter_context.stub(:rollback_transaction)
159
159
  end
160
160
 
161
- context "when the adapter supports transactions" do
161
+ context 'when the adapter supports transactions' do
162
162
  before do
163
163
  adapter_context.stub(:supports_transactions?) { true }
164
164
  end
165
- it "delegates to the adapter context" do
165
+ it 'delegates to the adapter context' do
166
166
  expect { |blk|
167
167
  subject.with_message_transaction(&blk)
168
168
  }.to yield_control
@@ -170,34 +170,34 @@ module MessageDriver
170
170
  adapter_context.should have_received(:commit_transaction)
171
171
  end
172
172
 
173
- context "when the block raises an error" do
174
- it "calls rollback instead of commit and raises the error" do
173
+ context 'when the block raises an error' do
174
+ it 'calls rollback instead of commit and raises the error' do
175
175
  expect {
176
176
  subject.with_message_transaction do
177
- raise "having a tough time"
177
+ raise 'having a tough time'
178
178
  end
179
- }.to raise_error "having a tough time"
179
+ }.to raise_error 'having a tough time'
180
180
  adapter_context.should have_received(:begin_transaction)
181
181
  adapter_context.should_not have_received(:commit_transaction)
182
182
  adapter_context.should have_received(:rollback_transaction)
183
183
  end
184
184
 
185
- context "and the the rollback raises an error" do
186
- it "logs the error from the rollback and raises the original error" do
185
+ context 'and the the rollback raises an error' do
186
+ it 'logs the error from the rollback and raises the original error' do
187
187
  allow(logger).to receive(:error)
188
- adapter_context.stub(:rollback_transaction).and_raise("rollback failed!")
188
+ adapter_context.stub(:rollback_transaction).and_raise('rollback failed!')
189
189
  expect {
190
190
  subject.with_message_transaction do
191
- raise "having a tough time"
191
+ raise 'having a tough time'
192
192
  end
193
- }.to raise_error "having a tough time"
194
- expect(logger).to have_received(:error).with(match("rollback failed!"))
193
+ }.to raise_error 'having a tough time'
194
+ expect(logger).to have_received(:error).with(match('rollback failed!'))
195
195
  end
196
196
  end
197
197
  end
198
198
 
199
- context "when the transactions are nested" do
200
- it "only starts and commits once" do
199
+ context 'when the transactions are nested' do
200
+ it 'only starts and commits once' do
201
201
  expect { |blk|
202
202
  subject.with_message_transaction do
203
203
  subject.with_message_transaction(&blk)
@@ -207,15 +207,15 @@ module MessageDriver
207
207
  adapter_context.should have_received(:commit_transaction).once
208
208
  end
209
209
 
210
- context "when the block raises an error" do
211
- it "calls rollback instead of commit and raises the error" do
210
+ context 'when the block raises an error' do
211
+ it 'calls rollback instead of commit and raises the error' do
212
212
  expect {
213
213
  subject.with_message_transaction do
214
214
  subject.with_message_transaction do
215
- raise "having a tough time"
215
+ raise 'having a tough time'
216
216
  end
217
217
  end
218
- }.to raise_error "having a tough time"
218
+ }.to raise_error 'having a tough time'
219
219
  adapter_context.should have_received(:begin_transaction).once
220
220
  adapter_context.should_not have_received(:commit_transaction)
221
221
  adapter_context.should have_received(:rollback_transaction).once
@@ -236,65 +236,65 @@ module MessageDriver
236
236
  adapter_context.should_not have_received(:commit_transaction)
237
237
  adapter_context.should_not have_received(:rollback_transaction)
238
238
  end
239
- it "logs a warning" do
239
+ it 'logs a warning' do
240
240
  allow(logger).to receive(:debug)
241
241
  expect { |blk|
242
242
  subject.with_message_transaction(&blk)
243
243
  }.to yield_control
244
- expect(logger).to have_received(:debug).with("this adapter does not support transactions")
244
+ expect(logger).to have_received(:debug).with('this adapter does not support transactions')
245
245
  end
246
246
  end
247
247
  end
248
248
 
249
- describe "#ack_message" do
250
- let(:message) { double("message") }
249
+ describe '#ack_message' do
250
+ let(:message) { double('message') }
251
251
  let(:options) { {foo: :bar} }
252
252
  before do
253
253
  allow(message).to receive(:ack)
254
254
  end
255
- it "calls #ack on the message" do
255
+ it 'calls #ack on the message' do
256
256
  subject.ack_message(message)
257
257
  expect(message).to have_received(:ack).with({})
258
258
  end
259
- it "calls #ack on the message and passes the supplied options" do
259
+ it 'calls #ack on the message and passes the supplied options' do
260
260
  subject.ack_message(message, options)
261
261
  expect(message).to have_received(:ack).with(options)
262
262
  end
263
263
  end
264
264
 
265
- describe "#nack_message" do
266
- let(:message) { double("message") }
265
+ describe '#nack_message' do
266
+ let(:message) { double('message') }
267
267
  let(:options) { {foo: :bar} }
268
268
  before do
269
269
  allow(message).to receive(:nack)
270
270
  end
271
- it "calls #nack on the message" do
271
+ it 'calls #nack on the message' do
272
272
  subject.nack_message(message)
273
273
  expect(message).to have_received(:nack).with({})
274
274
  end
275
- it "calls #nack on the message and passes the supplied options" do
275
+ it 'calls #nack on the message and passes the supplied options' do
276
276
  subject.nack_message(message, options)
277
277
  expect(message).to have_received(:nack).with(options)
278
278
  end
279
279
  end
280
280
 
281
- describe "#subscribe" do
282
- let(:destination) { broker.destination(:my_queue, "my_queue", exclusive: true) }
283
- let(:consumer_double) { lambda do |m| end }
281
+ describe '#subscribe' do
282
+ let(:destination) { broker.destination(:my_queue, 'my_queue', exclusive: true) }
283
+ let(:consumer_double) { lambda do |_| end }
284
284
 
285
285
  before do
286
286
  adapter_context.stub(:subscribe)
287
287
  broker.consumer(:my_consumer, &consumer_double)
288
288
  end
289
289
 
290
- it "delegates to the adapter_context" do
290
+ it 'delegates to the adapter_context' do
291
291
  adapter_context.should_receive(:subscribe).with(destination, {}) do |&blk|
292
292
  expect(blk).to be(consumer_double)
293
293
  end
294
294
  subject.subscribe(destination, :my_consumer)
295
295
  end
296
296
 
297
- it "passes the options through" do
297
+ it 'passes the options through' do
298
298
  options = {foo: :bar}
299
299
  adapter_context.should_receive(:subscribe).with(destination, options) do |&blk|
300
300
  expect(blk).to be(consumer_double)
@@ -302,7 +302,7 @@ module MessageDriver
302
302
  subject.subscribe(destination, :my_consumer, options)
303
303
  end
304
304
 
305
- it "looks up the destination" do
305
+ it 'looks up the destination' do
306
306
  adapter_context.should_receive(:subscribe).with(destination, {}) do |&blk|
307
307
  expect(blk).to be(consumer_double)
308
308
  end
@@ -311,7 +311,7 @@ module MessageDriver
311
311
 
312
312
  context "when the destination can't be found" do
313
313
  let(:bad_dest_name) { :not_a_queue }
314
- it "raises a MessageDriver:NoSuchDestinationError" do
314
+ it 'raises a MessageDriver:NoSuchDestinationError' do
315
315
  expect {
316
316
  subject.subscribe(bad_dest_name, :my_consumer)
317
317
  }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/)
@@ -321,7 +321,7 @@ module MessageDriver
321
321
 
322
322
  context "when the consumer can't be found" do
323
323
  let(:bad_consumer_name) { :not_a_consumer }
324
- it "raises a MessageDriver:NoSuchConsumerError" do
324
+ it 'raises a MessageDriver:NoSuchConsumerError' do
325
325
  expect {
326
326
  subject.subscribe(destination, bad_consumer_name)
327
327
  }.to raise_error(MessageDriver::NoSuchConsumerError, /#{bad_consumer_name}/)
@@ -330,22 +330,22 @@ module MessageDriver
330
330
  end
331
331
  end
332
332
 
333
- describe "#subscribe_with" do
334
- let(:destination) { broker.destination(:my_queue, "my_queue", exclusive: true) }
335
- let(:consumer_double) { lambda do |m| end }
333
+ describe '#subscribe_with' do
334
+ let(:destination) { broker.destination(:my_queue, 'my_queue', exclusive: true) }
335
+ let(:consumer_double) { lambda do |_| end }
336
336
 
337
337
  before do
338
338
  adapter_context.stub(:subscribe)
339
339
  end
340
340
 
341
- it "delegates to the adapter_context" do
341
+ it 'delegates to the adapter_context' do
342
342
  adapter_context.should_receive(:subscribe).with(destination, {}) do |&blk|
343
343
  expect(blk).to be(consumer_double)
344
344
  end
345
345
  subject.subscribe_with(destination, &consumer_double)
346
346
  end
347
347
 
348
- it "passes the options through" do
348
+ it 'passes the options through' do
349
349
  options = {foo: :bar}
350
350
  adapter_context.should_receive(:subscribe).with(destination, options) do |&blk|
351
351
  expect(blk).to be(consumer_double)
@@ -353,7 +353,7 @@ module MessageDriver
353
353
  subject.subscribe_with(destination, options, &consumer_double)
354
354
  end
355
355
 
356
- it "looks up the destination" do
356
+ it 'looks up the destination' do
357
357
  adapter_context.should_receive(:subscribe).with(destination, {}) do |&blk|
358
358
  expect(blk).to be(consumer_double)
359
359
  end
@@ -362,7 +362,7 @@ module MessageDriver
362
362
 
363
363
  context "when the destination can't be found" do
364
364
  let(:bad_dest_name) { :not_a_queue }
365
- it "raises a MessageDriver:NoSuchDestinationError" do
365
+ it 'raises a MessageDriver:NoSuchDestinationError' do
366
366
  expect {
367
367
  subject.subscribe_with(bad_dest_name, &consumer_double)
368
368
  }.to raise_error(MessageDriver::NoSuchDestinationError, /#{bad_dest_name}/)
@@ -373,17 +373,17 @@ module MessageDriver
373
373
  end
374
374
  end
375
375
 
376
- context "when used as an included module" do
376
+ context 'when used as an included module' do
377
377
  subject { TestPublisher.new }
378
- it_behaves_like "a Client"
378
+ it_behaves_like 'a Client'
379
379
  end
380
380
 
381
- context "when the module is used directly" do
381
+ context 'when the module is used directly' do
382
382
  subject { described_class }
383
- it_behaves_like "a Client"
383
+ it_behaves_like 'a Client'
384
384
  end
385
385
 
386
- describe ".for_broker" do
386
+ describe '.for_broker' do
387
387
  let(:broker_name) { :my_cool_broker }
388
388
  let(:client) { described_class.for_broker(broker_name) }
389
389
  it "produces a module that extends #{described_class.name}" do
@@ -396,25 +396,25 @@ module MessageDriver
396
396
  expect(client.broker).to be(broker)
397
397
  end
398
398
 
399
- context "when the resulting module is used as an included module" do
399
+ context 'when the resulting module is used as an included module' do
400
400
  subject! do
401
401
  clz = Class.new
402
402
  clz.send :include, client
403
403
  clz.new
404
404
  end
405
- it_behaves_like "a Client"
405
+ it_behaves_like 'a Client'
406
406
  end
407
407
 
408
- context "when the resulting module is used directly" do
409
- it_behaves_like "a Client" do
408
+ context 'when the resulting module is used directly' do
409
+ it_behaves_like 'a Client' do
410
410
  subject! { client }
411
411
  end
412
412
  end
413
413
  end
414
414
 
415
- describe ".[]" do
416
- it "grabs the client for the given broker" do
417
- expected = double("client")
415
+ describe '.[]' do
416
+ it 'grabs the client for the given broker' do
417
+ expected = double('client')
418
418
  allow(Broker).to receive(:client).with(:test_broker).and_return(expected)
419
419
  expect(described_class[:test_broker]).to be expected
420
420
  end