bunny 0.9.0.pre1 → 0.9.0.pre2

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.
@@ -1,6 +1,58 @@
1
- # Changes between Bunny 0.8.x and 0.9.0
1
+ ## Changes between Bunny 0.9.0.pre1 and 0.9.0.pre2
2
2
 
3
- ## New convenience functions: Bunny::Channel#fanout, Bunny::Channel#topic
3
+ ### Change Bunny::Queue#pop default for :ack to false
4
+
5
+ It makes more sense for beginners that way.
6
+
7
+
8
+ ### Bunny::Queue#subscribe now support the new :block option
9
+
10
+ `Bunny::Queue#subscribe` support the new `:block` option
11
+ (a boolean).
12
+
13
+ It controls whether the current thread will be blocked
14
+ by `Bunny::Queue#subscribe`.
15
+
16
+
17
+ ### Bunny::Exchange#publish now supports :key again
18
+
19
+ `Bunny::Exchange#publish` now supports `:key` as an alias for
20
+ `:routing_key`.
21
+
22
+
23
+ ### Bunny::Session#queue et al.
24
+
25
+ `Bunny::Session#queue`, `Bunny::Session#direct`, `Bunny::Session#fanout`, `Bunny::Session#topic`,
26
+ and `Bunny::Session#headers` were added to simplify migration. They all delegate to their respective
27
+ `Bunny::Channel` methods on the default channel every connection has.
28
+
29
+
30
+ ### Bunny::Channel#exchange, Bunny::Session#exchange
31
+
32
+ `Bunny::Channel#exchange` and `Bunny::Session#exchange` were added to simplify
33
+ migration:
34
+
35
+ ``` ruby
36
+ b = Bunny.new
37
+ b.start
38
+
39
+ # uses default connection channel
40
+ x = b.exchange("logs.events", :topic)
41
+ ```
42
+
43
+ ### Bunny::Queue#subscribe now properly takes 3 arguments
44
+
45
+ ``` ruby
46
+ q.subscribe(:exclusive => false, :ack => false) do |delivery_info, properties, payload|
47
+ # ...
48
+ end
49
+ ```
50
+
51
+
52
+
53
+ ## Changes between Bunny 0.8.x and 0.9.0.pre1
54
+
55
+ ### New convenience functions: Bunny::Channel#fanout, Bunny::Channel#topic
4
56
 
5
57
  `Bunny::Channel#fanout`, `Bunny::Channel#topic`, `Bunny::Channel#direct`, `Bunny::Channel#headers`,
6
58
  and`Bunny::Channel#default_exchange` are new convenience methods to instantiate exchanges:
