bunny 1.4.1 → 1.5.0.pre1

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -1
  4. data/ChangeLog.md +19 -5
  5. data/README.md +23 -3
  6. data/examples/guides/extensions/basic_nack.rb +1 -1
  7. data/examples/guides/extensions/dead_letter_exchange.rb +1 -1
  8. data/examples/guides/queues/redeliveries.rb +2 -2
  9. data/lib/bunny.rb +1 -1
  10. data/lib/bunny/channel.rb +34 -21
  11. data/lib/bunny/exceptions.rb +17 -2
  12. data/lib/bunny/exchange.rb +14 -22
  13. data/lib/bunny/queue.rb +19 -12
  14. data/lib/bunny/session.rb +67 -57
  15. data/lib/bunny/version.rb +1 -1
  16. data/spec/config/enabled_plugins +1 -0
  17. data/spec/config/rabbitmq.config +18 -0
  18. data/spec/higher_level_api/integration/basic_ack_spec.rb +29 -2
  19. data/spec/higher_level_api/integration/basic_consume_with_objects_spec.rb +1 -1
  20. data/spec/higher_level_api/integration/basic_nack_spec.rb +5 -5
  21. data/spec/higher_level_api/integration/basic_reject_spec.rb +3 -3
  22. data/spec/higher_level_api/integration/connection_recovery_spec.rb +79 -2
  23. data/spec/higher_level_api/integration/connection_spec.rb +24 -0
  24. data/spec/higher_level_api/integration/dead_lettering_spec.rb +1 -1
  25. data/spec/higher_level_api/integration/exchange_unbind_spec.rb +1 -1
  26. data/spec/higher_level_api/integration/message_properties_access_spec.rb +1 -1
  27. data/spec/issues/issue78_spec.rb +2 -2
  28. data/spec/spec_helper.rb +6 -7
  29. data/spec/tls/ca_certificate.pem +18 -0
  30. data/spec/tls/ca_key.pem +27 -0
  31. data/spec/tls/client_cert.pem +16 -16
  32. data/spec/tls/client_key.pem +25 -25
  33. data/spec/tls/server_cert.pem +16 -16
  34. data/spec/tls/server_key.pem +25 -25
  35. metadata +12 -10
  36. data/.ruby-version +0 -1
  37. data/lib/bunny/compatibility.rb +0 -24
  38. data/spec/compatibility/queue_declare_spec.rb +0 -44
  39. data/spec/compatibility/queue_declare_with_default_channel_spec.rb +0 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 057bcd48a6c1234452c4e61915c28b55d5248f46
4
- data.tar.gz: 6c28bc03055ce2c4b8a3b4d30488619b4ccc562d
3
+ metadata.gz: f2e3f4cbc8cb08e8cebce0b4ae4b87056744fcf4
4
+ data.tar.gz: 17d65911fb9a606ea5d5f7b9af0f21dd811266bf
5
5
  SHA512:
