bunny 1.4.1 → 1.5.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
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