@@ -14,7 +66,7 @@ x = ch.fanout("logging.events", :durable => true)
14
66
  ```
15
67
 
16
68
 
17
- ## Bunny::Queue#pop and consumer handlers (Bunny::Queue#subscribe) signatures have changed
69
+ ### Bunny::Queue#pop and consumer handlers (Bunny::Queue#subscribe) signatures have changed
18
70
 
19
71
  Bunny `< 0.9.x` example:
20
72
 
@@ -51,13 +103,13 @@ The unification moment was the driving factor.
51
103
 
52
104
 
53
105
 
54
- ## Bunny::Client#write now raises Bunny::ConnectionError
106
+ ### Bunny::Client#write now raises Bunny::ConnectionError
55
107
 
56
108
  Bunny::Client#write now raises `Bunny::ConnectionError` instead of `Bunny::ServerDownError` when network
57
109
  I/O operations fail.
58
110
 
59
111
 
60
- ## Bunny::Client.create_channel now uses a bitset-based allocator
112
+ ### Bunny::Client.create_channel now uses a bitset-based allocator
61
113
 
62
114
  Instead of reusing channel instances, `Bunny::Client.create_channel` now opens new channels and
63
115
  uses bitset-based allocator to keep track of used channel ids. This avoids situations when
@@ -67,6 +119,6 @@ long running applications that aggressively open and release channels.
67
119
  This is also how amqp gem and RabbitMQ Java client manage channel ids.
68
120
 
69
121
 
70
- ## Bunny::ServerDownError is now Bunny::TCPConnectionFailed
122
+ ### Bunny::ServerDownError is now Bunny::TCPConnectionFailed
71
123
 
72
124
  `Bunny::ServerDownError` is now an alias for `Bunny::TCPConnectionFailed`
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require "rubygems"
5
+ require "bunny"
6
+
7
+ conn = Bunny.new
8
+ conn.start
9
+
10
+ ch = conn.create_channel
11
+ x = ch.fanout("nba.scores")
12
+
13
+ ch.queue("joe", :auto_delete => true).bind(x).subscribe do |delivery_info, properties, payload|
14
+ puts "#{payload} => joe"
15
+ end
16
+
17
+ ch.queue("aaron", :auto_delete => true).bind(x).subscribe do |delivery_info, properties, payload|
18
+ puts "#{payload} => aaron"
19
+ end
20
+
21
+ ch.queue("bob", :auto_delete => true).bind(x).subscribe do |delivery_info, properties, payload|
22
+ puts "#{payload} => bob"
23
+ end
24
+
25
+ x.publish("BOS 101, NYK 89").publish("ORL 85, ALT 88")
26
+
27
+ conn.close
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require "rubygems"
5
+ require "bunny"
6
+
7
+ conn = Bunny.new
8
+ conn.start
9
+
10
+ ch = conn.create_channel
11
+ q = ch.queue("bunny.examples.hello_world", :auto_delete => true)
12
+ x = ch.default_exchange
13
+
14
+ q.subscribe do |delivery_info, properties, payload|
15
+ puts "Received #{payload}"
16
+ end
17
+
18
+ x.publish("Hello!", :routing_key => q.name)
19
+
20
+ sleep 1.0
21
+ conn.close
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require "rubygems"
5
+ require "bunny"
6
+
7
+ connection = Bunny.new
8
+ connection.start
9
+
10
+ channel = connection.create_channel
11
+ # topic exchange name can be any string
12
+ exchange = channel.topic("weathr", :auto_delete => true)
13
+
14
+ # Subscribers.
15
+ channel.queue("", :exclusive => true).bind(exchange, :routing_key => "americas.north.#").subscribe do |delivery_info, properties, payload|
16
+ puts "An update for North America: #{payload}, routing key is #{delivery_info.routing_key}"
17
+ end
18
+ channel.queue("americas.south").bind(exchange, :routing_key => "americas.south.#").subscribe do |delivery_info, properties, payload|
19
+ puts "An update for South America: #{payload}, routing key is #{delivery_info.routing_key}"
20
+ end
21
+ channel.queue("us.california").bind(exchange, :routing_key => "americas.north.us.ca.*").subscribe do |delivery_info, properties, payload|
22
+ puts "An update for US/California: #{payload}, routing key is #{delivery_info.routing_key}"
23
+ end
24
+ channel.queue("us.tx.austin").bind(exchange, :routing_key => "#.tx.austin").subscribe do |delivery_info, properties, payload|
25
+ puts "An update for Austin, TX: #{payload}, routing key is #{delivery_info.routing_key}"
26
+ end
27
+ channel.queue("it.rome").bind(exchange, :routing_key => "europe.italy.rome").subscribe do |delivery_info, properties, payload|
28
+ puts "An update for Rome, Italy: #{payload}, routing key is #{delivery_info.routing_key}"
29
+ end
30
+ channel.queue("asia.hk").bind(exchange, :routing_key => "asia.southeast.hk.#").subscribe do |delivery_info, properties, payload|
31
+ puts "An update for Hong Kong: #{payload}, routing key is #{delivery_info.routing_key}"
32
+ end
33
+
34
+ exchange.publish("San Diego update", :routing_key => "americas.north.us.ca.sandiego").
35
+ publish("Berkeley update", :routing_key => "americas.north.us.ca.berkeley").
36
+ publish("San Francisco update", :routing_key => "americas.north.us.ca.sanfrancisco").
37
+ publish("New York update", :routing_key => "americas.north.us.ny.newyork").
38
+ publish("São Paolo update", :routing_key => "americas.south.brazil.saopaolo").
39
+ publish("Hong Kong update", :routing_key => "asia.southeast.hk.hongkong").
40
+ publish("Kyoto update", :routing_key => "asia.southeast.japan.kyoto").
41
+ publish("Shanghai update", :routing_key => "asia.southeast.prc.shanghai").
42
+ publish("Rome update", :routing_key => "europe.italy.roma").
43
+ publish("Paris update", :routing_key => "europe.france.paris")
44
+
45
+ sleep 1.0
46
+
47
+ connection.close
@@ -5,7 +5,10 @@ require "bunny/consumer_work_pool"
5
5
 
6
6
  require "bunny/exchange"
7
7
  require "bunny/queue"
8
- require "bunny/message_metadata"
8
+
9
+ require "bunny/delivery_info"
10
+ require "bunny/return_info"
11
+ require "bunny/message_properties"
9
12
 
10
13
  module Bunny
11
14
  class Channel
@@ -106,7 +109,11 @@ module Bunny
106
109
  end
107
110
 
108
111
  def default_exchange
109
- self.direct("", :no_declare => true)
112
+ self.direct(AMQ::Protocol::EMPTY_STRING, :no_declare => true)
113
+ end
114
+
115
+ def exchange(name, opts = {})
116
+ Exchange.new(self, opts.fetch(:type, :direct), name, opts)
110
117
  end
111
118
 
112
119
  def prefetch(prefetch_count)
@@ -158,7 +165,7 @@ module Bunny
158
165
 
159
166
  meta = { :priority => 0, :delivery_mode => 2, :content_type => "application/octet-stream" }.
160
167
  merge(opts)
161
- @connection.send_frameset(AMQ::Protocol::Basic::Publish.encode(@id, payload, meta, exchange_name, routing_key, meta[:mandatory], false, (frame_size || @connection.frame_max)), self)
168
+ @connection.send_frameset(AMQ::Protocol::Basic::Publish.encode(@id, payload, meta, exchange_name, routing_key, meta[:mandatory], false, @connection.frame_max), self)
162
169
 
163
170
  self
164
171
  end
@@ -540,7 +547,7 @@ module Bunny
540
547
  consumer = @consumers[basic_deliver.consumer_tag]
541
548
  if consumer
542
549
  @work_pool.submit do
543
- consumer.call(MessageMetadata.new(basic_deliver, properties), content)
550
+ consumer.call(DeliveryInfo.new(basic_deliver), MessageProperties.new(properties), content)
544
551
  end
545
552
  end
546
553
  end
@@ -549,7 +556,7 @@ module Bunny
549
556
  x = find_exchange(basic_return.exchange)
550
557
 
551
558
  if x
552
- x.handle_return(basic_return, properties, content)
559
+ x.handle_return(ReturnInfo.new(basic_return), MessageProperties.new(properties), content)
553
560
  else
554
561
  # TODO: log a warning
555
562
  end
@@ -0,0 +1,68 @@
1
+ module Bunny
2
+ # Wraps AMQ::Protocol::Basic::Deliver to
3
+ # provide access to the delivery properties as immutable hash as
4
+ # well as methods.
5
+ class DeliveryInfo
6
+
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include Enumerable
12
+
13
+ #
14
+ # API
15
+ #
16
+
17
+ def initialize(basic_deliver)
18
+ @basic_deliver = basic_deliver
19
+ @hash = {
20
+ :consumer_tag => basic_deliver.consumer_tag,
21
+ :delivery_tag => basic_deliver.delivery_tag,
22
+ :redelivered => basic_deliver.redelivered,
23
+ :exchange => basic_deliver.exchange,
24
+ :routing_key => basic_deliver.routing_key
25
+ }
26
+ end
27
+
28
+ def each(*args, &block)
29
+ @hash.each(*args, &block)
30
+ end
31
+
32
+ def [](k)
33
+ @hash[k]
34
+ end
35
+
36
+ def to_hash
37
+ @hash
38
+ end
39
+
40
+ def to_s
41
+ to_hash.to_s
42
+ end
43
+
44
+ def inspect
45
+ to_hash.inspect
46
+ end
47
+
48
+ def consumer_tag
49
+ @basic_deliver.consumer_tag
50
+ end
51
+
52
+ def deliver_tag
53
+ @basic_deliver.deliver_tag
54
+ end
55
+
56
+ def redelivered
57
+ @basic_deliver.redelivered
58
+ end
59
+
60
+ def exchange
61
+ @basic_deliver.exchange
62
+ end
63
+
64
+ def routing_key
65
+ @basic_deliver.routing_key
66
+ end
67
+ end
68
+ end
@@ -90,7 +90,7 @@ module Bunny
90
90
 
91
91
 
92
92
  def publish(payload, opts = {})
93
- @channel.basic_publish(payload, self.name, opts.delete(:routing_key), opts)
93
+ @channel.basic_publish(payload, self.name, (opts.delete(:routing_key) || opts.delete(:key)), opts)
94
94
 
95
95
  self
96
96
  end
@@ -105,15 +105,21 @@ module Bunny
105
105
 
106
106
  def bind(source, opts = {})
107
107
  @channel.exchange_bind(source, self, opts)
108
+
109
+ self
108
110
  end
109
111
 
110
112
  def unbind(source, opts = {})
111
113
  @channel.exchange_unbind(source, self, opts)
114
+
115
+ self
112
116
  end
113
117
 
114
118
 
115
119
  def on_return(&block)
116
120
  @on_return = block
121
+
122
+ self
117
123
  end
118
124
 
119
125
 
@@ -1,7 +1,8 @@
1
1
  module Bunny
2
- # Combines message delivery metadata and message metadata behind a single Hash-like
3
- # immutable data structure that mimics AMQP::Header in amqp gem.
4
- class MessageMetadata
2
+ # Wraps basic properties hash as returned by amq-protocol to
3
+ # provide access to the delivery properties as immutable hash as
4
+ # well as methods.
5
+ class MessageProperties
5
6
 
6
7
  #
7
8
  # Behaviors
@@ -13,30 +14,20 @@ module Bunny
13
14
  # API
14
15
  #
15
16
 
16
- def initialize(basic_deliver, properties)
17
- h = {
18
- :consumer_tag => basic_deliver.consumer_tag,
19
- :delivery_tag => basic_deliver.delivery_tag,
20
- :redelivered => basic_deliver.redelivered,
21
- :exchange => basic_deliver.exchange,
22
- :routing_key => basic_deliver.routing_key
23
- }
24
-
25
- @basic_deliver = basic_deliver
26
- @properties = properties
27
- @combined = properties.merge(h)
17
+ def initialize(properties)
18
+ @properties = properties
28
19
  end
29
20
 
30
21
  def each(*args, &block)
31
- @combined.each(*args, &block)
22
+ @properties.each(*args, &block)
32
23
  end
33
24
 
34
25
  def [](k)
35
- @combined[k]
26
+ @properties[k]
36
27
  end
37
28
 
38
29
  def to_hash
39
- @combined
30
+ @properties
40
31
  end
41
32
 
42
33
  def to_s
@@ -47,26 +38,6 @@ module Bunny
47
38
  to_hash.inspect
48
39
  end
49
40
 
50
- def consumer_tag
51
- @basic_deliver.consumer_tag
52
- end
53
-
54
- def deliver_tag
55
- @basic_deliver.deliver_tag
56
- end
57
-
58
- def redelivered
59
- @basic_deliver.redelivered
60
- end
61
-
62
- def exchange
63
- @basic_deliver.exchange
64
- end
65
-
66
- def routing_key
67
- @basic_deliver.routing_key
68
- end
69
-
70
41
  def content_type
71
42
  @properties[:content_type]
72
43
  end
@@ -64,20 +64,27 @@ module Bunny
64
64
 
65
65
  def bind(exchange, opts = {})
66
66
  @channel.queue_bind(@name, exchange, opts)
67
+
68
+ self
67
69
  end
68
70
 
69
71
  def unbind(exchange, opts = {})
70
72
  @channel.queue_unbind(@name, exchange, opts)
73
+
74
+ self
71
75
  end
72
76
 
73
- def subscribe(opts = {:consumer_tag => "", :ack => false, :exclusive => false}, &block)
77
+ def subscribe(opts = {:consumer_tag => "", :ack => false, :exclusive => false, :block => false}, &block)
74
78
  @channel.basic_consume(@name, opts.fetch(:consumer_tag, ""), !opts[:ack], opts[:exclusive], opts[:arguments], &block)
75
79
 
76
- # joins current thread with the consumers pool
77
- @channel.work_pool.join
80
+ if options[:block]
81
+ # joins current thread with the consumers pool, will block
82
+ # the current thread for as long as the consumer pool is active
83
+ @channel.work_pool.join
84
+ end
78
85
  end
79
86
 
80
- def pop(opts = {:ack => true}, &block)
87
+ def pop(opts = {:ack => false}, &block)
81
88
  delivery_info, properties, content = @channel.basic_get(@name, opts)
82
89
 
83
90
  if block
@@ -88,6 +95,18 @@ module Bunny
88
95
  end
89
96
  alias get pop
90
97
 
98
+ def pop_as_hash(opts = {:ack => false}, &block)
99
+ delivery_info, properties, content = @channel.basic_get(@name, opts)
100
+
101
+ result = {:header => properties, :payload => content, :delivery_details => delivery_info}
102
+
103
+ if block
104
+ block.call(result)
105
+ else
106
+ result
107
+ end
108
+ end
109
+
91
110
 
92
111
  # Deletes the queue
93
112
  # @api public
@@ -97,6 +116,8 @@ module Bunny
97
116
 
98
117
  def purge(opts = {})
99
118
  @channel.queue_purge(@name, opts)
119
+
120
+ self
100
121
  end
101
122
 
102
123
  def status
@@ -0,0 +1,63 @@
1
+ module Bunny
2
+ # Wraps AMQ::Protocol::Basic::Return to
3
+ # provide access to the delivery properties as immutable hash as
4
+ # well as methods.
5
+ class ReturnInfo
6
+
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include Enumerable
12
+
13
+ #
14
+ # API
15
+ #
16
+
17
+ def initialize(basic_return)
18
+ @basic_return = basic_return
19
+ @hash = {
20
+ :reply_code => basic_return.reply_code,
21
+ :reply_text => basic_return.reply_text,
22
+ :exchange => basic_return.exchange,
23
+ :routing_key => basic_return.routing_key
24
+ }
25
+ end
26
+
27
+ def each(*args, &block)
28
+ @hash.each(*args, &block)
29
+ end
30
+
31
+ def [](k)
32
+ @hash[k]
33
+ end
34
+
35
+ def to_hash
36
+ @hash
37
+ end
38
+
39
+ def to_s
40
+ to_hash.to_s
41
+ end
42
+
43
+ def inspect
44
+ to_hash.inspect
45
+ end
46
+
47
+ def reply_code
48
+ @basic_return.reply_code
49
+ end
50
+
51
+ def reply_text
52
+ @basic_return.reply_text
53
+ end
54
+
55
+ def exchange
56
+ @basic_return.exchange
57
+ end
58
+
59
+ def routing_key
60
+ @basic_return.routing_key
61
+ end
62
+ end
63
+ end
@@ -44,7 +44,7 @@ module Bunny
44
44
  # API
45
45
  #
46
46
 
47
- attr_reader :status, :host, :port, :heartbeat, :user, :pass, :vhost, :frame_max, :default_channel
47
+ attr_reader :status, :host, :port, :heartbeat, :user, :pass, :vhost, :frame_max
48
48
  attr_reader :server_capabilities, :server_properties, :server_authentication_mechanisms, :server_locales
49
49
  attr_reader :default_channel
50
50
  attr_reader :channel_id_allocator
@@ -105,11 +105,6 @@ module Bunny
105
105
  @channel0
106
106
  end
107
107
 
108
- def channel
109
- @default_channel
110
- end
111
-
112
-
113
108
  def start
114
109
  @status = :connecting
115
110
 
@@ -133,6 +128,7 @@ module Bunny
133
128
  ch
134
129
  end
135
130
  end
131
+ alias channel create_channel
136
132
 
137
133
  def close
138
134
  if @transport.open?
@@ -171,6 +167,36 @@ module Bunny
171
167
  self.basic_qos(prefetch_count, true)
172
168
  end
173
169
 
170
+
171
+ #
172
+ # Backwards compatibility
173
+ #
174
+
175
+ def queue(*args)
176
+ @default_channel.queue(*args)
177
+ end
178
+
179
+ def direct(*args)
180
+ @default_channel.direct(*args)
181
+ end
182
+
183
+ def fanout(*args)
184
+ @default_channel.fanout(*args)
185
+ end
186
+
187
+ def topic(*args)
188
+ @default_channel.topic(*args)
189
+ end
190
+
191
+ def headers(*args)
192
+ @default_channel.headers(*args)
193
+ end
194
+
195
+ def exchange(*args)
196
+ @default_channel.exchange(*args)
197
+ end
198
+
199
+
174
200
  #
175
201
  # Implementation
176
202
  #
@@ -387,10 +413,6 @@ module Bunny
387
413
 
388
414
  protected
389
415
 
390
- def socket_open?
391
- !@socket.nil? && !@socket.closed?
392
- end
393
-
394
416
  def init_connection
395
417
  self.send_preamble
396
418
 
@@ -39,6 +39,10 @@ module Bunny
39
39
  end
40
40
 
41
41
 
42
+ def hostname
43
+ @host
44
+ end
45
+
42
46
  def uses_tls?
43
47
  @ssl
44
48
  end
@@ -66,7 +70,7 @@ module Bunny
66
70
  @socket.write(*args)
67
71
  end
68
72
  rescue Errno::EPIPE, Errno::EAGAIN, Bunny::ClientTimeout, IOError => e
69
- close!
73
+ close
70
74
  raise Bunny::ConnectionError, e.message
71
75
  end
72
76
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Bunny
4
- VERSION = "0.9.0.pre1"
4
+ VERSION = "0.9.0.pre2"
5
5
  end
@@ -21,8 +21,8 @@ describe Bunny::Queue, "#subscribe" do
21
21
  t = Thread.new do
22
22
  ch = connection.create_channel
23
23
  q = ch.queue(queue_name, :auto_delete => true, :durable => false)
24
- q.subscribe(:exclusive => false, :ack => false) do |metadata, payload|
25
- delivered_keys << metadata.routing_key
24
+ q.subscribe(:exclusive => false, :ack => false) do |delivery_info, properties, payload|
25
+ delivered_keys << delivery_info.routing_key
26
26
  delivered_data << payload
27
27
  end
28
28
  end
@@ -12,7 +12,7 @@ describe "A client-named", Bunny::Queue do
12
12
  q = ch.queue("bunny.tests.queues.client-named#{rand}", :exclusive => true)
13
13
  q.should_not be_server_named
14
14
 
15
- q.bind("amq.fanout").should be_instance_of(AMQ::Protocol::Queue::BindOk)
15
+ q.bind("amq.fanout").should == q
16
16
 
17
17
  ch.close
18
18
  end
@@ -23,7 +23,7 @@ describe "A client-named", Bunny::Queue do
23
23
  q.should_not be_server_named
24
24
 
25
25
  q.bind("amq.fanout")
26
- q.unbind("amq.fanout").should be_instance_of(AMQ::Protocol::Queue::UnbindOk)
26
+ q.unbind("amq.fanout").should == q
27
27
 
28
28
  ch.close
29
29
  end
@@ -33,7 +33,7 @@ describe "A client-named", Bunny::Queue do
33
33
  q = ch.queue("bunny.tests.queues.client-named#{rand}", :exclusive => true)
34
34
 
35
35
  x = ch.fanout("bunny.tests.exchanges.fanout#{rand}")
36
- q.bind(x).should be_instance_of(AMQ::Protocol::Queue::BindOk)
36
+ q.bind(x).should == q
37
37
 
38
38
  x.delete
39
39
  ch.close
@@ -47,7 +47,7 @@ describe "A client-named", Bunny::Queue do
47
47
  x = ch.fanout("bunny.tests.fanout", :auto_delete => true, :durable => false)
48
48
 
49
49
  q.bind(x)
50
- q.unbind(x).should be_instance_of(AMQ::Protocol::Queue::UnbindOk)
50
+ q.unbind(x).should == q
51
51
 
52
52
  ch.close
53
53
  end
@@ -67,7 +67,7 @@ describe "A server-named", Bunny::Queue do
67
67
  q = ch.queue("", :exclusive => true)
68
68
  q.should be_server_named
69
69
 
70
- q.bind("amq.fanout").should be_instance_of(AMQ::Protocol::Queue::BindOk)
70
+ q.bind("amq.fanout").should == q
71
71
 
72
72
  ch.close
73
73
  end
@@ -78,7 +78,7 @@ describe "A server-named", Bunny::Queue do
78
78
  q.should be_server_named
79
79
 
80
80
  q.bind("amq.fanout")
81
- q.unbind("amq.fanout").should be_instance_of(AMQ::Protocol::Queue::UnbindOk)
81
+ q.unbind("amq.fanout").should == q
82
82
 
83
83
  ch.close
84
84
  end
@@ -88,7 +88,7 @@ describe "A server-named", Bunny::Queue do
88
88
  q = ch.queue("", :exclusive => true)
89
89
 
90
90
  x = ch.fanout("bunny.tests.exchanges.fanout#{rand}")
91
- q.bind(x).should be_instance_of(AMQ::Protocol::Queue::BindOk)
91
+ q.bind(x).should == q
92
92
 
93
93
  x.delete
94
94
  ch.close
@@ -101,7 +101,7 @@ describe "A server-named", Bunny::Queue do
101
101
  name = "bunny.tests.exchanges.fanout#{rand}"
102
102
  x = ch.fanout(name)
103
103
  q.bind(x)
104
- q.unbind(name).should be_instance_of(AMQ::Protocol::Queue::UnbindOk)
104
+ q.unbind(name).should == q
105
105
 
106
106
  x.delete
107
107
  ch.close
@@ -42,8 +42,8 @@ describe Bunny::Channel, "#basic_consume" do
42
42
  t = Thread.new do
43
43
  ch = connection.create_channel
44
44
  q = ch.queue(queue_name, :auto_delete => true, :durable => false)
45
- ch.basic_consume(q, "", true, false) do |metadata, payload|
46
- delivered_keys << metadata.routing_key
45
+ ch.basic_consume(q, "", true, false) do |delivery_info, properties, payload|
46
+ delivered_keys << delivery_info.routing_key
47
47
  delivered_data << payload
48
48
  end
49
49
  end
@@ -74,8 +74,8 @@ describe Bunny::Channel, "#basic_consume" do
74
74
  t = Thread.new do
75
75
  ch = connection.create_channel
76
76
  q = ch.queue(queue_name, :auto_delete => true, :durable => false)
77
- ch.basic_consume(q, "", false, false) do |metadata, payload|
78
- delivered_keys << metadata.routing_key
77
+ ch.basic_consume(q, "", false, false) do |delivery_info, properties, payload|
78
+ delivered_keys << delivery_info.routing_key
79
79
  delivered_data << payload
80
80
 
81
81
  ch.close
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: bunny
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: 6
5
- version: 0.9.0.pre1
5
+ version: 0.9.0.pre2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Chris Duncan
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-11-27 00:00:00 Z
17
+ date: 2012-11-30 00:00:00 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: amq-protocol
@@ -52,6 +52,9 @@ files:
52
52
  - bin/ci/before_build.sh
53
53
  - bunny.gemspec
54
54
  - examples/connection/heartbeat.rb
55
+ - examples/guides/getting_started/blabbr.rb
56
+ - examples/guides/getting_started/hello_world.rb
57
+ - examples/guides/getting_started/weathr.rb
55
58
  - lib/bunny.rb
56
59
  - lib/bunny/channel.rb
57
60
  - lib/bunny/channel_id_allocator.rb
@@ -60,13 +63,15 @@ files:
60
63
  - lib/bunny/consumer.rb
61
64
  - lib/bunny/consumer_tag_generator.rb
62
65
  - lib/bunny/consumer_work_pool.rb
66
+ - lib/bunny/delivery_info.rb
63
67
  - lib/bunny/exceptions.rb
64
68
  - lib/bunny/exchange.rb
65
69
  - lib/bunny/framing.rb
66
70
  - lib/bunny/heartbeat_sender.rb
67
71
  - lib/bunny/main_loop.rb
68
- - lib/bunny/message_metadata.rb
72
+ - lib/bunny/message_properties.rb
69
73
  - lib/bunny/queue.rb
74
+ - lib/bunny/return_info.rb
70
75
  - lib/bunny/session.rb
71
76
  - lib/bunny/socket.rb
72
77
  - lib/bunny/system_timer.rb