bunny 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +0 -3
- data/lib/amqp.rb +6 -4
- data/lib/amqp/buffer.rb +4 -4
- data/lib/amqp/client.rb +2 -2
- data/lib/bunny/exchange.rb +11 -4
- data/lib/bunny/queue.rb +17 -15
- data/spec/exchange_spec.rb +9 -0
- data/spec/queue_spec.rb +22 -1
- metadata +1 -1
data/README.markdown
CHANGED
@@ -113,9 +113,6 @@ Queue#consumer_count
|
|
113
113
|
### Return queue status (array of message count and consumer_count)
|
114
114
|
Queue#status
|
115
115
|
|
116
|
-
### Send an acknowledge message to the server
|
117
|
-
Queue#ack
|
118
|
-
|
119
116
|
### Delete a queue from the target server
|
120
117
|
Queue#delete({_options_})
|
121
118
|
|
data/lib/amqp.rb
CHANGED
@@ -9,8 +9,10 @@ module AMQP
|
|
9
9
|
QUEUE_EMPTY = 'QUEUE EMPTY'
|
10
10
|
|
11
11
|
# specific error definitions
|
12
|
-
class ProtocolError
|
13
|
-
class
|
14
|
-
class
|
15
|
-
class
|
12
|
+
class ProtocolError < StandardError; end
|
13
|
+
class ServerDownError < StandardError; end
|
14
|
+
class BufferOverflowError < StandardError; end
|
15
|
+
class InvalidTypeError < StandardError; end
|
16
|
+
class ConnectionError < StandardError; end
|
17
|
+
class MessageError < StandardError; end
|
16
18
|
end
|
data/lib/amqp/buffer.rb
CHANGED
@@ -132,7 +132,7 @@ module AMQP
|
|
132
132
|
|
133
133
|
@bits.shift
|
134
134
|
else
|
135
|
-
raise
|
135
|
+
raise InvalidTypeError, "Cannot read data of type #{type}"
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
@@ -229,7 +229,7 @@ module AMQP
|
|
229
229
|
write(type, value) unless type == :bit
|
230
230
|
end
|
231
231
|
else
|
232
|
-
raise
|
232
|
+
raise InvalidTypeError, "Cannot write data of type #{type}"
|
233
233
|
end
|
234
234
|
|
235
235
|
self
|
@@ -239,7 +239,7 @@ module AMQP
|
|
239
239
|
begin
|
240
240
|
cur_data, cur_pos = @data.clone, @pos
|
241
241
|
yield self
|
242
|
-
rescue
|
242
|
+
rescue BufferOverflowError
|
243
243
|
@data, @pos = cur_data, cur_pos
|
244
244
|
nil
|
245
245
|
end
|
@@ -253,7 +253,7 @@ module AMQP
|
|
253
253
|
end
|
254
254
|
|
255
255
|
if @pos + size > length
|
256
|
-
raise
|
256
|
+
raise BufferOverflowError
|
257
257
|
else
|
258
258
|
data = @data[@pos,size]
|
259
259
|
@data[@pos,size] = ''
|
data/lib/amqp/client.rb
CHANGED
@@ -129,7 +129,7 @@ module AMQP
|
|
129
129
|
begin
|
130
130
|
socket.__send__(cmd, *args)
|
131
131
|
rescue Errno::EPIPE, IOError => e
|
132
|
-
raise
|
132
|
+
raise ServerDownError, e.message
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
@@ -147,7 +147,7 @@ module AMQP
|
|
147
147
|
end
|
148
148
|
@status = CONNECTED
|
149
149
|
rescue SocketError, SystemCallError, IOError, Timeout::Error => e
|
150
|
-
raise
|
150
|
+
raise ServerDownError, e.message
|
151
151
|
end
|
152
152
|
|
153
153
|
@socket
|
data/lib/bunny/exchange.rb
CHANGED
@@ -7,14 +7,17 @@ class Bunny
|
|
7
7
|
|
8
8
|
def initialize(client, name, opts = {})
|
9
9
|
# check connection to server
|
10
|
-
raise 'Not connected to server' if client.status == NOT_CONNECTED
|
10
|
+
raise ConnectionError, 'Not connected to server' if client.status == NOT_CONNECTED
|
11
11
|
|
12
12
|
@client, @name, @opts = client, name, opts
|
13
13
|
@type = opts[:type] || :direct
|
14
|
-
opts.delete(:type) unless opts[:type].nil?
|
15
14
|
@key = opts[:key]
|
16
15
|
@client.exchanges[@name] ||= self
|
17
|
-
|
16
|
+
|
17
|
+
# ignore the :nowait option if passed, otherwise program will hang waiting for a
|
18
|
+
# response that will not be sent by the server
|
19
|
+
opts.delete(:nowait)
|
20
|
+
|
18
21
|
unless name == "amq.#{type}" or name == ''
|
19
22
|
client.send_frame(
|
20
23
|
Protocol::Exchange::Declare.new(
|
@@ -48,7 +51,11 @@ class Bunny
|
|
48
51
|
client.send_frame(*out)
|
49
52
|
end
|
50
53
|
|
51
|
-
def delete(opts = {})
|
54
|
+
def delete(opts = {})
|
55
|
+
# ignore the :nowait option if passed, otherwise program will hang waiting for a
|
56
|
+
# response that will not be sent by the server
|
57
|
+
opts.delete(:nowait)
|
58
|
+
|
52
59
|
client.send_frame(
|
53
60
|
Protocol::Exchange::Delete.new({ :exchange => name, :nowait => false }.merge(opts))
|
54
61
|
)
|
data/lib/bunny/queue.rb
CHANGED
@@ -8,11 +8,16 @@ class Bunny
|
|
8
8
|
|
9
9
|
def initialize(client, name, opts = {})
|
10
10
|
# check connection to server
|
11
|
-
raise 'Not connected to server' if client.status == NOT_CONNECTED
|
11
|
+
raise ConnectionError, 'Not connected to server' if client.status == NOT_CONNECTED
|
12
12
|
|
13
13
|
@client = client
|
14
14
|
@opts = opts
|
15
15
|
@name = name
|
16
|
+
|
17
|
+
# ignore the :nowait option if passed, otherwise program will hang waiting for a
|
18
|
+
# response that will not be sent by the server
|
19
|
+
opts.delete(:nowait)
|
20
|
+
|
16
21
|
client.send_frame(
|
17
22
|
Protocol::Queue::Declare.new({ :queue => name, :nowait => false }.merge(opts))
|
18
23
|
)
|
@@ -21,9 +26,7 @@ class Bunny
|
|
21
26
|
end
|
22
27
|
|
23
28
|
def pop(opts = {})
|
24
|
-
|
25
|
-
|
26
|
-
# do we want the header?
|
29
|
+
# do we want the message header?
|
27
30
|
hdr = opts.delete(:header)
|
28
31
|
|
29
32
|
client.send_frame(
|
@@ -40,25 +43,15 @@ class Bunny
|
|
40
43
|
elsif !method.is_a?(Protocol::Basic::GetOk)
|
41
44
|
raise ProtocolError, "Error getting message from queue #{name}"
|
42
45
|
end
|
43
|
-
|
44
|
-
self.delivery_tag = method.delivery_tag
|
45
|
-
|
46
|
-
return QUEUE_EMPTY unless !self.delivery_tag.nil?
|
47
46
|
|
48
47
|
header = client.next_payload
|
49
48
|
msg = client.next_payload
|
50
|
-
raise 'unexpected length' if msg.length < header.size
|
49
|
+
raise MessageError, 'unexpected length' if msg.length < header.size
|
51
50
|
|
52
51
|
hdr ? {:header => header, :payload => msg} : msg
|
53
52
|
|
54
53
|
end
|
55
54
|
|
56
|
-
def ack
|
57
|
-
client.send_frame(
|
58
|
-
Protocol::Basic::Ack.new(:delivery_tag => delivery_tag)
|
59
|
-
)
|
60
|
-
end
|
61
|
-
|
62
55
|
def publish(data, opts = {})
|
63
56
|
exchange.publish(data, opts)
|
64
57
|
end
|
@@ -81,6 +74,11 @@ class Bunny
|
|
81
74
|
|
82
75
|
def bind(exchange, opts = {})
|
83
76
|
exchange = exchange.respond_to?(:name) ? exchange.name : exchange
|
77
|
+
|
78
|
+
# ignore the :nowait option if passed, otherwise program will hang waiting for a
|
79
|
+
# response that will not be sent by the server
|
80
|
+
opts.delete(:nowait)
|
81
|
+
|
84
82
|
bindings[exchange] = opts
|
85
83
|
client.send_frame(
|
86
84
|
Protocol::Queue::Bind.new({ :queue => name,
|
@@ -112,6 +110,10 @@ class Bunny
|
|
112
110
|
end
|
113
111
|
|
114
112
|
def delete(opts = {})
|
113
|
+
# ignore the :nowait option if passed, otherwise program will hang waiting for a
|
114
|
+
# response that will not be sent by the server
|
115
|
+
opts.delete(:nowait)
|
116
|
+
|
115
117
|
client.send_frame(
|
116
118
|
Protocol::Queue::Delete.new({ :queue => name, :nowait => false }.merge(opts))
|
117
119
|
)
|
data/spec/exchange_spec.rb
CHANGED
@@ -51,6 +51,10 @@ describe Bunny::Exchange do
|
|
51
51
|
@b.exchanges.has_key?('fanout_exchange').should be true
|
52
52
|
end
|
53
53
|
|
54
|
+
it "should ignore the :nowait option when instantiated" do
|
55
|
+
exch = @b.exchange('direct2_exchange', :nowait => true)
|
56
|
+
end
|
57
|
+
|
54
58
|
it "should be able to publish a message" do
|
55
59
|
exch = @b.exchange('direct_exchange')
|
56
60
|
exch.publish('This is a published message')
|
@@ -62,4 +66,9 @@ describe Bunny::Exchange do
|
|
62
66
|
@b.exchanges.has_key?('direct_exchange').should be false
|
63
67
|
end
|
64
68
|
|
69
|
+
it "should ignore the :nowait option when deleted" do
|
70
|
+
exch = @b.exchange('direct2_exchange')
|
71
|
+
exch.delete(:nowait => true)
|
72
|
+
end
|
73
|
+
|
65
74
|
end
|
data/spec/queue_spec.rb
CHANGED
@@ -8,19 +8,35 @@
|
|
8
8
|
|
9
9
|
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib bunny]))
|
10
10
|
|
11
|
-
describe Bunny do
|
11
|
+
describe Bunny::Queue do
|
12
12
|
|
13
13
|
before(:each) do
|
14
14
|
@b = Bunny.new
|
15
15
|
@b.start
|
16
16
|
end
|
17
17
|
|
18
|
+
it "should ignore the :nowait option when instantiated" do
|
19
|
+
q = @b.queue('test0', :nowait => true)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should ignore the :nowait option when binding to an exchange" do
|
23
|
+
exch = @b.exchange('direct_exch')
|
24
|
+
q = @b.queue('test0')
|
25
|
+
q.bind(exch, :nowait => true)
|
26
|
+
end
|
27
|
+
|
18
28
|
it "should be able to bind to an exchange" do
|
19
29
|
exch = @b.exchange('direct_exch')
|
20
30
|
q = @b.queue('test1')
|
21
31
|
q.bind(exch)
|
22
32
|
end
|
23
33
|
|
34
|
+
it "should ignore the :nowait option when unbinding from an exchange" do
|
35
|
+
exch = @b.exchange('direct_exch')
|
36
|
+
q = @b.queue('test0')
|
37
|
+
q.unbind(exch, :nowait => true)
|
38
|
+
end
|
39
|
+
|
24
40
|
it "should be able to unbind from an exchange" do
|
25
41
|
exch = @b.exchange('direct_exch')
|
26
42
|
q = @b.queue('test1')
|
@@ -64,4 +80,9 @@ describe Bunny do
|
|
64
80
|
@b.queues.has_key?('test1').should be false
|
65
81
|
end
|
66
82
|
|
83
|
+
it "should ignore the :nowait option when deleted" do
|
84
|
+
q = @b.queue('test0')
|
85
|
+
q.delete(:nowait => true)
|
86
|
+
end
|
87
|
+
|
67
88
|
end
|