amq-client 0.7.0.alpha13 → 0.7.0.alpha14
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +4 -1
- data/amq-client.gemspec +1 -1
- data/examples/eventmachine_adapter/authentication/{plain_password_with_incorrect_credentials.rb → plain_password_with_incorrect_credentials_handled_with_a_callback.rb} +1 -1
- data/examples/eventmachine_adapter/authentication/plain_password_with_incorrect_credentials_handled_with_a_rescue_block.rb +19 -0
- data/lib/amq/client/adapter.rb +9 -2
- data/lib/amq/client/adapters/coolio.rb +123 -13
- data/lib/amq/client/adapters/event_machine.rb +5 -2
- data/lib/amq/client/entity.rb +4 -0
- data/lib/amq/client/version.rb +1 -1
- data/spec/integration/coolio/connection_close_spec.rb +20 -0
- data/spec/integration/coolio/connection_start_spec.rb +45 -0
- data/spec/integration/eventmachine/connection_close_spec.rb +20 -0
- data/spec/integration/eventmachine/connection_start_spec.rb +44 -0
- data/spec/unit/client/entity_spec.rb +11 -0
- metadata +70 -42
data/.travis.yml
CHANGED
data/amq-client.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.has_rdoc = true
|
17
17
|
|
18
18
|
# files
|
19
|
-
s.files = `git ls-files`.split("\n").reject { |file| file =~ /^vendor\// }
|
19
|
+
s.files = `git ls-files`.split("\n").reject { |file| file =~ /^vendor\// || file =~ /^gemfiles\// }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
s.extra_rdoc_files = ["README.textile"] + Dir.glob("doc/*")
|
22
22
|
|
@@ -11,7 +11,7 @@ EM.run do
|
|
11
11
|
:password => "a password that is incorrect #{Time.now.to_i}", :on_possible_authentication_failure => Proc.new { |settings|
|
12
12
|
puts "Authentication failed, as expected, settings are: #{settings.inspect}"
|
13
13
|
|
14
|
-
|
14
|
+
EventMachine.stop
|
15
15
|
}) do |client|
|
16
16
|
raise "Should not really be executed"
|
17
17
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
__dir = File.join(File.dirname(File.expand_path(__FILE__)), "..")
|
5
|
+
require File.join(__dir, "example_helper")
|
6
|
+
|
7
|
+
begin
|
8
|
+
EventMachine.run do
|
9
|
+
AMQ::Client::EventMachineClient.connect(:port => 5672,
|
10
|
+
:vhost => "/amq_client_testbed",
|
11
|
+
:user => "amq_client_gem",
|
12
|
+
:password => "a password that is incorrect #{Time.now.to_i}") do |client|
|
13
|
+
raise "Should not really be executed"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
rescue AMQ::Client::PossibleAuthenticationFailureError => afe
|
17
|
+
puts "Authentication failed, as expected. Caught #{afe.inspect}"
|
18
|
+
EventMachine.stop if EventMachine.reactor_running?
|
19
|
+
end
|
data/lib/amq/client/adapter.rb
CHANGED
@@ -109,7 +109,7 @@ module AMQ
|
|
109
109
|
# the block if it is given.
|
110
110
|
#
|
111
111
|
# @example Specifying adapter via the :adapter option
|
112
|
-
# AMQ::Client::Adapter.connect(adapter
|
112
|
+
# AMQ::Client::Adapter.connect(:adapter => "socket")
|
113
113
|
# @example Specifying using custom adapter class
|
114
114
|
# AMQ::Client::SocketClient.connect
|
115
115
|
# @param [Hash] Connection parameters, including :adapter to use.
|
@@ -155,6 +155,14 @@ module AMQ
|
|
155
155
|
def tcp_connection_failure_exception_class
|
156
156
|
@tcp_connection_failure_exception_class ||= AMQ::Client::TCPConnectionFailed
|
157
157
|
end # tcp_connection_failure_exception_class
|
158
|
+
|
159
|
+
# Can be overriden by higher-level libraries like amqp gem or bunny.
|
160
|
+
# Defaults to AMQ::Client::PossibleAuthenticationFailure.
|
161
|
+
#
|
162
|
+
# @return [Class]
|
163
|
+
def authentication_failure_exception_class
|
164
|
+
@authentication_failure_exception_class ||= AMQ::Client::PossibleAuthenticationFailureError
|
165
|
+
end # authentication_failure_exception_class
|
158
166
|
end # ClassMethods
|
159
167
|
|
160
168
|
|
@@ -203,7 +211,6 @@ module AMQ
|
|
203
211
|
# section 2.2.4 of the {http://bit.ly/hw2ELX AMQP 0.9.1 specification}.
|
204
212
|
#
|
205
213
|
# @api plugin
|
206
|
-
# @todo This method should await broker's response with Close-Ok. {http://github.com/michaelklishin MK}.
|
207
214
|
# @see #close_connection
|
208
215
|
def disconnect(reply_code = 200, reply_text = "Goodbye", &block)
|
209
216
|
@intentionally_closing_connection = true
|
@@ -8,32 +8,57 @@ require "amq/client/framing/string/frame"
|
|
8
8
|
|
9
9
|
module AMQ
|
10
10
|
module Client
|
11
|
+
#
|
12
|
+
# CoolioClient is a drop-in replacement for EventMachineClient, if you prefer
|
13
|
+
# cool.io style.
|
14
|
+
#
|
11
15
|
class CoolioClient
|
16
|
+
#
|
17
|
+
# Cool.io socket delegates most of its operations to the parent adapter.
|
18
|
+
# Thus, 99.9% of the time you don't need to deal with this class.
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
# @private
|
12
22
|
class Socket < ::Coolio::TCPSocket
|
13
23
|
attr_accessor :adapter
|
14
24
|
|
25
|
+
# Connects to given host/port and sets parent adapter.
|
26
|
+
#
|
27
|
+
# @param [CoolioClient]
|
28
|
+
# @param [String]
|
29
|
+
# @param [Fixnum]
|
15
30
|
def self.connect(adapter, host, port)
|
16
31
|
socket = super(host, port)
|
17
32
|
socket.adapter = adapter
|
18
33
|
socket
|
19
34
|
end
|
20
35
|
|
36
|
+
# Triggers socket_connect callback
|
21
37
|
def on_connect
|
22
38
|
#puts "On connect"
|
23
|
-
adapter.
|
39
|
+
adapter.socket_connected
|
24
40
|
end
|
25
41
|
|
42
|
+
# Triggers on_read callback
|
26
43
|
def on_read(data)
|
27
44
|
# puts "Received data"
|
28
45
|
# puts_data(data)
|
29
|
-
adapter.
|
46
|
+
adapter.receive_data(data)
|
30
47
|
end
|
31
48
|
|
32
|
-
#
|
49
|
+
# Triggers socket_disconnect callback
|
33
50
|
def on_close
|
34
|
-
adapter.
|
51
|
+
adapter.socket_disconnected
|
52
|
+
end
|
53
|
+
|
54
|
+
# Triggers tcp_connection_failed callback
|
55
|
+
def on_connect_failed
|
56
|
+
adapter.tcp_connection_failed
|
35
57
|
end
|
36
58
|
|
59
|
+
# Sends raw data through the socket
|
60
|
+
#
|
61
|
+
# param [String] Binary data
|
37
62
|
def send_raw(data)
|
38
63
|
# puts "Sending data"
|
39
64
|
# puts_data(data)
|
@@ -41,6 +66,7 @@ module AMQ
|
|
41
66
|
end
|
42
67
|
|
43
68
|
protected
|
69
|
+
# Debugging routine
|
44
70
|
def puts_data(data)
|
45
71
|
puts " As string: #{data.inspect}"
|
46
72
|
puts " As byte array: #{data.bytes.to_a.inspect}"
|
@@ -60,98 +86,182 @@ module AMQ
|
|
60
86
|
# API
|
61
87
|
#
|
62
88
|
|
89
|
+
# Cool.io socket for multiplexing et al.
|
90
|
+
#
|
91
|
+
# @private
|
63
92
|
attr_accessor :socket
|
93
|
+
|
94
|
+
# Hash with available callbacks
|
64
95
|
attr_accessor :callbacks
|
96
|
+
|
97
|
+
# AMQP connections
|
98
|
+
#
|
99
|
+
# @see AMQ::Client::Connection
|
65
100
|
attr_accessor :connections
|
66
101
|
|
102
|
+
# Creates a socket and attaches it to cool.io default loop.
|
103
|
+
#
|
104
|
+
# Called from CoolioClient.connect
|
105
|
+
#
|
106
|
+
# @see AMQ::Client::Adapter::ClassMethods#connect
|
107
|
+
# @param [Hash] connection settings
|
108
|
+
# @api private
|
67
109
|
def establish_connection(settings)
|
68
110
|
socket = Socket.connect(self, settings[:host], settings[:port])
|
69
111
|
socket.attach(Cool.io::Loop.default)
|
70
112
|
self.socket = socket
|
71
113
|
end
|
72
114
|
|
115
|
+
# Registers on_connection callback
|
116
|
+
# @see #on_connection
|
117
|
+
# @api private
|
73
118
|
def register_connection_callback(&block)
|
74
119
|
self.on_connection(&block)
|
75
120
|
end
|
76
121
|
|
122
|
+
# Performs basic initialization. Do not use this method directly, use
|
123
|
+
# CoolioClient.connect instead
|
124
|
+
#
|
125
|
+
# @see AMQ::Client::Adapter::ClassMethods#connect
|
126
|
+
# @api private
|
77
127
|
def initialize
|
78
128
|
# Be careful with default values for #ruby hashes: h = Hash.new(Array.new); h[:key] ||= 1
|
79
129
|
# won't assign anything to :key. MK.
|
80
130
|
@callbacks = {}
|
81
131
|
@connections = []
|
82
132
|
super
|
133
|
+
if settings[:on_tcp_connection_failure]
|
134
|
+
on_tcp_connection_failure(&settings.delete(:on_tcp_connection_failure))
|
135
|
+
end
|
83
136
|
end
|
84
137
|
|
85
|
-
#
|
138
|
+
# Sets a callback for successful connection (after we receive open-ok)
|
139
|
+
#
|
140
|
+
# @api public
|
86
141
|
def on_connection(&block)
|
87
142
|
define_callback :connect, &block
|
88
143
|
end
|
89
144
|
|
90
|
-
#
|
145
|
+
# Sets a callback for disconnection (as in client-side disconnection)
|
146
|
+
#
|
147
|
+
# @api public
|
91
148
|
def on_disconnection(&block)
|
92
149
|
define_callback :disconnect, &block
|
93
150
|
end
|
94
151
|
|
152
|
+
# Sets a callback for tcp connection failure (as in can't make initial connection)
|
153
|
+
def on_tcp_connection_failure(&block)
|
154
|
+
define_callback :tcp_connection_failure, &block
|
155
|
+
end
|
156
|
+
|
157
|
+
# Sets a callback for successful connection (after we receive tune-ok)
|
158
|
+
#
|
159
|
+
# @api public
|
95
160
|
def on_open(&block)
|
96
161
|
define_callback :open, &block
|
97
162
|
end # on_open(&block)
|
98
163
|
|
99
164
|
|
100
|
-
#
|
165
|
+
# Called by AMQ::Client::Connection after we receive connection.open-ok.
|
166
|
+
#
|
167
|
+
# @api private
|
101
168
|
def connection_successful
|
102
169
|
exec_callback_yielding_self(:connect)
|
103
170
|
end
|
104
171
|
|
105
|
-
#
|
172
|
+
# Called by AMQ::Client::Connection after we receive connection.close-ok.
|
173
|
+
#
|
174
|
+
# @api private
|
106
175
|
def disconnection_successful
|
107
176
|
exec_callback_yielding_self(:disconnect)
|
108
177
|
close_connection
|
178
|
+
closed!
|
109
179
|
end
|
110
180
|
|
181
|
+
# Called by AMQ::Client::Connection after we receive connection.tune.
|
182
|
+
#
|
183
|
+
# @api private
|
111
184
|
def open_successful
|
112
185
|
@authenticating = false
|
186
|
+
opened!
|
113
187
|
exec_callback_yielding_self(:open)
|
114
188
|
end # open_successful
|
115
189
|
|
190
|
+
# Called by Socket if it could not connect.
|
191
|
+
#
|
192
|
+
# @api private
|
193
|
+
def tcp_connection_failed
|
194
|
+
if has_callback?(:tcp_connection_failure)
|
195
|
+
exec_callback_yielding_self(:tcp_connection_failure)
|
196
|
+
else
|
197
|
+
raise self.class.tcp_connection_failure_exception_class.new(settings)
|
198
|
+
end
|
199
|
+
end # tcp_connection_failed
|
116
200
|
|
117
|
-
#
|
118
|
-
|
201
|
+
# Called when socket is connected but before handshake is done
|
202
|
+
#
|
203
|
+
# @api private
|
204
|
+
def socket_connected
|
119
205
|
post_init
|
120
206
|
end
|
121
207
|
|
122
|
-
#
|
123
|
-
|
208
|
+
# Called after socket is closed
|
209
|
+
#
|
210
|
+
# @api private
|
211
|
+
def socket_disconnected
|
124
212
|
end
|
125
213
|
|
214
|
+
# Sends raw data through the socket
|
215
|
+
#
|
216
|
+
# @param [String] binary data
|
217
|
+
# @api private
|
126
218
|
def send_raw(data)
|
127
219
|
socket.send_raw data
|
128
220
|
end
|
129
221
|
|
130
222
|
# The story about the buffering is kinda similar to EventMachine,
|
131
223
|
# you keep receiving more than one frame in a single packet.
|
132
|
-
|
224
|
+
#
|
225
|
+
# @param [String] chunk with binary data received. It could be one frame,
|
226
|
+
# more than one frame or less than one frame.
|
227
|
+
# @api private
|
228
|
+
def receive_data(chunk)
|
133
229
|
@chunk_buffer << chunk
|
134
230
|
while frame = get_next_frame
|
135
231
|
receive_frame(AMQ::Client::Framing::String::Frame.decode(frame))
|
136
232
|
end
|
137
233
|
end
|
138
234
|
|
235
|
+
# Closes the socket.
|
236
|
+
#
|
237
|
+
# @api private
|
139
238
|
def close_connection
|
140
239
|
@socket.close
|
141
240
|
end
|
142
241
|
|
242
|
+
# Returns class used for tcp connection failures.
|
243
|
+
#
|
244
|
+
# @api private
|
245
|
+
def self.tcp_connection_failure_exception_class
|
246
|
+
AMQ::Client::TCPConnectionFailed
|
247
|
+
end # self.tcp_connection_failure_exception_class
|
143
248
|
|
144
249
|
protected
|
145
250
|
|
251
|
+
# @api private
|
146
252
|
def post_init
|
147
253
|
reset
|
148
254
|
handshake
|
149
255
|
end
|
150
256
|
|
257
|
+
# @api private
|
151
258
|
def reset
|
152
259
|
@chunk_buffer = ""
|
153
260
|
end
|
154
261
|
|
262
|
+
# Returns next frame from buffer whenever possible
|
263
|
+
#
|
264
|
+
# @api private
|
155
265
|
def get_next_frame
|
156
266
|
return nil unless @chunk_buffer.size > 7 # otherwise, cannot read the length
|
157
267
|
# octet + short
|
@@ -137,10 +137,13 @@ module AMQ
|
|
137
137
|
# EventMachine::Connection's and Adapter's constructors arity
|
138
138
|
# make it easier to use *args. MK.
|
139
139
|
@settings = args.first
|
140
|
-
@on_possible_authentication_failure = @settings[:on_possible_authentication_failure]
|
141
140
|
@on_tcp_connection_failure = @settings[:on_tcp_connection_failure] || Proc.new { |settings|
|
142
141
|
raise self.class.tcp_connection_failure_exception_class.new(settings)
|
143
142
|
}
|
143
|
+
@on_possible_authentication_failure = @settings[:on_possible_authentication_failure] || Proc.new { |settings|
|
144
|
+
raise self.class.authentication_failure_exception_class.new(settings)
|
145
|
+
}
|
146
|
+
|
144
147
|
|
145
148
|
self.reset
|
146
149
|
|
@@ -306,7 +309,7 @@ module AMQ
|
|
306
309
|
end # disconnection_successful
|
307
310
|
|
308
311
|
|
309
|
-
# Called when
|
312
|
+
# Called when previously established TCP connection fails.
|
310
313
|
# @api public
|
311
314
|
def tcp_connection_lost
|
312
315
|
@on_tcp_connection_loss.call(self, @settings) if @on_tcp_connection_loss
|
data/lib/amq/client/entity.rb
CHANGED
@@ -68,6 +68,10 @@ module AMQ
|
|
68
68
|
callbacks = Array(self.callbacks.delete(name))
|
69
69
|
callbacks.map { |c| c.call(self, *args, &block) } if callbacks.any?
|
70
70
|
end
|
71
|
+
|
72
|
+
def has_callback?(name)
|
73
|
+
self.callbacks[name] && !self.callbacks[name].empty?
|
74
|
+
end # has_callback?
|
71
75
|
end
|
72
76
|
|
73
77
|
# AMQ entities, as implemented by AMQ::Client, have callbacks and can run them
|
data/lib/amq/client/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'integration/coolio/spec_helper'
|
3
|
+
|
4
|
+
describe "AMQ::Client::CoolioClient", "Connection.Close", :nojruby => true do
|
5
|
+
include EventedSpec::SpecHelper
|
6
|
+
default_timeout 0.5
|
7
|
+
|
8
|
+
it "should issue a callback and close connection" do
|
9
|
+
coolio do
|
10
|
+
AMQ::Client::CoolioClient.connect do |client|
|
11
|
+
@client = client
|
12
|
+
client.should be_opened
|
13
|
+
client.close do
|
14
|
+
done
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
@client.should be_closed
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'integration/coolio/spec_helper'
|
3
|
+
|
4
|
+
#
|
5
|
+
# We assume that default connection settings (amqp://guest:guest@localhost:5672/) should work
|
6
|
+
#
|
7
|
+
describe "AMQ::Client::CoolioClient", "Connection.Start", :nojruby => true do
|
8
|
+
include EventedSpec::SpecHelper
|
9
|
+
default_timeout 0.5
|
10
|
+
|
11
|
+
context "with valid credentials" do
|
12
|
+
it "should trigger the callback" do
|
13
|
+
coolio do
|
14
|
+
AMQ::Client::CoolioClient.connect do |client|
|
15
|
+
client.should be_opened
|
16
|
+
done
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with invalid credentials" do
|
23
|
+
context "when given an errback" do
|
24
|
+
it "should trigger the errback" do
|
25
|
+
coolio do
|
26
|
+
AMQ::Client::CoolioClient.connect(:port => 12938, :on_tcp_connection_failure => proc { done }) do |client|
|
27
|
+
raise "This callback should never happen"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when given no errback" do
|
34
|
+
it "should raise an error" do
|
35
|
+
expect {
|
36
|
+
coolio do
|
37
|
+
AMQ::Client::CoolioClient.connect(:port => 12938) { }
|
38
|
+
done(0.5)
|
39
|
+
end
|
40
|
+
}.to raise_error(AMQ::Client::TCPConnectionFailed)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'integration/eventmachine/spec_helper'
|
3
|
+
|
4
|
+
describe AMQ::Client::EventMachineClient, "Connection.Close" do
|
5
|
+
include EventedSpec::SpecHelper
|
6
|
+
default_timeout 0.5
|
7
|
+
|
8
|
+
it "should issue a callback and close connection" do
|
9
|
+
em do
|
10
|
+
AMQ::Client::EventMachineClient.connect do |client|
|
11
|
+
@client = client
|
12
|
+
client.should be_opened
|
13
|
+
client.close do
|
14
|
+
done
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
@client.should be_closed
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'integration/eventmachine/spec_helper'
|
3
|
+
|
4
|
+
#
|
5
|
+
# We assume that default connection settings (amqp://guest:guest@localhost:5672/) should work
|
6
|
+
#
|
7
|
+
describe AMQ::Client::EventMachineClient, "Connection.Start" do
|
8
|
+
include EventedSpec::SpecHelper
|
9
|
+
default_timeout 0.5
|
10
|
+
|
11
|
+
context "with valid credentials" do
|
12
|
+
it "should trigger the callback" do
|
13
|
+
em do
|
14
|
+
AMQ::Client::EventMachineClient.connect do |client|
|
15
|
+
done
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "with invalid credentials" do
|
22
|
+
context "when given an errback" do
|
23
|
+
it "should trigger the errback" do
|
24
|
+
em do
|
25
|
+
AMQ::Client::EventMachineClient.connect(:port => 12938, :on_tcp_connection_failure => proc { done }) do |client|
|
26
|
+
raise "This callback should never happen"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when given no errback" do
|
33
|
+
it "should raise an error" do
|
34
|
+
expect {
|
35
|
+
em do
|
36
|
+
AMQ::Client::EventMachineClient.connect(:port => 12938) { }
|
37
|
+
done(0.5)
|
38
|
+
end
|
39
|
+
}.to raise_error(AMQ::Client::TCPConnectionFailed)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -12,6 +12,17 @@ describe AMQ::Client::Entity do
|
|
12
12
|
subject.callbacks.should be_kind_of(Hash)
|
13
13
|
end
|
14
14
|
|
15
|
+
describe "#has_callback?" do
|
16
|
+
it "should return true if entity has at least one callback with given name" do
|
17
|
+
subject.define_callback(:init, proc {})
|
18
|
+
subject.has_callback?(:init).should be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return false if entity doesn't have callbacks with given name" do
|
22
|
+
subject.has_callback?(:init).should be_false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
15
26
|
describe "#exec_callback" do
|
16
27
|
it "executes callback for given event" do
|
17
28
|
proc = Proc.new { |*args, &block|
|
metadata
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: amq-client
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 1369027944
|
5
|
+
prerelease: true
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
- alpha14
|
11
|
+
version: 0.7.0.alpha14
|
6
12
|
platform: ruby
|
7
|
-
authors:
|
13
|
+
authors:
|
8
14
|
- Jakub Stastny
|
9
15
|
- Michael S. Klishin
|
10
16
|
- Theo Hultberg
|
@@ -12,41 +18,46 @@ authors:
|
|
12
18
|
autorequire:
|
13
19
|
bindir: bin
|
14
20
|
cert_chain:
|
15
|
-
date: 2011-04-
|
21
|
+
date: 2011-04-30 00:00:00 +04:00
|
16
22
|
default_executable:
|
17
|
-
dependencies:
|
18
|
-
- !ruby/object:Gem::Dependency
|
23
|
+
dependencies:
|
24
|
+
- !ruby/object:Gem::Dependency
|
19
25
|
name: eventmachine
|
20
|
-
|
26
|
+
prerelease: false
|
27
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
28
|
none: false
|
22
|
-
requirements:
|
23
|
-
- -
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
hash: 3
|
33
|
+
segments:
|
34
|
+
- 0
|
35
|
+
version: "0"
|
26
36
|
type: :runtime
|
27
|
-
|
28
|
-
|
29
|
-
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: *id001
|
38
|
+
- !ruby/object:Gem::Dependency
|
30
39
|
name: amq-protocol
|
31
|
-
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
42
|
none: false
|
33
|
-
requirements:
|
34
|
-
- -
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 3
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
version: "0"
|
37
50
|
type: :runtime
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
cool.io) and supposed to back more opinionated AMQP clients (such as amqp gem, bunny,
|
42
|
-
et cetera) or be used directly in cases when access to more advanced AMQP 0.9.1
|
43
|
-
features is more important that convenient APIs
|
44
|
-
email:
|
51
|
+
version_requirements: *id002
|
52
|
+
description: amq-client supports multiple networking adapters (EventMachine, TCP sockets, cool.io) and supposed to back more opinionated AMQP clients (such as amqp gem, bunny, et cetera) or be used directly in cases when access to more advanced AMQP 0.9.1 features is more important that convenient APIs
|
53
|
+
email:
|
45
54
|
- stastny@101ideas.cz
|
46
55
|
- michael@novemberain.com
|
47
56
|
executables: []
|
57
|
+
|
48
58
|
extensions: []
|
49
|
-
|
59
|
+
|
60
|
+
extra_rdoc_files:
|
50
61
|
- README.textile
|
51
62
|
- doc/_index.html
|
52
63
|
- doc/AMQ.html
|
@@ -57,7 +68,7 @@ extra_rdoc_files:
|
|
57
68
|
- doc/index.html
|
58
69
|
- doc/method_list.html
|
59
70
|
- doc/top-level-namespace.html
|
60
|
-
files:
|
71
|
+
files:
|
61
72
|
- .gitignore
|
62
73
|
- .gitmodules
|
63
74
|
- .rspec
|
@@ -83,7 +94,8 @@ files:
|
|
83
94
|
- examples/coolio_adapter/queue_unbind.rb
|
84
95
|
- examples/eventmachine_adapter/authentication/plain_password_with_custom_role_credentials.rb
|
85
96
|
- examples/eventmachine_adapter/authentication/plain_password_with_default_role_credentials.rb
|
86
|
-
- examples/eventmachine_adapter/authentication/
|
97
|
+
- examples/eventmachine_adapter/authentication/plain_password_with_incorrect_credentials_handled_with_a_callback.rb
|
98
|
+
- examples/eventmachine_adapter/authentication/plain_password_with_incorrect_credentials_handled_with_a_rescue_block.rb
|
87
99
|
- examples/eventmachine_adapter/basic_cancel.rb
|
88
100
|
- examples/eventmachine_adapter/basic_consume.rb
|
89
101
|
- examples/eventmachine_adapter/basic_consume_with_acknowledgements.rb
|
@@ -169,6 +181,8 @@ files:
|
|
169
181
|
- spec/integration/coolio/basic_return_spec.rb
|
170
182
|
- spec/integration/coolio/channel_close_spec.rb
|
171
183
|
- spec/integration/coolio/channel_flow_spec.rb
|
184
|
+
- spec/integration/coolio/connection_close_spec.rb
|
185
|
+
- spec/integration/coolio/connection_start_spec.rb
|
172
186
|
- spec/integration/coolio/spec_helper.rb
|
173
187
|
- spec/integration/coolio/tx_commit_spec.rb
|
174
188
|
- spec/integration/coolio/tx_rollback_spec.rb
|
@@ -177,6 +191,8 @@ files:
|
|
177
191
|
- spec/integration/eventmachine/basic_return_spec.rb
|
178
192
|
- spec/integration/eventmachine/channel_close_spec.rb
|
179
193
|
- spec/integration/eventmachine/channel_flow_spec.rb
|
194
|
+
- spec/integration/eventmachine/connection_close_spec.rb
|
195
|
+
- spec/integration/eventmachine/connection_start_spec.rb
|
180
196
|
- spec/integration/eventmachine/spec_helper.rb
|
181
197
|
- spec/integration/eventmachine/tx_commit_spec.rb
|
182
198
|
- spec/integration/eventmachine/tx_rollback_spec.rb
|
@@ -201,26 +217,38 @@ files:
|
|
201
217
|
has_rdoc: true
|
202
218
|
homepage: http://github.com/ruby-amqp/amq-client
|
203
219
|
licenses: []
|
220
|
+
|
204
221
|
post_install_message:
|
205
222
|
rdoc_options: []
|
206
|
-
|
223
|
+
|
224
|
+
require_paths:
|
207
225
|
- lib
|
208
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
226
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
209
227
|
none: false
|
210
|
-
requirements:
|
211
|
-
- -
|
212
|
-
- !ruby/object:Gem::Version
|
213
|
-
|
214
|
-
|
228
|
+
requirements:
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
hash: 3
|
232
|
+
segments:
|
233
|
+
- 0
|
234
|
+
version: "0"
|
235
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
215
236
|
none: false
|
216
|
-
requirements:
|
217
|
-
- -
|
218
|
-
- !ruby/object:Gem::Version
|
237
|
+
requirements:
|
238
|
+
- - ">"
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
hash: 25
|
241
|
+
segments:
|
242
|
+
- 1
|
243
|
+
- 3
|
244
|
+
- 1
|
219
245
|
version: 1.3.1
|
220
246
|
requirements: []
|
247
|
+
|
221
248
|
rubyforge_project: amq-client
|
222
|
-
rubygems_version: 1.
|
249
|
+
rubygems_version: 1.3.7
|
223
250
|
signing_key:
|
224
251
|
specification_version: 3
|
225
252
|
summary: amq-client is a fully-featured, low-level AMQP 0.9.1 client
|
226
253
|
test_files: []
|
254
|
+
|