amqp 0.9.10 → 1.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +0 -3
- data/CHANGELOG +4 -0
- data/Gemfile +1 -0
- data/README.md +72 -81
- data/amqp.gemspec +14 -5
- data/docs/08Migration.textile +0 -4
- data/docs/AMQP091ModelExplained.textile +0 -5
- data/docs/Bindings.textile +0 -4
- data/docs/Clustering.textile +0 -4
- data/docs/ConnectingToTheBroker.textile +1 -5
- data/docs/ConnectionEncryptionWithTLS.textile +0 -4
- data/docs/DocumentationGuidesIndex.textile +0 -4
- data/docs/Durability.textile +0 -4
- data/docs/ErrorHandling.textile +40 -106
- data/docs/Exchanges.textile +0 -4
- data/docs/GettingStarted.textile +6 -10
- data/docs/PatternsAndUseCases.textile +1 -4
- data/docs/Queues.textile +0 -4
- data/docs/RabbitMQVersions.textile +0 -4
- data/docs/RunningTests.textile +0 -4
- data/docs/TestingWithEventedSpec.textile +0 -4
- data/docs/Troubleshooting.textile +0 -4
- data/docs/VendorSpecificExtensions.textile +0 -4
- data/examples/error_handling/hello_world_producer.rb +1 -1
- data/examples/issues/issue_121.rb +23 -0
- data/examples/patterns/request_reply/client.rb +2 -1
- data/examples/patterns/request_reply/server.rb +1 -0
- data/examples/publishing/returned_messages.rb +1 -1
- data/lib/amqp.rb +0 -7
- data/lib/amqp/channel.rb +15 -33
- data/lib/amqp/client.rb +2 -2
- data/lib/amqp/compatibility/ruby187_patchlevel_check.rb +4 -4
- data/lib/amqp/connection.rb +0 -1
- data/lib/amqp/consumer.rb +2 -2
- data/lib/amqp/exceptions.rb +1 -10
- data/lib/amqp/exchange.rb +5 -5
- data/lib/amqp/queue.rb +23 -47
- data/lib/amqp/session.rb +4 -4
- data/lib/amqp/version.rb +1 -1
- data/spec/integration/basic_get_spec.rb +24 -80
- data/spec/integration/basic_return_spec.rb +3 -3
- data/spec/integration/channel_level_exception_with_multiple_channels_spec.rb +1 -0
- data/spec/integration/exchange_declaration_spec.rb +102 -71
- data/spec/integration/extensions/rabbitmq/publisher_confirmations_spec.rb +17 -1
- data/spec/integration/fanout_exchange_routing_spec.rb +1 -1
- data/spec/integration/immediate_messages_spec.rb +59 -0
- data/spec/integration/multiple_consumers_per_queue_spec.rb +101 -39
- data/spec/integration/queue_redeclaration_with_incompatible_attributes_spec.rb +12 -25
- data/spec/integration/regressions/concurrent_publishing_on_the_same_channel_spec.rb +1 -1
- data/spec/integration/reply_queue_communication_spec.rb +2 -1
- data/spec/integration/store_and_forward_spec.rb +9 -6
- data/spec/integration/topic_subscription_spec.rb +4 -5
- data/spec/spec_helper.rb +2 -8
- data/spec/unit/amqp/connection_spec.rb +1 -3
- metadata +112 -116
- data/examples/deprecated/default_thread_local_channel_instance.rb +0 -34
- data/examples/legacy/ack.rb +0 -70
- data/examples/legacy/callbacks.rb +0 -45
- data/examples/legacy/clock.rb +0 -74
- data/examples/legacy/hashtable.rb +0 -60
- data/examples/legacy/logger.rb +0 -92
- data/examples/legacy/multiclock.rb +0 -56
- data/examples/legacy/pingpong.rb +0 -51
- data/examples/legacy/primes-simple.rb +0 -29
- data/examples/legacy/primes.rb +0 -74
- data/examples/legacy/stocks.rb +0 -59
- data/lib/amqp/deprecated/fork.rb +0 -17
- data/lib/amqp/deprecated/logger.rb +0 -100
- data/lib/amqp/deprecated/mq.rb +0 -22
- data/lib/amqp/deprecated/rpc.rb +0 -169
- data/lib/amqp/ext/em.rb +0 -3
- data/lib/amqp/ext/emfork.rb +0 -72
- data/lib/amqp/logger.rb +0 -19
- data/lib/amqp/rpc.rb +0 -20
- data/lib/mq.rb +0 -35
- data/lib/mq/logger.rb +0 -4
- data/lib/mq/rpc.rb +0 -4
- data/spec/integration/remove_individual_binding_spec.rb +0 -51
@@ -67,6 +67,22 @@ describe "Publisher confirmation(s)" do
|
|
67
67
|
@channel2 = AMQP::Channel.new
|
68
68
|
end
|
69
69
|
|
70
|
+
it 'should increment publisher_index confirming channel' do
|
71
|
+
channel3 = AMQP::Channel.new
|
72
|
+
exchange = channel3.fanout("amqpgem.tests.fanout0", :auto_delete => true)
|
73
|
+
|
74
|
+
channel3.confirm_select
|
75
|
+
channel3.publisher_index.should == 0
|
76
|
+
|
77
|
+
EventMachine.add_timer(0.5) do
|
78
|
+
exchange.publish("Hi")
|
79
|
+
end
|
80
|
+
|
81
|
+
done(2.0) do
|
82
|
+
channel3.publisher_index.should == 1
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
70
86
|
|
71
87
|
context "when messages are transient" do
|
72
88
|
context "and routable" do
|
@@ -116,7 +132,7 @@ describe "Publisher confirmation(s)" do
|
|
116
132
|
end
|
117
133
|
|
118
134
|
EventMachine.add_timer(0.5) do
|
119
|
-
exchange.publish("Hi", :persistent => false)
|
135
|
+
exchange.publish("Hi", :persistent => false, :immediately => true)
|
120
136
|
end
|
121
137
|
|
122
138
|
done(2.0) do
|
@@ -77,7 +77,7 @@ describe AMQP::Exchange, "of type fanout" do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
# for Rubinius, it is surprisingly slow on this workload
|
80
|
-
done(
|
80
|
+
done(2.5) {
|
81
81
|
[@queue1, @queue2, @queue3].each do |q|
|
82
82
|
@received_messages[q.name].size.should == @expected_number_of_messages[q.name]
|
83
83
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
|
5
|
+
describe "When queue has no consumers" do
|
6
|
+
|
7
|
+
#
|
8
|
+
# Environment
|
9
|
+
#
|
10
|
+
|
11
|
+
include EventedSpec::AMQPSpec
|
12
|
+
default_timeout 1.5
|
13
|
+
|
14
|
+
amqp_before do
|
15
|
+
@producer_channel = AMQP::Channel.new
|
16
|
+
@consumer_channel = AMQP::Channel.new
|
17
|
+
end
|
18
|
+
|
19
|
+
# ...
|
20
|
+
|
21
|
+
|
22
|
+
#
|
23
|
+
# Examples
|
24
|
+
#
|
25
|
+
|
26
|
+
context "and message is published as :immediate" do
|
27
|
+
it "that message is returned to the publisher" do
|
28
|
+
exchange = @producer_channel.fanout("amq.fanout")
|
29
|
+
queue = @consumer_channel.queue("", :exclusive => true)
|
30
|
+
|
31
|
+
exchange.on_return do |basic_return, metadata, payload|
|
32
|
+
done if payload == "immediate message body"
|
33
|
+
end
|
34
|
+
|
35
|
+
queue.bind(exchange) do
|
36
|
+
exchange.publish "immediate message body", :immediate => true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
context "and message is published as non :immediate" do
|
44
|
+
it "that message is dropped" do
|
45
|
+
exchange = @producer_channel.fanout("amq.fanout")
|
46
|
+
queue = @consumer_channel.queue("", :exclusive => true)
|
47
|
+
|
48
|
+
exchange.on_return do |basic_return, metadata, payload|
|
49
|
+
fail "Should not happen"
|
50
|
+
end
|
51
|
+
|
52
|
+
queue.bind(exchange) do
|
53
|
+
exchange.publish "non-immediate message body", :immediate => false
|
54
|
+
end
|
55
|
+
|
56
|
+
done(1.0)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end # describe
|
@@ -58,7 +58,7 @@ describe "Multiple non-exclusive consumers per queue" do
|
|
58
58
|
|
59
59
|
EventMachine.add_timer(1.0) do
|
60
60
|
messages.each do |message|
|
61
|
-
exchange.publish(message, :mandatory => true, :routing_key => queue.name)
|
61
|
+
exchange.publish(message, :immediate => true, :mandatory => true, :routing_key => queue.name)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -104,7 +104,7 @@ describe "Multiple non-exclusive consumers per queue" do
|
|
104
104
|
|
105
105
|
EventMachine.add_timer(1.0) do
|
106
106
|
messages.each do |message|
|
107
|
-
exchange.publish(message, :mandatory => true, :routing_key => queue.name)
|
107
|
+
exchange.publish(message, :immediate => true, :mandatory => true, :routing_key => queue.name)
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
@@ -150,7 +150,7 @@ describe "Multiple non-exclusive consumers per queue" do
|
|
150
150
|
|
151
151
|
EventMachine.add_timer(1.0) do
|
152
152
|
messages.each do |message|
|
153
|
-
exchange.publish(message, :mandatory => true, :routing_key => queue.name)
|
153
|
+
exchange.publish(message, :immediate => true, :mandatory => true, :routing_key => queue.name)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -199,7 +199,7 @@ describe "Multiple non-exclusive consumers per queue" do
|
|
199
199
|
|
200
200
|
EventMachine.add_timer(1.0) do
|
201
201
|
messages.each do |message|
|
202
|
-
exchange.publish(message, :mandatory => true, :routing_key => queue.name)
|
202
|
+
exchange.publish(message, :immediate => true, :mandatory => true, :routing_key => queue.name)
|
203
203
|
end
|
204
204
|
end
|
205
205
|
|
@@ -213,47 +213,109 @@ describe "Multiple non-exclusive consumers per queue" do
|
|
213
213
|
|
214
214
|
|
215
215
|
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
216
|
+
unless ENV["CI"]
|
217
|
+
context "with equal prefetch levels, a server-named queue and two consumers cancelled mid-flight" do
|
218
|
+
it "have messages distributed to the only active consumer" do
|
219
|
+
channel = AMQP::Channel.new
|
220
|
+
channel.on_error do |ch, channel_close|
|
221
|
+
raise(channel_close.reply_text)
|
222
|
+
end
|
222
223
|
|
223
|
-
|
224
|
-
|
225
|
-
|
224
|
+
queue = channel.queue("", :auto_delete => true)
|
225
|
+
consumer1 = AMQP::Consumer.new(channel, queue)
|
226
|
+
consumer2 = AMQP::Consumer.new(channel, queue)
|
226
227
|
|
227
|
-
|
228
|
-
|
229
|
-
|
228
|
+
consumer1.consume.on_delivery do |basic_deliver, metadata, payload|
|
229
|
+
@consumer1_mailbox << payload
|
230
|
+
end
|
230
231
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
232
|
+
consumer2.consume(true).on_delivery do |metadata, payload|
|
233
|
+
@consumer2_mailbox << payload
|
234
|
+
end
|
235
|
+
queue.subscribe do |metadata, payload|
|
236
|
+
@consumer3_mailbox << payload
|
237
|
+
end
|
238
|
+
queue.unsubscribe
|
239
|
+
consumer2.cancel
|
239
240
|
|
240
241
|
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
242
|
+
exchange = channel.default_exchange
|
243
|
+
exchange.on_return do |basic_return, metadata, payload|
|
244
|
+
raise(basic_return.reply_text)
|
245
|
+
end
|
245
246
|
|
246
|
-
|
247
|
-
|
248
|
-
|
247
|
+
EventMachine.add_timer(1.0) do
|
248
|
+
messages.each do |message|
|
249
|
+
exchange.publish(message, :immediate => true, :mandatory => true, :routing_key => queue.name)
|
250
|
+
end
|
249
251
|
end
|
250
|
-
end
|
251
252
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
253
|
+
done(5.0) {
|
254
|
+
@consumer1_mailbox.size.should == 100
|
255
|
+
@consumer2_mailbox.size.should == 0
|
256
|
+
@consumer3_mailbox.size.should == 0
|
257
|
+
}
|
258
|
+
end # it
|
259
|
+
end # context
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
context "with equal prefetch levels and ALL consumers cancelled mid-flight" do
|
264
|
+
it "returns all immediate messages" do
|
265
|
+
@returned_messages = []
|
266
|
+
|
267
|
+
channel = AMQP::Channel.new
|
268
|
+
channel.on_error do |ch, channel_close|
|
269
|
+
raise(channel_close.reply_text)
|
270
|
+
end
|
271
|
+
|
272
|
+
queue = channel.queue("amqpgem.integration.roundrobin.queue1", :auto_delete => true) do
|
273
|
+
consumer1 = AMQP::Consumer.new(channel, queue)
|
274
|
+
consumer2 = AMQP::Consumer.new(channel, queue, "#{queue.name}-consumer-#{rand}-#{Time.now}", false, true)
|
275
|
+
|
276
|
+
consumer1.consume.on_delivery do |basic_deliver, metadata, payload|
|
277
|
+
@consumer1_mailbox << payload
|
278
|
+
end
|
279
|
+
|
280
|
+
consumer2.consume(true).on_delivery do |metadata, payload|
|
281
|
+
@consumer2_mailbox << payload
|
282
|
+
end
|
283
|
+
|
284
|
+
queue.subscribe do |metadata, payload|
|
285
|
+
@consumer3_mailbox << payload
|
286
|
+
end
|
287
|
+
queue.should be_subscribed
|
288
|
+
queue.unsubscribe
|
289
|
+
queue.should_not be_subscribed
|
290
|
+
|
291
|
+
consumer2.should be_subscribed
|
292
|
+
consumer2.callback.should_not be_nil
|
293
|
+
consumer2.cancel
|
294
|
+
consumer2.should_not be_subscribed
|
295
|
+
consumer2.callback.should be_nil
|
296
|
+
|
297
|
+
consumer1.should be_subscribed
|
298
|
+
consumer1.callback.should_not be_nil
|
299
|
+
consumer1.cancel
|
300
|
+
consumer1.should_not be_subscribed
|
301
|
+
consumer1.callback.should be_nil
|
302
|
+
end
|
303
|
+
|
304
|
+
exchange = channel.default_exchange
|
305
|
+
exchange.on_return do |basic_return, metadata, payload|
|
306
|
+
@returned_messages << payload
|
307
|
+
end
|
308
|
+
|
309
|
+
EventMachine.add_timer(1.0) do
|
310
|
+
messages.each do |message|
|
311
|
+
exchange.publish(message, :immediate => true, :mandatory => true, :routing_key => queue.name)
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
done(6.0) {
|
316
|
+
@returned_messages.size.should == 100
|
317
|
+
}
|
318
|
+
end # it
|
319
|
+
end # context
|
320
|
+
end
|
259
321
|
end # describe
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe AMQP do
|
6
6
|
|
7
7
|
#
|
8
8
|
# Environment
|
@@ -17,7 +17,7 @@ describe "AMQP queue redeclaration with different attributes" do
|
|
17
17
|
# Examples
|
18
18
|
#
|
19
19
|
|
20
|
-
context "when
|
20
|
+
context "when queue is redeclared with different attributes" do
|
21
21
|
let(:name) { "amqp-gem.nondurable.queue" }
|
22
22
|
let(:options) {
|
23
23
|
{ :durable => false, :exclusive => true, :auto_delete => true, :arguments => {}, :passive => false }
|
@@ -25,48 +25,35 @@ describe "AMQP queue redeclaration with different attributes" do
|
|
25
25
|
let(:different_options) {
|
26
26
|
{ :durable => true, :exclusive => true, :auto_delete => true, :arguments => {}, :passive => false}
|
27
27
|
}
|
28
|
+
let(:irrelevant_different_options) {
|
29
|
+
{ :durable => false, :exclusive => true, :auto_delete => true, :arguments => {}, :passive => false, :header => {:random => 'stuff' } }
|
30
|
+
}
|
28
31
|
|
29
32
|
|
30
33
|
it "should raise AMQP::IncompatibleOptionsError for incompatable options" do
|
31
34
|
channel = AMQP::Channel.new
|
32
|
-
channel.on_error do |ch,
|
33
|
-
@
|
35
|
+
channel.on_error do |ch, close|
|
36
|
+
@callback_fired = true
|
34
37
|
end
|
35
38
|
|
36
39
|
channel.queue(name, options)
|
37
40
|
expect {
|
38
41
|
channel.queue(name, different_options)
|
39
42
|
}.to raise_error(AMQP::IncompatibleOptionsError)
|
40
|
-
|
41
|
-
done(0.5) {
|
42
|
-
@error_code.should == 406
|
43
|
-
}
|
43
|
+
done
|
44
44
|
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context "when :headers are different" do
|
48
|
-
let(:name) { "amqp-gem.nondurable.queue" }
|
49
|
-
let(:options) {
|
50
|
-
{ :durable => false, :exclusive => true, :auto_delete => true, :arguments => {}, :passive => false }
|
51
|
-
}
|
52
|
-
let(:different_options) {
|
53
|
-
{ :durable => false, :exclusive => true, :auto_delete => true, :arguments => {}, :passive => false, :header => {:random => 'stuff' } }
|
54
|
-
}
|
55
45
|
|
56
46
|
it "should not raise AMQP::IncompatibleOptionsError for irrelevant options" do
|
57
47
|
channel = AMQP::Channel.new
|
58
|
-
channel.on_error do |ch,
|
59
|
-
@
|
48
|
+
channel.on_error do |ch, close|
|
49
|
+
@callback_fired = true
|
60
50
|
end
|
61
51
|
|
62
52
|
channel.queue(name, options)
|
63
53
|
expect {
|
64
|
-
channel.queue(name,
|
54
|
+
channel.queue(name, irrelevant_different_options)
|
65
55
|
}.to_not raise_error(AMQP::IncompatibleOptionsError)
|
66
|
-
|
67
|
-
done(0.5) {
|
68
|
-
@error_code.should == 406
|
69
|
-
}
|
56
|
+
done
|
70
57
|
end
|
71
58
|
end
|
72
59
|
end # describe AMQP
|
@@ -73,7 +73,7 @@ if mri?
|
|
73
73
|
20.times do
|
74
74
|
Thread.new do
|
75
75
|
messages.each do |message|
|
76
|
-
exchange.publish(message, :routing_key => queue.name, :mandatory => true)
|
76
|
+
exchange.publish(message, :routing_key => queue.name, :immediate => true, :mandatory => true)
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -53,16 +53,19 @@ describe "Store-and-forward routing" do
|
|
53
53
|
@queue.subscribe(:ack => false) do |payload|
|
54
54
|
payload.should_not be_nil
|
55
55
|
number_of_received_messages += 1
|
56
|
-
|
56
|
+
if RUBY_VERSION =~ /^1.9/
|
57
|
+
payload.force_encoding("UTF-8").should == dispatched_data
|
58
|
+
else
|
59
|
+
payload.should == dispatched_data
|
60
|
+
end
|
57
61
|
end # subscribe
|
58
62
|
|
59
|
-
|
60
|
-
|
61
|
-
@exchange.publish(dispatched_data, :routing_key => @queue_name)
|
62
|
-
end
|
63
|
+
expected_number_of_messages.times do
|
64
|
+
@exchange.publish(dispatched_data, :routing_key => @queue_name)
|
63
65
|
end
|
64
66
|
|
65
|
-
|
67
|
+
# 6 seconds are for Rubinius, it is surprisingly slow on this workload
|
68
|
+
done(6.0) {
|
66
69
|
number_of_received_messages.should == expected_number_of_messages
|
67
70
|
@queue.unsubscribe
|
68
71
|
}
|
@@ -66,9 +66,9 @@ describe "Topic-based subscription" do
|
|
66
66
|
# publish some messages none of our queues should be receiving
|
67
67
|
3.times do
|
68
68
|
@exchange.publish(626 + rand(1000)/400.0, :key => "nasdaq.goog")
|
69
|
-
end
|
69
|
+
end # do
|
70
70
|
|
71
|
-
done(0.
|
71
|
+
done(0.4) {
|
72
72
|
received_messages.should == expected_messages
|
73
73
|
@aapl_queue.unsubscribe
|
74
74
|
@amzn_queue.unsubscribe
|
@@ -117,7 +117,7 @@ describe "Topic-based subscription" do
|
|
117
117
|
@exchange.publish("Blatche, Wall lead Wizards over Jazz 108-101", :key => "sports.nba.jazz")
|
118
118
|
@exchange.publish("Deron Williams Receives NBA Cares Community Assist Award", :key => "sports.nba.jazz")
|
119
119
|
|
120
|
-
done(0.
|
120
|
+
done(0.2) {
|
121
121
|
received_messages.should == expected_messages
|
122
122
|
|
123
123
|
@nba_queue.unsubscribe
|
@@ -151,7 +151,6 @@ describe "Topic-based subscription" do
|
|
151
151
|
@celtics_queue.name => 3
|
152
152
|
}
|
153
153
|
|
154
|
-
|
155
154
|
@sports_queue.bind(@exchange, :key => "sports.#").subscribe do |payload|
|
156
155
|
received_messages[@sports_queue.name] += 1
|
157
156
|
end
|
@@ -181,7 +180,7 @@ describe "Topic-based subscription" do
|
|
181
180
|
@exchange.publish("Philadelphia's Daniel Briere has been named as an All-Star replacement for Jarome Iginla.", :key => "sports.nhl.allstargame")
|
182
181
|
@exchange.publish("Devils blank Sid- and Malkin-less Penguins 2-0", :key => "sports.nhl.penguins")
|
183
182
|
|
184
|
-
done(0.
|
183
|
+
done(0.2) {
|
185
184
|
received_messages.should == expected_messages
|
186
185
|
|
187
186
|
@sports_queue.unsubscribe
|
data/spec/spec_helper.rb
CHANGED
@@ -15,12 +15,6 @@ puts "Using Ruby #{RUBY_VERSION}, amq-client #{AMQ::Client::VERSION} and amq-pro
|
|
15
15
|
|
16
16
|
amqp_config = File.dirname(__FILE__) + '/amqp.yml'
|
17
17
|
|
18
|
-
port = if ENV["TRACER"]
|
19
|
-
5673
|
20
|
-
else
|
21
|
-
5672
|
22
|
-
end
|
23
|
-
|
24
18
|
if File.exists? amqp_config
|
25
19
|
class Hash
|
26
20
|
def symbolize_keys
|
@@ -34,7 +28,7 @@ if File.exists? amqp_config
|
|
34
28
|
end
|
35
29
|
AMQP_OPTS = YAML::load_file(amqp_config).symbolize_keys[:test]
|
36
30
|
else
|
37
|
-
AMQP_OPTS = {:host => 'localhost', :port =>
|
31
|
+
AMQP_OPTS = {:host => 'localhost', :port => 5672}
|
38
32
|
end
|
39
33
|
|
40
34
|
# puts "AMQP_OPTS = #{AMQP_OPTS.inspect}"
|
@@ -88,4 +82,4 @@ module PlatformDetection
|
|
88
82
|
def rubinius?
|
89
83
|
defined?(RUBY_ENGINE) && (RUBY_ENGINE == 'rbx')
|
90
84
|
end
|
91
|
-
end
|
85
|
+
end
|