6
- metadata.gz: 68d2af85cca78d231f02e8833afffdfc11c6b1dbbba3e8110d352b20f0412613c194d3353afaa5646dd15026f59cd5bd4a3ddbf87c8b9915ec0c6304c8b0e965
7
- data.tar.gz: 6fcdeea240c210a56a3c0727447d328ce85325dead5fae8067b9a58da7584be4f4156ba78befc92f505587d7dd264b9ca1a3d319794f507ec1aede68fde8c527
6
+ metadata.gz: d16bfeab544fb842e3030bf1aa6fd7e7ed4a97966577934f45b8d5988e2fbd4d33125a1c601c8a44d6ef150b3707df52da07d5ff6519c64a461bdaad1869d6ed
7
+ data.tar.gz: 53766bae9993a4e3b5d064101d28023c435ea19ad051f2b05050674b1609fc4e7efbf644852630b2a7b58ddab362cde94d8360ce1d637d528ea83ed7350eb63d
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ repl-*
20
20
  debug/*
21
21
  *.dump
22
22
  deploy.docs.sh
23
+ .ruby-version
data/.travis.yml CHANGED
@@ -17,7 +17,7 @@ services:
17
17
  branches:
18
18
  only:
19
19
  - master
20
- - 1.1.x-stable
20
+ - 1.4.x-stable
21
21
  matrix:
22
22
  allow_failures:
23
23
  - rvm: rbx
data/ChangeLog.md CHANGED
@@ -1,11 +1,25 @@
1
- ## Changes between Bunny 1.4.0 and 1.4.1
1
+ ## Changes between Bunny 1.4.0 and 1.5.0
2
2
 
3
- ### Prevent Default Channel From Being Re-opened Twice on Recovery
3
+ ### Convenience Method for Temporary (Server-named, Exclusive) Queue Declaration
4
4
 
5
- Bunny's default channel (a relic from the `0.7.x` days when channels were not
6
- even part of the API) is no longer recovered one time too many.
5
+ `Bunny::Channel#temporary_queue` is a convenience method that declares a new
6
+ server-named exclusive queue:
7
7
 
8
- Contributed by Carl Chatfield.
8
+ ``` ruby
9
+ q = ch.temporary_queue
10
+ ```
11
+
12
+ Contributed by Daniel Schierbeck (Zendesk).
13
+
14
+
15
+ ### Host Lists
16
+
17
+ It is now possible to pass the `:hosts` option to `Bunny.new`/`Bunny::Session#initialize`.
18
+ When connection to RabbitMQ (including during connection recovery), a random host
19
+ will be chosen from the list.
20
+
21
+ Connection shuffling and robustness improvements are contributed by
22
+ Andre Foeken (Nedap).
9
23
 
10
24
 
11
25
  ## Changes between Bunny 1.3.0 and 1.4.0
data/README.md CHANGED
@@ -64,11 +64,11 @@ Bunny `0.7.x` and earlier versions support RabbitMQ 1.x and 2.x.
64
64
 
65
65
  ## Project Maturity
66
66
 
67
- Bunny is a mature library (started in early 2009) library with
67
+ Bunny is a mature library (started in early 2009) with
68
68
  a stable public API.
69
69
 
70
70
  Before version 0.9, **a lot** of functionality was missing. Version
71
- 0.9 can be considered to be "second birthday" for Bunny as it was
71
+ 0.9 can be considered to be a "second birthday" for Bunny as it was
72
72
  rewritten from scratch with over a dozen of preview releases over the
73
73
  course of about a year.
74
74
 
@@ -95,7 +95,7 @@ gem install bunny
95
95
  To use Bunny in a project managed with Bundler:
96
96
 
97
97
  ``` ruby
98
- gem "bunny", "~> 1.3.1"
98
+ gem "bunny", "~> 1.4.0"
99
99
  ```
100
100
 
101
101
 
@@ -191,6 +191,26 @@ try to explain what behavior you expected and why. Bonus points for
191
191
  contributing failing test cases.
192
192
 
193
193
 
194
+ ### Running the specs
195
+
196
+ The cleanest way to get the specs running is by starting a clean rabbitmq server
197
+ node on your machine specifically for the bunny specs.
198
+
199
+ Make sure you have a recent version of RabbitMQ (> 3.2) and run the following command
200
+ from the base directory of the gem:
201
+
202
+ `RABBITMQ_NODENAME=bunny RABBITMQ_CONFIG_FILE=./spec/config/rabbitmq RABBITMQ_ENABLED_PLUGINS_FILE=./spec/config/enabled_plugins rabbitmq-server`
203
+
204
+ > The specs use the Rabbitmq management plugin and require an SSL port to be available. The config files in the spec/config directory enable these. Please note that this config uses verify_none because the certificates are expired.
205
+
206
+ Next up you'll need to prepare your node for the specs (Only once):
207
+
208
+ `RABBITMQ_NODENAME=bunny ./bin/ci/before_build.sh`
209
+
210
+ And then run the specs:
211
+
212
+ `RABBITMQ_NODENAME=bunny rspec`
213
+
194
214
  ## Other Ruby RabbitMQ Clients
195
215
 
196
216
  Other widely used Ruby RabbitMQ clients are [March
@@ -18,7 +18,7 @@ q = ch.queue("", :exclusive => true)
18
18
  end
19
19
 
20
20
  20.times do
21
- delivery_info, _, _ = q.pop(:ack => true)
21
+ delivery_info, _, _ = q.pop(:manual_ack => true)
22
22
 
23
23
  if delivery_info.delivery_tag == 20
24
24
  # requeue them all at once with basic.nack
@@ -20,7 +20,7 @@ dlq = ch.queue("", :exclusive => true).bind(dlx)
20
20
  x.publish("")
21
21
  sleep 0.2
22
22
 
23
- delivery_info, _, _ = q.pop(:ack => true)
23
+ delivery_info, _, _ = q.pop(:manual_ack => true)
24
24
  puts "#{dlq.message_count} messages dead lettered so far"
25
25
  puts "Rejecting a message"
26
26
  ch.nack(delivery_info.delivery_tag)
@@ -29,7 +29,7 @@ x = ch3.direct("amq.direct")
29
29
  q1 = ch1.queue("bunny.examples.acknowledgements.explicit", :auto_delete => false)
30
30
  q1.purge
31
31
 
32
- q1.bind(x).subscribe(:ack => true, :block => false) do |delivery_info, properties, payload|
32
+ q1.bind(x).subscribe(:manual_ack => true, :block => false) do |delivery_info, properties, payload|
33
33
  # do some work
34
34
  sleep(0.2)
35
35
 
@@ -46,7 +46,7 @@ q1.bind(x).subscribe(:ack => true, :block => false) do |delivery_info, propertie
46
46
  end
47
47
 
48
48
  q2 = ch2.queue("bunny.examples.acknowledgements.explicit", :auto_delete => false)
49
- q2.bind(x).subscribe(:ack => true, :block => false) do |delivery_info, properties, payload|
49
+ q2.bind(x).subscribe(:manual_ack => true, :block => false) do |delivery_info, properties, payload|
50
50
  # do some work
51
51
  sleep(0.2)
52
52
 
data/lib/bunny.rb CHANGED
@@ -17,7 +17,7 @@ begin
17
17
  require "openssl"
18
18
 
19
19
  require "bunny/ssl_socket"
20
- rescue LoadError => e
20
+ rescue LoadError
21
21
  # no-op
22
22
  end
23
23
 
data/lib/bunny/channel.rb CHANGED
@@ -37,11 +37,10 @@ module Bunny
37
37
  # Channels can be opened either via `Bunny::Session#create_channel` (sufficient in the majority
38
38
  # of cases) or by instantiating `Bunny::Channel` directly:
39
39
  #
40
- # @example Using {Bunny::Session#create_channel}:
41
- # conn = Bunny.new
42
- # conn.start
40
+ # conn = Bunny.new
41
+ # conn.start
43
42
  #
44
- # ch = conn.create_channel
43
+ # ch = conn.create_channel
45
44
  #
46
45
  # This will automatically allocate a channel id.
47
46
  #
@@ -51,10 +50,8 @@ module Bunny
51
50
  # closed, too. Closed channels can no longer be used. Attempts to use them will raise
52
51
  # {Bunny::ChannelAlreadyClosed}.
53
52
  #
54
- # @example
55
- #
56
- # ch = conn.create_channel
57
- # ch.close
53
+ # ch = conn.create_channel
54
+ # ch.close
58
55
  #
59
56
  # ## Higher-level API
60
57
  #
@@ -404,6 +401,16 @@ module Bunny
404
401
  register_queue(q)
405
402
  end
406
403
 
404
+ # Declares a new server-named queue that is automatically deleted when the
405
+ # connection is closed.
406
+ #
407
+ # @return [Bunny::Queue] Queue that was declared
408
+ # @see #queue
409
+ # @api public
410
+ def temporary_queue(opts = {})
411
+ queue("", opts.merge(:exclusive => true))
412
+ end
413
+
407
414
  # @endgroup
408
415
 
409
416
 
@@ -566,7 +573,8 @@ module Bunny
566
573
  # @param [String] queue Queue name
567
574
  # @param [Hash] opts Options
568
575
  #
569
- # @option opts [Boolean] :ack (true) Will this message be acknowledged manually?
576
+ # @option opts [Boolean] :ack (true) [DEPRECATED] Use :manual_ack instead
577
+ # @option opts [Boolean] :manual_ack (true) Will this message be acknowledged manually?
570
578
  #
571
579
  # @return [Array] A triple of delivery info, message properties and message content
572
580
  #
@@ -575,15 +583,20 @@ module Bunny
575
583
  # conn.start
576
584
  # ch = conn.create_channel
577
585
  # # here we assume the queue already exists and has messages
578
- # delivery_info, properties, payload = ch.basic_get("bunny.examples.queue1", :ack => true)
586
+ # delivery_info, properties, payload = ch.basic_get("bunny.examples.queue1", :manual_ack => true)
579
587
  # ch.acknowledge(delivery_info.delivery_tag)
580
588
  # @see Bunny::Queue#pop
581
589
  # @see http://rubybunny.info/articles/queues.html Queues and Consumers guide
582
590
  # @api public
583
- def basic_get(queue, opts = {:ack => true})
591
+ def basic_get(queue, opts = {:manual_ack => true})
584
592
  raise_if_no_longer_open!
585
593
 
586
- @connection.send_frame(AMQ::Protocol::Basic::Get.encode(@id, queue, !(opts[:ack])))
594
+ unless opts[:ack].nil?
595
+ warn "[DEPRECATION] `:ack` is deprecated. Please use `:manual_ack` instead."
596
+ opts[:manual_ack] = opts[:ack]
597
+ end
598
+
599
+ @connection.send_frame(AMQ::Protocol::Basic::Get.encode(@id, queue, !(opts[:manual_ack])))
587
600
  # this is a workaround for the edge case when basic_get is called in a tight loop
588
601
  # and network goes down we need to perform recovery. The problem is, basic_get will
589
602
  # keep blocking the thread that calls it without clear way to constantly unblock it
@@ -675,7 +688,7 @@ module Bunny
675
688
  #
676
689
  # ch = conn.create_channel
677
690
  # # we assume the queue exists and has messages
678
- # delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :ack => true)
691
+ # delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
679
692
  # ch.basic_reject(delivery_info.delivery_tag, true)
680
693
  #
681
694
  # @see Bunny::Channel#basic_nack
@@ -710,7 +723,7 @@ module Bunny
710
723
  #
711
724
  # ch = conn.create_channel
712
725
  # # we assume the queue exists and has messages
713
- # delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :ack => true)
726
+ # delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
714
727
  # ch.basic_ack(delivery_info.delivery_tag)
715
728
  #
716
729
  # @example Ack multiple messages fetched via basic.get
@@ -719,9 +732,9 @@ module Bunny
719
732
  #
720
733
  # ch = conn.create_channel
721
734
  # # we assume the queue exists and has messages
722
- # _, _, payload1 = ch.basic_get("bunny.examples.queue3", :ack => true)
723
- # _, _, payload2 = ch.basic_get("bunny.examples.queue3", :ack => true)
724
- # delivery_info, properties, payload3 = ch.basic_get("bunny.examples.queue3", :ack => true)
735
+ # _, _, payload1 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
736
+ # _, _, payload2 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
737
+ # delivery_info, properties, payload3 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
725
738
  # # ack all fetched messages up to payload3
726
739
  # ch.basic_ack(delivery_info.delivery_tag, true)
727
740
  #
@@ -769,7 +782,7 @@ module Bunny
769
782
  #
770
783
  # ch = conn.create_channel
771
784
  # # we assume the queue exists and has messages
772
- # delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :ack => true)
785
+ # delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
773
786
  # ch.basic_nack(delivery_info.delivery_tag, false, true)
774
787
  #
775
788
  #
@@ -779,9 +792,9 @@ module Bunny
779
792
  #
780
793
  # ch = conn.create_channel
781
794
  # # we assume the queue exists and has messages
782
- # _, _, payload1 = ch.basic_get("bunny.examples.queue3", :ack => true)
783
- # _, _, payload2 = ch.basic_get("bunny.examples.queue3", :ack => true)
784
- # delivery_info, properties, payload3 = ch.basic_get("bunny.examples.queue3", :ack => true)
795
+ # _, _, payload1 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
796
+ # _, _, payload2 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
797
+ # delivery_info, properties, payload3 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
785
798
  # # requeue all fetched messages up to payload3
786
799
  # ch.basic_nack(delivery_info.delivery_tag, true, true)
787
800
  #
@@ -4,6 +4,12 @@ module Bunny
4
4
  class Exception < ::StandardError
5
5
  end
6
6
 
7
+ class HostListDepleted < Exception
8
+ def initialize
9
+ super("No more hosts to try in the supplied list of hosts")
10
+ end
11
+ end
12
+
7
13
  # Indicates a network failure. If automatic network
8
14
  # recovery mode is enabled, these will be typically handled
9
15
  # by the client itself.
@@ -54,7 +60,6 @@ module Bunny
54
60
  end
55
61
  end
56
62
 
57
-
58
63
  # Raised when TCP connection to RabbitMQ fails because of an unresolved
59
64
  # hostname, connectivity problem, etc
60
65
  class TCPConnectionFailed < Exception
@@ -67,7 +72,17 @@ module Bunny
67
72
  when Exception then
68
73
  e.message
69
74
  end
70
- super("Could not establish TCP connection to #{hostname}:#{port}: #{m}")
75
+ if hostname && port
76
+ super("Could not establish TCP connection to #{hostname}:#{port}: #{m}")
77
+ else
78
+ super(m)
79
+ end
80
+ end
81
+ end
82
+
83
+ class TCPConnectionFailedForAllHosts < TCPConnectionFailed
84
+ def initialize
85
+ super("Could not establish TCP connection to any of the configured hosts", nil, nil)
71
86
  end
72
87
  end
73
88
 
@@ -1,5 +1,3 @@
1
- require "bunny/compatibility"
2
-
3
1
  module Bunny
4
2
  # Represents AMQP 0.9.1 exchanges.
5
3
  #
@@ -7,9 +5,6 @@ module Bunny
7
5
  # @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions guide
8
6
  class Exchange
9
7
 
10
- include Bunny::Compatibility
11
-
12
-
13
8
  #
14
9
  # API
15
10
  #
@@ -33,12 +28,12 @@ module Bunny
33
28
  attr_accessor :opts
34
29
 
35
30
 
36
- # The default exchange. Default exchange is a direct exchange that is predefined.
37
- # It cannot be removed. Every queue is bind to this (direct) exchange by default with
38
- # the following routing semantics: messages will be routed to the queue withe same
39
- # same name as message's routing key. In other words, if a message is published with
40
- # a routing key of "weather.usa.ca.sandiego" and there is a queue Q with this name,
41
- # that message will be routed to Q.
31
+ # The default exchange. This exchange is a direct exchange that is predefined by the broker
32
+ # and that cannot be removed. Every queue is bound to this exchange by default with
33
+ # the following routing semantics: messages will be routed to the queue with the same
34
+ # name as the message's routing key. In other words, if a message is published with
35
+ # a routing key of "weather.usa.ca.sandiego" and there is a queue with this name,
36
+ # the message will be routed to the queue.
42
37
  #
43
38
  # @param [Bunny::Channel] channel_or_connection Channel to use. {Bunny::Session} instances
44
39
  # are only supported for backwards compatibility.
@@ -46,11 +41,11 @@ module Bunny
46
41
  # @example Publishing a messages to the tasks queue
47
42
  # channel = Bunny::Channel.new(connection)
48
43
  # tasks_queue = channel.queue("tasks")
49
- # Bunny::Exchange.default(channel).publish("make clean", routing_key => "tasks")
44
+ # Bunny::Exchange.default(channel).publish("make clean", :routing_key => "tasks")
50
45
  #
51
46
  # @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing guide
52
47
  # @see http://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf AMQP 0.9.1 specification (Section 2.1.2.4)
53
- # @note Do not confuse default exchange with amq.direct: amq.direct is a pre-defined direct
48
+ # @note Do not confuse the default exchange with amq.direct: amq.direct is a pre-defined direct
54
49
  # exchange that doesn't have any special routing semantics.
55
50
  # @return [Exchange] An instance that corresponds to the default exchange (of type direct).
56
51
  # @api public
@@ -58,11 +53,10 @@ module Bunny
58
53
  self.new(channel_or_connection, :direct, AMQ::Protocol::EMPTY_STRING, :no_declare => true)
59
54
  end
60
55
 
61
- # @param [Bunny::Channel] channel_or_connection Channel this exchange will use. {Bunny::Session} instances are supported only for
62
- # backwards compatibility with 0.8.
63
- # @param [Symbol,String] type Exchange type
64
- # @param [String] name Exchange name
65
- # @param [Hash] opts Exchange properties
56
+ # @param [Bunny::Channel] channel Channel this exchange will use.
57
+ # @param [Symbol,String] type Exchange type
58
+ # @param [String] name Exchange name
59
+ # @param [Hash] opts Exchange properties
66
60
  #
67
61
  # @option opts [Boolean] :durable (false) Should this exchange be durable?
68
62
  # @option opts [Boolean] :auto_delete (false) Should this exchange be automatically deleted when it is no longer used?
@@ -75,10 +69,8 @@ module Bunny
75
69
  # @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing guide
76
70
  # @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions guide
77
71
  # @api public
78
- def initialize(channel_or_connection, type, name, opts = {})
79
- # old Bunny versions pass a connection here. In that case,
80
- # we just use default channel from it. MK.
81
- @channel = channel_from(channel_or_connection)
72
+ def initialize(channel, type, name, opts = {})
73
+ @channel = channel
82
74
  @name = name
83
75
  @type = type
84
76
  @options = self.class.add_default_options(name, opts)
data/lib/bunny/queue.rb CHANGED
@@ -1,4 +1,3 @@
1
- require "bunny/compatibility"
2
1
  require "bunny/get_response"
3
2
 
4
3
  module Bunny
@@ -8,9 +7,6 @@ module Bunny
8
7
  # @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions guide
9
8
  class Queue
10
9
 
11
- include Bunny::Compatibility
12
-
13
-
14
10
  #
15
11
  # API
16
12
  #
@@ -22,8 +18,7 @@ module Bunny
22
18
  # @return [Hash] Options this queue was created with
23
19
  attr_reader :options
24
20
 
25
- # @param [Bunny::Channel] channel_or_connection Channel this queue will use. {Bunny::Session} instances are supported only for
26
- # backwards compatibility with 0.8.
21
+ # @param [Bunny::Channel] channel Channel this queue will use.
27
22
  # @param [String] name Queue name. Pass an empty string to make RabbitMQ generate a unique one.
28
23
  # @param [Hash] opts Queue properties
29
24
  #
@@ -36,10 +31,10 @@ module Bunny
36
31
  # @see http://rubybunny.info/articles/queues.html Queues and Consumers guide
37
32
  # @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions guide
38
33
  # @api public
39
- def initialize(channel_or_connection, name = AMQ::Protocol::EMPTY_STRING, opts = {})
34
+ def initialize(channel, name = AMQ::Protocol::EMPTY_STRING, opts = {})
40
35
  # old Bunny versions pass a connection here. In that case,
41
36
  # we just use default channel from it. MK.
42
- @channel = channel_from(channel_or_connection)
37
+ @channel = channel
43
38
  @name = name
44
39
  @options = self.class.add_default_options(name, opts)
45
40
  @consumers = Hash.new
@@ -152,6 +147,7 @@ module Bunny
152
147
  #
153
148
  # @param [Hash] opts Options
154
149
  #
150
+ # @option opts [Boolean] :ack (false) [DEPRECATED] Use :manual_ack instead
155
151
  # @option opts [Boolean] :manual_ack (false) Will this consumer use manual acknowledgements?
156
152
  # @option opts [Boolean] :exclusive (false) Should this consumer be exclusive for this queue?
157
153
  # @option opts [Boolean] :block (false) Should the call block calling thread?
@@ -163,17 +159,22 @@ module Bunny
163
159
  # @api public
164
160
  def subscribe(opts = {
165
161
  :consumer_tag => @channel.generate_consumer_tag,
166
- :ack => false,
162
+ :manual_ack => false,
167
163
  :exclusive => false,
168
164
  :block => false,
169
165
  :on_cancellation => nil
170
166
  }, &block)
171
167
 
168
+ unless opts[:ack].nil?
169
+ warn "[DEPRECATION] `:ack` is deprecated. Please use `:manual_ack` instead."
170
+ opts[:manual_ack] = opts[:ack]
171
+ end
172
+
172
173
  ctag = opts.fetch(:consumer_tag, @channel.generate_consumer_tag)
173
174
  consumer = Consumer.new(@channel,
174
175
  self,
175
176
  ctag,
176
- !(opts[:ack] || opts[:manual_ack]),
177
+ !opts[:manual_ack],
177
178
  opts[:exclusive],
178
179
  opts[:arguments])
179
180
 
@@ -208,7 +209,8 @@ module Bunny
208
209
 
209
210
  # @param [Hash] opts Options
210
211
  #
211
- # @option opts [Boolean] :ack (false) Will the message be acknowledged manually?
212
+ # @option opts [Boolean] :ack (false) [DEPRECATED] Use :manual_ack instead
213
+ # @option opts [Boolean] :manual_ack (false) Will the message be acknowledged manually?
212
214
  #
213
215
  # @return [Array] Triple of delivery info, message properties and message content.
214
216
  # If the queue is empty, all three will be nils.
@@ -229,7 +231,12 @@ module Bunny
229
231
  #
230
232
  # puts "This is the message: " + payload + "\n\n"
231
233
  # conn.close
232
- def pop(opts = {:ack => false}, &block)
234
+ def pop(opts = {:manual_ack => false}, &block)
235
+ unless opts[:ack].nil?
236
+ warn "[DEPRECATION] `:ack` is deprecated. Please use `:manual_ack` instead."
237
+ opts[:manual_ack] = opts[:ack]
238
+ end
239
+
233
240
  get_response, properties, content = @channel.basic_get(@name, opts)
234
241
 
235
242
  if block