amqp 0.8.0.rc1 → 0.8.0.rc2

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 (33) hide show
  1. data/CHANGELOG +15 -3
  2. data/README.textile +4 -5
  3. data/amqp.gemspec +1 -1
  4. data/docs/RabbitMQVersions.textile +21 -0
  5. data/examples/extensions/rabbitmq/per_queue_message_ttl.rb +57 -0
  6. data/examples/tls_certificates/client/cert.pem +18 -0
  7. data/examples/tls_certificates/client/key.pem +27 -0
  8. data/examples/tls_certificates/client/keycert.p12 +0 -0
  9. data/examples/tls_certificates/client/req.pem +15 -0
  10. data/examples/tls_certificates/server/cert.pem +18 -0
  11. data/examples/tls_certificates/server/key.pem +27 -0
  12. data/examples/tls_certificates/server/keycert.p12 +0 -0
  13. data/examples/tls_certificates/server/req.pem +15 -0
  14. data/examples/tls_certificates/testca/cacert.cer +0 -0
  15. data/examples/tls_certificates/testca/cacert.pem +17 -0
  16. data/examples/tls_certificates/testca/certs/01.pem +18 -0
  17. data/examples/tls_certificates/testca/certs/02.pem +18 -0
  18. data/examples/tls_certificates/testca/index.txt +2 -0
  19. data/examples/tls_certificates/testca/index.txt.attr +1 -0
  20. data/examples/tls_certificates/testca/index.txt.attr.old +1 -0
  21. data/examples/tls_certificates/testca/index.txt.old +1 -0
  22. data/examples/tls_certificates/testca/openssl.cnf +53 -0
  23. data/examples/tls_certificates/testca/private/cakey.pem +27 -0
  24. data/examples/tls_certificates/testca/serial +1 -0
  25. data/examples/tls_certificates/testca/serial.old +1 -0
  26. data/lib/amqp/channel.rb +9 -4
  27. data/lib/amqp/exchange.rb +4 -1
  28. data/lib/amqp/queue.rb +8 -2
  29. data/lib/amqp/version.rb +1 -1
  30. data/spec/integration/automatic_binding_for_default_direct_exchange_spec.rb +11 -3
  31. data/spec/integration/basic_get_spec.rb +7 -3
  32. data/spec/integration/queue_declaration_spec.rb +45 -8
  33. metadata +56 -61
data/CHANGELOG CHANGED
@@ -1,14 +1,26 @@
1
1
  = Version 0.8.0
2
2
 
3
+ * [API] AMQP::Exchange#initialize now accepts :arguments option that takes a hash. Brokers
4
+ may implement AMQP extensions using (usually x-prefixed) declaration arguments.
5
+ * [API] AMQP::Queue#initialize now accepts :arguments option that takes a hash. RabbitMQ
6
+ recognizes x-message-ttl argument and uses it as message TTL in milliseconds for
7
+ queue that is being declared.
8
+ * [API] AMQP#Logger is deprecated. It will be removed before 1.0 release.
9
+ * [API] AMQP#fork is deprecated. It will be removed before 1.0 release.
10
+ * [API] AMQP::RPC is deprecated. It will be removed before 1.0 release.
11
+ * [FEATURE] Significant improvements to the documentation
12
+ * [FEATURE] Support for RabbitMQ extensions to AMQP 0.9.1
13
+ * [API] AMQP::Exchange#publish now accepts (an optional) block that is called as soon as message
14
+ is considered published (EventMachine loop has pushed payload down the network stack).
3
15
  * [API] AMQP::Channel.new now accepts (an optional) block and yields newly opened channel to it as soon as
4
16
  channel.open-ok arrives from the broker.
5
17
  * [API] AMQP::Header#ack now can acknowledge multiple deliveries
6
18
  * [API] AMQP::Exchange#delete now takes (an optional) block that is called when exchange.delete-ok response arrives.
7
19
  * [API] AMQP::Header now implements #to_hash
8
- * [API] AMQP::Queue#pop block now can take 1, 2 or 7 (that's right) arguments.
20
+ * [API] AMQP::Queue#pop block now can take 1, 2 or 3 arguments.
9
21
  1 argument means handler is only interested in content payload
10
- 2 arguments means handler is interested in headers and the content
11
- 7 arguments means handlers wants all the properties get-ok (or get-empty) carries
22
+ 2 arguments mean handler is interested in headers and the content
23
+ 3 arguments mean handler is interested in headers, content and AMQP method instance
12
24
  * [API] AMQP::Queue#purge now takes an optional block which is called when queue.purge-ok response arrives.
13
25
  * [API] AMQP::Queue#delete now takes an optional block which is called when queue.delete-ok response arrives.
14
26
  * [API] AMQP::Queue#delete now accepts :nowait option.
@@ -52,9 +52,7 @@ h3. Install RabbitMQ
52
52
 
53
53
  Please refer to "RabbitMQ installation guide":http://www.rabbitmq.com/install.html
54
54
  Note that for Ubuntu and Debian we strongly advice that you use "RabbitMQ apt repository":http://www.rabbitmq.com/debian.html#apt
55
- that has recent versions of RabbitMQ. Ubuntu (even 10.10) and Debian both "ship with old RabbitMQ version":http://packages.ubuntu.com/maverick/rabbitmq-server,
56
- that only supports AMQP protocol 0.8. amqp gem 0.8.0 and later *will not work with RabbitMQ versions
57
- before 2.0*.
55
+ that has recent versions of RabbitMQ. Learn more in {file:docs/RabbitMQVersions.textile RabbitMQ versions} section.
58
56
 
59
57
 
60
58
  h3. Install the gem
@@ -146,7 +144,7 @@ gem "amqp", :git => "git://github.com/ruby-amqp/amqp.git", :branch => "master"
146
144
  h2. Examples
147
145
 
148
146
  You can find many examples (both real-world cases and simple demonstrations)
149
- "under examples directory":https://github.com/ruby-amqp/amqp/tree/master/examples in the repository.
147
+ under "examples directory":https://github.com/ruby-amqp/amqp/tree/master/examples in the repository.
150
148
 
151
149
 
152
150
 
@@ -183,7 +181,8 @@ h2. Community
183
181
 
184
182
  h2. License
185
183
 
186
- AMQP gem is licensed under the "Ruby License:"http://www.ruby-lang.org/en/LICENSE.txt.
184
+ AMQP gem is licensed under the "Ruby License":http://www.ruby-lang.org/en/LICENSE.txt.
185
+
187
186
 
188
187
 
189
188
  h2. Credits and copyright information
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
25
25
 
26
26
  # Dependencies
27
27
  s.add_dependency "eventmachine", "~> 0.12.10"
28
- s.add_dependency "amq-client"
28
+ s.add_dependency "amq-client", ">= 0.7.0.alpha2"
29
29
 
30
30
  begin
31
31
  require "changelog"
@@ -0,0 +1,21 @@
1
+ h1. amqp gem and RabbitMQ versions compatibility
2
+
3
+ h2. Using recent versions on Debian and Ubuntu
4
+
5
+ Ubuntu (even 10.10) and Debian both "ship with old RabbitMQ version":http://packages.ubuntu.com/maverick/rabbitmq-server,
6
+ that only supports AMQP protocol 0.8. amqp gem 0.8.0 and later *will not work with RabbitMQ versions
7
+ before 1.8.0*.
8
+
9
+ We strongly recommend that you use "RabbitMQ apt repository":http://www.rabbitmq.com/debian.html#apt that has recent versions of RabbitMQ.
10
+
11
+
12
+
13
+ h2. TLS (SSL) support
14
+
15
+ Note that "before 1.7.0, RabbitMQ did not support TLS":http://www.rabbitmq.com/ssl.html. In order to have TLS
16
+ support, RabbitMQ 1.7.0 requires
17
+
18
+ * Erlang/OTP R13B or later
19
+ * Erlang SSL 3.10 or later
20
+
21
+ and recommends using Erlang R141B that ships with Erlang SSL 4.0.1.
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require "bundler"
5
+ Bundler.setup
6
+
7
+ $:.unshift(File.expand_path("../../../../lib", __FILE__))
8
+ require 'amqp'
9
+ require "amqp/extensions/rabbitmq"
10
+
11
+ AMQP.start do |connection|
12
+ puts "Connected!"
13
+ AMQP::Channel.new(connection) do |channel, open_ok|
14
+ puts "Channel #{channel.id} is now open"
15
+
16
+ channel.on_error do
17
+ puts "Oops, there is a channel-levle exceptions!"
18
+ end
19
+
20
+ x = channel.fanout("amq.fanout")
21
+ channel.queue("", :auto_delete => true, :arguments => { "x-message-ttl" => 1000 }) do |q|
22
+ puts "Declared a new server-named qeueue: #{q.name}"
23
+ q.bind(x)
24
+
25
+
26
+ EventMachine.add_timer(0.3) do
27
+ 10.times do |i|
28
+ puts "Publishing message ##{i}"
29
+ x.publish("Message ##{i}")
30
+ end
31
+ end
32
+
33
+ EventMachine.add_timer(0.7) do
34
+ q.pop do |headers, payload|
35
+ raise "x-message-ttl didn't seem to work (timeout is up)" if payload.nil?
36
+ end
37
+ end
38
+
39
+ EventMachine.add_timer(1.5) do
40
+ q.pop do |headers, payload|
41
+ raise "x-message-ttl didn't seem to work (timeout isn't up)" if payload
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ show_stopper = Proc.new {
48
+ AMQP.stop do
49
+ EM.stop
50
+ end
51
+ }
52
+
53
+
54
+ EM.add_timer(3, show_stopper)
55
+ Signal.trap('INT', show_stopper)
56
+ Signal.trap('TERM', show_stopper)
57
+ end
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC5DCCAcygAwIBAgIBAjANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDEwhNeVRl
3
+ c3RDQTAeFw0xMTA0MTcyMDE4MzNaFw0xMjA0MTYyMDE4MzNaMCcxFDASBgNVBAMT
4
+ C2dpb3ZlLmxvY2FsMQ8wDQYDVQQKEwZjbGllbnQwggEiMA0GCSqGSIb3DQEBAQUA
5
+ A4IBDwAwggEKAoIBAQC/4CSqBjpmNXoDt5xU0D4ONG3bQXBV4bJid/nmzIvV67pb
6
+ v/VpqKxM+UqoV9d09u/H+f/jAKu0of1e1d+1o09JtjJshX4sYREh2/n0umENH1xC
7
+ yvWnP0eFTithj9qmVcK5UOvoZKSKYT4gtCIpYhRUQZkEhPYKhvxePztjRIeUghkK
8
+ Qc9Qi0/eARm8d3Zdo0ORnnNNIP+G7BjecmJvTLCP/PBDIGG6r1eybNeulNWddgLg
9
+ cUq0ACFepxCJW6RdGVrMXhWomScvKssIUMAdDfwM9ffq64MYE2ZLG1OBBPefNI47
10
+ wz8h9ak15T2ZpKFU9biXLr/SnGhdhNR31d16pAtLAgMBAAGjLzAtMAkGA1UdEwQC
11
+ MAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEB
12
+ BQUAA4IBAQCVBpz3gZRr1s48SVF4+C9YLzrSaWsvzKZNDKH7RJ4f1VR//ZY5zsYi
13
+ RqSlzSfLM76Y6Y/Eq0iFshtKmuXHKyA4r/Gp+iiCw4U9Htk91rg98wAPc8wOBgn1
14
+ OmomH65JpLwxYvUwyt91opGppcqZHWhruhI0fFTFtPIlGKK3KOmJLPpaSvY0YTJ+
15
+ vaI3D6yQEMQoZ/mcXk928ofJJvOpUEmvjTW4Orz+T8NmiffLb64P50h86bdV+8tw
16
+ FJx6ix6vLF41LU2iPEYHuuXkA7+M5e+POGscJJCb1p6JKxzI6D/UVDnrbhOlqBa5
17
+ U45f0oXQ/ndOYUrBRu3BPFdNAjvpa0ld
18
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEAv+AkqgY6ZjV6A7ecVNA+DjRt20FwVeGyYnf55syL1eu6W7/1
3
+ aaisTPlKqFfXdPbvx/n/4wCrtKH9XtXftaNPSbYybIV+LGERIdv59LphDR9cQsr1
4
+ pz9HhU4rYY/aplXCuVDr6GSkimE+ILQiKWIUVEGZBIT2Cob8Xj87Y0SHlIIZCkHP
5
+ UItP3gEZvHd2XaNDkZ5zTSD/huwY3nJib0ywj/zwQyBhuq9XsmzXrpTVnXYC4HFK
6
+ tAAhXqcQiVukXRlazF4VqJknLyrLCFDAHQ38DPX36uuDGBNmSxtTgQT3nzSOO8M/
7
+ IfWpNeU9maShVPW4ly6/0pxoXYTUd9XdeqQLSwIDAQABAoIBAQC1hScqcpns98pm
8
+ md2bnyYV6iPDuTS9Crfnz/jrD7d6uXekNQXG33uhlnW6rN94F+TgGvKpnojSai14
9
+ +nyZKdZotaUeZWvoMCw1DBZ8H5aRA4oU5k1f282dn0YLFjyT/64oAxYq1IuVHknY
10
+ RpHK9K6mxygrzl21t94oi0lzr/FT29t8mSlcCQiHxAZWyGE55HvqSS4625P5pvh1
11
+ Bh4bZGT285XvlA1qbKbEn8M1IsCZmhPU87U+k6lCvEpBG32cdg9Ykt+BA33OCJj0
12
+ OrC6vKjLsIKEfbq8xoTjm7+fofv78B2/zobK7dFMVTAdnju8Tpwu/IDcHnLuKtt2
13
+ Vd8GOwGBAoGBAPBO/EeHSvlT46F3jT8ygIhB2rGQ8LBZwQmiejOdfhJ5EPs8KC7U
14
+ i9Wfo2Mktn7gr+X9nsY5ZHZoTFaFV1YSoIrsaWFd0RmuQKBcka+A9WPWEgRL0KrG
15
+ Km9pHjlYK6WAu+XzKnGlHzasxxLW48mvuMQApE5U5nVbZWonGBA2psRNAoGBAMxn
16
+ jHWH51SN5R/ldPvmNPEG8McR1XmzTM9M40snrj6UV8mLMH+KRHgoj664nhm1dnMa
17
+ rolKzoFQtS5unwjCGX+Lx9AnwUDDak2Q6LsqedO0PhIwUEtcaLnt8Zf3KWi4v4Es
18
+ eAHnYXZ1I7sqjCZ7pAwNBlCfE4Ai1XMH7syv5bn3AoGAYhbrlUrdSJ58eQkyp4w2
19
+ uOegnABcrq9EQ2mF1hHAR0wRqWtpv4vUtFMgPzTaJToTsp5us9zza/2ww1RUTPb3
20
+ fx12+l5wHrpo+MwwT2IlSCY2XniP6VVQNv/CbYfW8Qx2Jiu2tILBFfE6pS7/9fB7
21
+ S84zQyIWm+q9n7HreZrFQbUCgYB4BnnY7eOtp+CaGS/XVrdRrOSn0FYNL3bz5080
22
+ a2mKv6rI4x2oVrWb5R1x2GCl8gNK1akVX0LhdlXdnQFvsCIu3hKHrUByWg1K3MN8
23
+ XBXLdXRZU9tiVTH9s7YAqRa8sndpT4Zsf8SgPWqs1fAUDNgoZ2GE59QYktvJvye/
24
+ M65uwwKBgDnuu0PZ6tn7dKZWYhfBeQT21DsaQglvY3kQ4RHHlHiQnyALKnZqbLu9
25
+ wlAZIvRIltWeeQ+oT/Bxq9cD7GrdX8VmZ2xo/gYkJQoduT3AtyLrau8aZFWpiREH
26
+ 2pDcznE7+DWcKKwr/Z2eQEOoE2KikeuAbMd2SG4vVTLG9w+N2e5I
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,15 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIICbDCCAVQCAQAwJzEUMBIGA1UEAxMLZ2lvdmUubG9jYWwxDzANBgNVBAoTBmNs
3
+ aWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/gJKoGOmY1egO3
4
+ nFTQPg40bdtBcFXhsmJ3+ebMi9Xrulu/9WmorEz5SqhX13T278f5/+MAq7Sh/V7V
5
+ 37WjT0m2MmyFfixhESHb+fS6YQ0fXELK9ac/R4VOK2GP2qZVwrlQ6+hkpIphPiC0
6
+ IiliFFRBmQSE9gqG/F4/O2NEh5SCGQpBz1CLT94BGbx3dl2jQ5Gec00g/4bsGN5y
7
+ Ym9MsI/88EMgYbqvV7Js166U1Z12AuBxSrQAIV6nEIlbpF0ZWsxeFaiZJy8qywhQ
8
+ wB0N/Az19+rrgxgTZksbU4EE9580jjvDPyH1qTXlPZmkoVT1uJcuv9KcaF2E1HfV
9
+ 3XqkC0sCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQAOpwkzMe1xYgYz8GOp5xF7
10
+ xJtfeh5z9JTt8ogvjS34mri2vNUPQd35H3y6Dhh9ZjLqC03mMV/KOtRCf7oJXpgZ
11
+ S8C/NyJWNXB7/QNf9/EWEyOxoWYuvhTxqc0MhLPWrJRjgBKvvCGszBj2kWxDn7OO
12
+ //TRq4ao2wQWHIlaP5htsr+rD4IJZqZC8lgptv0u9O/O8vruPUg3k6dnuiKdUyTL
13
+ 2CDsiKSc6vZKJKL0TguBHSQj/sybAw1lyxIlpxiDcTCbM5FsER6jFydLly+ov3+x
14
+ sqMOTieWU3qnaqOwK2ENqQfRMAk3FXEuDzvW4t7oxHB2gJfUJXfEVUWv7Kol25VT
15
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC5DCCAcygAwIBAgIBATANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDEwhNeVRl
3
+ c3RDQTAeFw0xMTA0MTcyMDE3MjdaFw0xMjA0MTYyMDE3MjdaMCcxFDASBgNVBAMT
4
+ C2dpb3ZlLmxvY2FsMQ8wDQYDVQQKEwZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUA
5
+ A4IBDwAwggEKAoIBAQDdBEpnl+BRcIzZ4M6pB649cT/YUxebTekUq0HhFXATba44
6
+ XkSx81Nn5dMVnKgJgJVRhBxU0ZpBt4/wogKaaYI4/OAEgbUcH03OnEXHNLB586eJ
7
+ GdaFHkSQOfnUbBIzpQKlQjGLfjmn6mXkLW5lLP5OrN+npuEI4Wq/jgbIQQp9t7Kw
8
+ g+Pb9VdJGw0dmMlVfPP8FVCRpGB9lJc1Ayw8gKHg4mi/uyKKFdLV9IWf+DXlvRQ2
9
+ vljmQEhSq4bvxnCtm4p5B7AFHefTnldSgGRUZuyI5/4vFMypB3deV+lku95514uN
10
+ F0gg66eDAfoNjEmca09P+GBy8LfJsuiBeFV4irtjAgMBAAGjLzAtMAkGA1UdEwQC
11
+ MAAwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEB
12
+ BQUAA4IBAQCCmvsAQ1GaPfoKMqCWxyrQ2BNVPWm9J65thZKxZQF01gLox9cpv6+X
13
+ QERcD71HStxbzh2B8Hebbk9OplGuyrdgfvzUxcn88kObj6udipDx4YxTJvtff/9w
14
+ xeD5OWDVgef0GkB1Rjj3C3W/sfmTZBYfdKuWuwxMG/NxISkQP4aFHwJnPrzNx9ON
15
+ bHoKVNrQ2iKAiMysjnFeA/4QuhBQRf41h9SBWwJEW3Ts91TzbgcjCL46Dq29QB9A
16
+ 4v8t6K/nibP6n53zHbVzdxIEJ2hFKm+vuqaHRW3048Xgww1xkdxrVbyGp9si92i1
17
+ KJ5SDIOR8bQ7OXvdvpiyy6p9fIG0Z6w0
18
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEA3QRKZ5fgUXCM2eDOqQeuPXE/2FMXm03pFKtB4RVwE22uOF5E
3
+ sfNTZ+XTFZyoCYCVUYQcVNGaQbeP8KICmmmCOPzgBIG1HB9NzpxFxzSwefOniRnW
4
+ hR5EkDn51GwSM6UCpUIxi345p+pl5C1uZSz+Tqzfp6bhCOFqv44GyEEKfbeysIPj
5
+ 2/VXSRsNHZjJVXzz/BVQkaRgfZSXNQMsPICh4OJov7siihXS1fSFn/g15b0UNr5Y
6
+ 5kBIUquG78ZwrZuKeQewBR3n055XUoBkVGbsiOf+LxTMqQd3XlfpZLveedeLjRdI
7
+ IOungwH6DYxJnGtPT/hgcvC3ybLogXhVeIq7YwIDAQABAoIBAEu0+YussZET/Ztw
8
+ bznlQKEZVuZR6Ccxs+J5m1JvlnmBO4lheSR/lhVj2z9u7vx6SCupFk9TkQRrzWl/
9
+ BWdBNvMwY8gHajNc4bkhPKG1AbJ0bPIAoMPuj0vcICDMeBuqrVJQb0o6DaPgHdDg
10
+ Yw1TMTVf8CiseC8jj/5XtykHZoGTNTKzusvTjL8hTXFaWQfHQaN3WC1qwrFU2+x6
11
+ AJeoSz5F1Q/lykqVAdl2B1L39kiSCAkbVE1GI2qjftCff3ycufYV/fxXeyZwZx9B
12
+ NGWUJFyZte8EcrAUoo9B/gvALGDbJsSUsbri+HsRsdOQT3K/giafUipX2FB8Bnxm
13
+ nasEfskCgYEA74PrKYo13mTUWRJ2FQTBRHLsMR53PK83RpRRs8361/uCJrjpqfdD
14
+ 2fUt8kH0rmm2vaWYsllucJoYdYSC9CQdECLzpOZS907PJHXCOsFsBjw74fvjZ+gY
15
+ 9EXIENZSOSR1PQCWZm+5lL4xi/T+beWBfz0YksErj2GM7dyJeQjkIz8CgYEA7Dpx
16
+ ANgrgO9WTu51NIlKt3P7+t6q6MHQcWuzkWMBmVU4zxeyggux+ucMj+l3KLyw7fLT
17
+ jRz03eGpqjQT8Yl676uYONhTDC9VOBbLgjShuVOX7lleMLxVFJWqL1FphNghxysF
18
+ HVCq1WH0Qu4keirPEotBxkNZRaRYHwRYlVPKMt0CgYEApIHSAj0IlNBiPS995R/X
19
+ 8sCQU4heU1LxP0vd9gZy1OfNU/VLoE7RzqEkxrDgcu7u8cEMaOsd/L8KL6UtIKyx
20
+ PYUUHV2I/I2nnp43Io35OSsj4ipU3eg/Q3+uU0oxPUg6MgT2SDNSnsQnWb6TBj5N
21
+ PGxlNV7yIU/aMQF5dqVRtJcCgYEArC4Mn6jwTJImPnHgS+Kl6wFG8JvLxss9uu3d
22
+ fGLFj5VmSsvi+Ja9qzstFNf+WlruOwF64KfycqdAmyZKQwsJ6BcSZJyIK6F0Y+V5
23
+ f/YMyp/7ZWcOGEetW8uat9KHLqS6OglJOQzK96zl9MLPI5yAQevujSwZrYEUGcd5
24
+ KZ5hCqECgYBExYSDJOuSMvKFw66jrLiBedLPuzh1iznwd6e4idpqIUkdhbEuXhHG
25
+ +35HeN5cGwjbjXtIjxJsAddTbjvSqaPukmBKLm1ABqF3r0irbNaPcK1xfG9a5L28
26
+ /enwipaSWjGovfDXWqmmCvWC8M7iGiqFChI87WlzbvaAapOW0D576Q==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,15 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIICbDCCAVQCAQAwJzEUMBIGA1UEAxMLZ2lvdmUubG9jYWwxDzANBgNVBAoTBnNl
3
+ cnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0ESmeX4FFwjNng
4
+ zqkHrj1xP9hTF5tN6RSrQeEVcBNtrjheRLHzU2fl0xWcqAmAlVGEHFTRmkG3j/Ci
5
+ Apppgjj84ASBtRwfTc6cRcc0sHnzp4kZ1oUeRJA5+dRsEjOlAqVCMYt+OafqZeQt
6
+ bmUs/k6s36em4Qjhar+OBshBCn23srCD49v1V0kbDR2YyVV88/wVUJGkYH2UlzUD
7
+ LDyAoeDiaL+7IooV0tX0hZ/4NeW9FDa+WOZASFKrhu/GcK2binkHsAUd59OeV1KA
8
+ ZFRm7Ijn/i8UzKkHd15X6WS73nnXi40XSCDrp4MB+g2MSZxrT0/4YHLwt8my6IF4
9
+ VXiKu2MCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQC2aRbyq5pJ34M8jsaEjcks
10
+ iov5KP17jfnHnz517/rKxKYRaoxftXVvUbtDLKMQNMAA9K65jetg6/6zqi3QTJwd
11
+ 52Pn6OYTpzyFov42KRh1OSiRRa5CNXzDlHhosuVnVEOo2rdQggWZTY1clAbjEJmU
12
+ N6bn6NSL4B/Vn8GAVxXhRGGoHj26LupdoI6GS2S3xuExw0xiS3usq6xYthpxHQ/L
13
+ pQI2Ijk+IJZPnJR2RZji/7P3nWHWQX+HrCagCu4oyY4o7inWPVJpxD+1LmagRhv5
14
+ RyMdQKoY+6x3/r+tWATTNOVqbGzfuKj6TQSkCYvOZOejlRBsMhyYlpldVMCRmaoh
15
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIICxjCCAa6gAwIBAgIJAOF/re9e0JhgMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
3
+ BAMTCE15VGVzdENBMB4XDTExMDQxNzIwMDcxN1oXDTEyMDQxNjIwMDcxN1owEzER
4
+ MA8GA1UEAxMITXlUZXN0Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
5
+ AQDK8ZdVo1llXXrS7ed5Luel1VRq0DmJG1TZ8bAgovK9fx6WsgzeJ17zYwAEheUz
6
+ B8PogkNqU3ZIa4T51VCtamoiG6bbKYpco4lutKM7aNGNJNcUfDhwyt/NYOxXM3xf
7
+ ahMWjrbH0e4qKJgEjnJLpoeEa+YquDG2NXzocZY5+upy0pX6Reh1EQbju69j9f5Q
8
+ Z6u4cvraScyN5IYuq3lKTmc2TxVyINVkpK9DlGJZUBAOBLSbFxGZDRoY0D3b1aeS
9
+ /XMfVvcrJi48Ns2ZvT+CAy0KVeKBeQ9+6kD/YAizcxDGLRvqOZXOHYaE2L51DabL
10
+ QTxk9NFPgIxrYtGS7RtQ7dUhAgMBAAGjHTAbMAwGA1UdEwQFMAMBAf8wCwYDVR0P
11
+ BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAzFtKwsrCBaIAf1/VCJZh4+gzs/UW+
12
+ UXeC17GRzazb0O0drm9aMOtwE48NGVTwBjqmnPzFg56FYyll3oVZHz/fgkQZ+6iu
13
+ qAbwlmY2H+L9RyC9Mv3B+Ew/o3MNCQQ3rgxbA7hb0k8mwDplxS5GBRROwZl/zHks
14
+ gb4yPR6G83+zrgn6JIybdEGUySc1XDx+p6fVXvQG/1fsmExN9/ZuC6ulgBF7e+R5
15
+ d7l1AluGL4kS7GMDRZnU9QcXkhnlUyPXIDr/Jd1HFKtwgrXtVl5YIWTaRdWOXGwX
16
+ Q8BpM3Vk/NQFoTHO4Na3y8JY6iJzYTIXWHjI6RJdUffsEPtBoysHFHYv
17
+ -----END CERTIFICATE-----
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC5DCCAcygAwIBAgIBATANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDEwhNeVRl
3
+ c3RDQTAeFw0xMTA0MTcyMDE3MjdaFw0xMjA0MTYyMDE3MjdaMCcxFDASBgNVBAMT
4
+ C2dpb3ZlLmxvY2FsMQ8wDQYDVQQKEwZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUA
5
+ A4IBDwAwggEKAoIBAQDdBEpnl+BRcIzZ4M6pB649cT/YUxebTekUq0HhFXATba44
6
+ XkSx81Nn5dMVnKgJgJVRhBxU0ZpBt4/wogKaaYI4/OAEgbUcH03OnEXHNLB586eJ
7
+ GdaFHkSQOfnUbBIzpQKlQjGLfjmn6mXkLW5lLP5OrN+npuEI4Wq/jgbIQQp9t7Kw
8
+ g+Pb9VdJGw0dmMlVfPP8FVCRpGB9lJc1Ayw8gKHg4mi/uyKKFdLV9IWf+DXlvRQ2
9
+ vljmQEhSq4bvxnCtm4p5B7AFHefTnldSgGRUZuyI5/4vFMypB3deV+lku95514uN
10
+ F0gg66eDAfoNjEmca09P+GBy8LfJsuiBeFV4irtjAgMBAAGjLzAtMAkGA1UdEwQC
11
+ MAAwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEB
12
+ BQUAA4IBAQCCmvsAQ1GaPfoKMqCWxyrQ2BNVPWm9J65thZKxZQF01gLox9cpv6+X
13
+ QERcD71HStxbzh2B8Hebbk9OplGuyrdgfvzUxcn88kObj6udipDx4YxTJvtff/9w
14
+ xeD5OWDVgef0GkB1Rjj3C3W/sfmTZBYfdKuWuwxMG/NxISkQP4aFHwJnPrzNx9ON
15
+ bHoKVNrQ2iKAiMysjnFeA/4QuhBQRf41h9SBWwJEW3Ts91TzbgcjCL46Dq29QB9A
16
+ 4v8t6K/nibP6n53zHbVzdxIEJ2hFKm+vuqaHRW3048Xgww1xkdxrVbyGp9si92i1
17
+ KJ5SDIOR8bQ7OXvdvpiyy6p9fIG0Z6w0
18
+ -----END CERTIFICATE-----
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC5DCCAcygAwIBAgIBAjANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDEwhNeVRl
3
+ c3RDQTAeFw0xMTA0MTcyMDE4MzNaFw0xMjA0MTYyMDE4MzNaMCcxFDASBgNVBAMT
4
+ C2dpb3ZlLmxvY2FsMQ8wDQYDVQQKEwZjbGllbnQwggEiMA0GCSqGSIb3DQEBAQUA
5
+ A4IBDwAwggEKAoIBAQC/4CSqBjpmNXoDt5xU0D4ONG3bQXBV4bJid/nmzIvV67pb
6
+ v/VpqKxM+UqoV9d09u/H+f/jAKu0of1e1d+1o09JtjJshX4sYREh2/n0umENH1xC
7
+ yvWnP0eFTithj9qmVcK5UOvoZKSKYT4gtCIpYhRUQZkEhPYKhvxePztjRIeUghkK
8
+ Qc9Qi0/eARm8d3Zdo0ORnnNNIP+G7BjecmJvTLCP/PBDIGG6r1eybNeulNWddgLg
9
+ cUq0ACFepxCJW6RdGVrMXhWomScvKssIUMAdDfwM9ffq64MYE2ZLG1OBBPefNI47
10
+ wz8h9ak15T2ZpKFU9biXLr/SnGhdhNR31d16pAtLAgMBAAGjLzAtMAkGA1UdEwQC
11
+ MAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEB
12
+ BQUAA4IBAQCVBpz3gZRr1s48SVF4+C9YLzrSaWsvzKZNDKH7RJ4f1VR//ZY5zsYi
13
+ RqSlzSfLM76Y6Y/Eq0iFshtKmuXHKyA4r/Gp+iiCw4U9Htk91rg98wAPc8wOBgn1
14
+ OmomH65JpLwxYvUwyt91opGppcqZHWhruhI0fFTFtPIlGKK3KOmJLPpaSvY0YTJ+
15
+ vaI3D6yQEMQoZ/mcXk928ofJJvOpUEmvjTW4Orz+T8NmiffLb64P50h86bdV+8tw
16
+ FJx6ix6vLF41LU2iPEYHuuXkA7+M5e+POGscJJCb1p6JKxzI6D/UVDnrbhOlqBa5
17
+ U45f0oXQ/ndOYUrBRu3BPFdNAjvpa0ld
18
+ -----END CERTIFICATE-----
@@ -0,0 +1,2 @@
1
+ V 120416201727Z 01 unknown /CN=giove.local/O=server
2
+ V 120416201833Z 02 unknown /CN=giove.local/O=client
@@ -0,0 +1 @@
1
+ unique_subject = yes
@@ -0,0 +1 @@
1
+ unique_subject = yes
@@ -0,0 +1 @@
1
+ V 120416201727Z 01 unknown /CN=giove.local/O=server
@@ -0,0 +1,53 @@
1
+ [ ca ]
2
+ default_ca = testca
3
+
4
+ [ testca ]
5
+ dir = .
6
+ certificate = $dir/cacert.pem
7
+ database = $dir/index.txt
8
+ new_certs_dir = $dir/certs
9
+ private_key = $dir/private/cakey.pem
10
+ serial = $dir/serial
11
+
12
+ default_crl_days = 7
13
+ default_days = 365
14
+ default_md = sha1
15
+
16
+ policy = testca_policy
17
+ x509_extensions = certificate_extensions
18
+
19
+ [ testca_policy ]
20
+ commonName = supplied
21
+ stateOrProvinceName = optional
22
+ countryName = optional
23
+ emailAddress = optional
24
+ organizationName = optional
25
+ organizationalUnitName = optional
26
+
27
+ [ certificate_extensions ]
28
+ basicConstraints = CA:false
29
+
30
+ [ req ]
31
+ default_bits = 2048
32
+ default_keyfile = ./private/cakey.pem
33
+ default_md = sha1
34
+ prompt = yes
35
+ distinguished_name = root_ca_distinguished_name
36
+ x509_extensions = root_ca_extensions
37
+
38
+ [ root_ca_distinguished_name ]
39
+ commonName = hostname
40
+
41
+ [ root_ca_extensions ]
42
+ basicConstraints = CA:true
43
+ keyUsage = keyCertSign, cRLSign
44
+
45
+ [ client_ca_extensions ]
46
+ basicConstraints = CA:false
47
+ keyUsage = digitalSignature
48
+ extendedKeyUsage = 1.3.6.1.5.5.7.3.2
49
+
50
+ [ server_ca_extensions ]
51
+ basicConstraints = CA:false
52
+ keyUsage = keyEncipherment
53
+ extendedKeyUsage = 1.3.6.1.5.5.7.3.1
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEAyvGXVaNZZV160u3neS7npdVUatA5iRtU2fGwIKLyvX8elrIM
3
+ 3ide82MABIXlMwfD6IJDalN2SGuE+dVQrWpqIhum2ymKXKOJbrSjO2jRjSTXFHw4
4
+ cMrfzWDsVzN8X2oTFo62x9HuKiiYBI5yS6aHhGvmKrgxtjV86HGWOfrqctKV+kXo
5
+ dREG47uvY/X+UGeruHL62knMjeSGLqt5Sk5nNk8VciDVZKSvQ5RiWVAQDgS0mxcR
6
+ mQ0aGNA929Wnkv1zH1b3KyYuPDbNmb0/ggMtClXigXkPfupA/2AIs3MQxi0b6jmV
7
+ zh2GhNi+dQ2my0E8ZPTRT4CMa2LRku0bUO3VIQIDAQABAoIBAQDJoXiDHFVgUZ0L
8
+ XlUBYKnEaIyDxzey0hXep7Me6eaUgW0JugLw4VsEI9NLqyBKMCfjpTCHvj6huzmV
9
+ 4utSMI0cMC76Rm5ylgSgmhYnm3+/ZN/QOY71+YqcCfUmuj+SqNgoLEjLhPbEqipH
10
+ NKO4J88ysOUwgmrZppDgfKIOHw66Xlx0WtyFksozLve5pqxzs2gNZDmT5YdlGt+w
11
+ X2zaUr7GholPGUVzhZSlpBpPkloSNYyGPX7O25bc63Ev92m3vnroJZYFiaUaKcFE
12
+ M2RVVd3m8J47uoSwxl2ppnIgwodTWe20swc3d4cXK30U4USLsvWesthnfUc65QWa
13
+ KfeanOrBAoGBAOvxGM9ufV1EFyV3D4kDB2UGp2ccv2t+rJ+urpl7JLCw1Aetpc3v
14
+ Qg/QsbBfOhfI650zOZgzE5bG6B6wNYVLAC/UusrYgeLkyqKVbQgDTP+djD61jYjy
15
+ IG5RP7EumN07Gvja59B4Kw5zN6TB3MKGz9Qv3a2MOvyg/3TRnssHOkQ5AoGBANwy
16
+ V822s149G46tIbESw5ICcY8HorP1kD2syMeBQWKJcEgiSXL8Q3TIKdqaim8Q1Bqu
17
+ fSYwISUVsFDaTyvRl25hLfkQ0t+qsul7EcjNFHf9L7dJx7z/dj8lVTQWGYse5iVQ
18
+ aplx7fYQHgXdC7NjtpIrxUZkJ7bAl+0cpavdcCgpAoGAetCbO46mDyBcdBIPsiAz
19
+ fzEBfrkGIyxjKxPAqv/gz2CcXgrT3eiHGLhnZgmLscnSa5e4iTM9JSUQuri6g1HR
20
+ HRS8zs34fmTd3deuU5d0QzJ9SD81F24B16rPXqmExNP5bER2mpuSvgjXlBmdklye
21
+ XjM0TxxJsCsWDnb3E3QFrnECgYBSpXqbNZXBK0JqnMTmh1psNQqWWpFQ5jxLScza
22
+ RMNbzqYcDPJwfAp9jJtY92Q6J6DUmuVSLgJivu88iZPpqHMj9MmikBP160XXqF+W
23
+ dJLYLml4a/LSFzg0nziJojnYI7LSEorQKRjdoFMEdGDt5eEin9cdgn39c/ASCQyN
24
+ o0FzcQKBgHifRoEEyyHzepXiv2osPsOV9cEoWROLRaooE7boPISimJ1PCFGON0XT
25
+ 20PmWJL3j3/f2Eqk47x4WpzLOp/OwUqqpaDpImtQX7GD7C+/PbAdbT1Q1Kc9kxc9
26
+ a5FJg85oJqDPB1yEmYG5nWIlqB3LOX/IdOfYSOUFvRiomwJJoxys
27
+ -----END RSA PRIVATE KEY-----
@@ -118,12 +118,17 @@ module AMQP
118
118
  # only send channel.open when connection is actually open. Makes it possible to
119
119
  # do c = AMQP.connect; AMQP::Channel.new(c) that is what some people do. MK.
120
120
  @connection.on_open do
121
- self.open do |*args|
121
+ self.open do |ch, open_ok|
122
122
  @channel_is_open_deferrable.succeed
123
123
 
124
- block.call(*args) if block
125
- end
126
- end
124
+ if block
125
+ case block.arity
126
+ when 1 then block.call(ch)
127
+ else block.call(ch, open_ok)
128
+ end # case
129
+ end # if
130
+ end # self.open
131
+ end # @connection.on_open
127
132
  end
128
133
 
129
134
 
@@ -294,6 +294,9 @@ module AMQP
294
294
  # @option opts [String] :default_routing_key (nil) Default routing key that will be used by {Exchange#publish} when no routing key is not passed explicitly.
295
295
  # It is perfectly fine for applications to always specify routing key to {Exchange#publish}.
296
296
  #
297
+ # @option opts [Hash] :arguments (nil) A hash of optional arguments with the declaration. Some brokers implement
298
+ # AMQP extensions using x-prefixed declaration arguments.
299
+ #
297
300
  #
298
301
  # @raise [AMQP::Error] Raised when exchange is redeclared with parameters different from original declaration.
299
302
  # @raise [AMQP::Error] Raised when exchange is declared with :passive => true and the exchange does not exist.
@@ -357,7 +360,7 @@ module AMQP
357
360
 
358
361
  unless @opts[:no_declare]
359
362
  @channel.once_open do
360
- self.declare(passive = @opts[:passive], durable = @opts[:durable], exclusive = @opts[:exclusive], auto_delete = @opts[:auto_delete], nowait = @opts[:nowait], nil, &shim)
363
+ self.declare(passive = @opts[:passive], durable = @opts[:durable], exclusive = @opts[:exclusive], auto_delete = @opts[:auto_delete], nowait = @opts[:nowait], @opts[:arguments], &shim)
361
364
  end
362
365
  end
363
366
  else
@@ -148,6 +148,12 @@ module AMQP
148
148
  # method it will raise a channel or connection exception.
149
149
  #
150
150
  #
151
+ # @option opts [Hash] :arguments (nil) A hash of optional arguments with the declaration. Some brokers implement
152
+ # AMQP extensions using x-prefixed declaration arguments. For example, RabbitMQ
153
+ # recognizes x-message-ttl declaration arguments that defines TTL of messages in
154
+ # the queue.
155
+ #
156
+ #
151
157
  # @yield [queue, declare_ok] Yields successfully declared queue instance and AMQP method (queue.declare-ok) instance. The latter is optional.
152
158
  # @yieldparam [Queue] queue Queue that is successfully declared and is ready to be used.
153
159
  # @yieldparam [AMQP::Protocol::Queue::DeclareOk] declare_ok AMQP queue.declare-ok) instance.
@@ -179,9 +185,9 @@ module AMQP
179
185
 
180
186
  @channel.once_open do
181
187
  if block
182
- self.declare(@opts[:passive], @opts[:durable], @opts[:exclusive], @opts[:auto_delete], @opts[:nowait], nil, &shim)
188
+ self.declare(@opts[:passive], @opts[:durable], @opts[:exclusive], @opts[:auto_delete], @opts[:nowait], @opts[:arguments], &shim)
183
189
  else
184
- self.declare(@opts[:passive], @opts[:durable], @opts[:exclusive], @opts[:auto_delete], @opts[:nowait], nil)
190
+ self.declare(@opts[:passive], @opts[:durable], @opts[:exclusive], @opts[:auto_delete], @opts[:nowait], @opts[:arguments])
185
191
  end
186
192
  end
187
193
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module AMQP
4
- VERSION = '0.8.0.rc1'
4
+ VERSION = '0.8.0.rc2'
5
5
  end
@@ -15,9 +15,12 @@ describe "Queue that was bound to default direct exchange thanks to Automatic Mo
15
15
  amqp_before do
16
16
  @channel = AMQP::Channel.new
17
17
  @channel.should be_open
18
+ @channel.on_error do |*args|
19
+ puts "Channel-level error!"
20
+ end
18
21
 
19
- @queue1 = @channel.queue("queue1")
20
- @queue2 = @channel.queue("queue2")
22
+ @queue1 = @channel.queue("queue1", :auto_delete => true)
23
+ @queue2 = @channel.queue("queue2", :auto_delete => true)
21
24
 
22
25
  # Rely on default direct exchange binding, see section 2.1.2.4 Automatic Mode in AMQP 0.9.1 spec.
23
26
  @exchange = AMQP::Exchange.default(@channel)
@@ -55,7 +58,12 @@ describe "Queue that was bound to default direct exchange thanks to Automatic Mo
55
58
  @exchange.publish("some white noise", :routing_key => "killa key")
56
59
  end
57
60
 
58
- done(0.2) {
61
+ delayed(0.3) {
62
+ # We never subscribe to it, hence, need to delete manually
63
+ @queue2.delete
64
+ }
65
+
66
+ done(0.5) {
59
67
  number_of_received_messages.should == expected_number_of_messages
60
68
  }
61
69
  end # it
@@ -47,7 +47,7 @@ describe AMQP::Queue, "#pop" do
47
47
 
48
48
  @queue.pop do |payload|
49
49
  callback_has_fired = true
50
-
50
+ @queue.delete
51
51
  payload.should be_nil
52
52
  end
53
53
 
@@ -58,7 +58,7 @@ describe AMQP::Queue, "#pop" do
58
58
  end
59
59
  end
60
60
 
61
- context "when THERE ARE messages in the queue" do
61
+ context "when THERE ARE messages in the queue" do
62
62
  it "yields message payload to the callback" do
63
63
  number_of_received_messages = 0
64
64
  expected_number_of_messages = 300
@@ -71,7 +71,7 @@ describe AMQP::Queue, "#pop" do
71
71
  expected_number_of_messages.times do
72
72
  @queue.pop do |headers, payload|
73
73
  payload.should_not be_nil
74
- number_of_received_messages += 1
74
+ number_of_received_messages += 1
75
75
  headers.message_count.should == (expected_number_of_messages - number_of_received_messages)
76
76
 
77
77
  if RUBY_VERSION =~ /^1.9/
@@ -83,6 +83,10 @@ describe AMQP::Queue, "#pop" do
83
83
  end # do
84
84
  end
85
85
 
86
+ delayed(1.3) {
87
+ # Queue.Get doesn't qualify for subscription, hence, manual deletion is required
88
+ @queue.delete
89
+ }
86
90
  done(1.5) {
87
91
  number_of_received_messages.should == expected_number_of_messages
88
92
  }
@@ -28,14 +28,12 @@ describe AMQP do
28
28
  it "declares a new queue with that name" do
29
29
  queue = @channel.queue(name)
30
30
  queue.name.should == name
31
-
32
31
  done
33
32
  end
34
33
 
35
34
  it "caches that queue" do
36
35
  queue = @channel.queue(name)
37
36
  @channel.queue(name).object_id.should == queue.object_id
38
-
39
37
  done
40
38
  end
41
39
  end # context
@@ -44,29 +42,68 @@ describe AMQP do
44
42
  it "uses server-assigned queue name" do
45
43
  @channel.queue("") do |queue, *args|
46
44
  queue.name.should_not be_empty
47
- done
45
+ queue.delete
46
+ done(0.3)
48
47
  end
49
48
  end
50
49
  end # context
51
50
 
52
51
 
52
+ context "when queue is redeclared with different attributes" do
53
+ let(:name) { "amqp-gem.nondurable.queue" }
54
+ let(:options) { {:durable => false, :passive => false} }
55
+ let(:different_options) { {:durable => true, :passive => false} }
56
+ amqp_before do
57
+ @queue = @channel.queue(name, options)
58
+ delayed(0.25) { @queue.delete }
59
+ end
60
+
61
+ context "on the same channel" do
62
+ it "should raise ruby exception" do
63
+ expect {
64
+ @other_queue = @channel.queue(name, different_options)
65
+ }.to raise_error(AMQP::IncompatibleOptionsError)
66
+ @queue.delete
67
+ done(0.2)
68
+ end
69
+ end
53
70
 
71
+ context "on different channels (or even in different processes)" do
72
+ amqp_before { @other_channel = AMQP::Channel.new }
73
+
74
+ it "should not raise ruby exception" do
75
+ expect {
76
+ @other_queue = @other_channel.queue(name, different_options)
77
+ }.to_not raise_error
78
+ done
79
+ end
80
+
81
+ it "should trigger channel-level #on_error callback" do
82
+ @other_channel.on_error {|*args| @callback_fired = true }
83
+ @other_queue = @other_channel.queue(name, different_options)
84
+ done(0.35) {
85
+ @callback_fired.should be_true
86
+ @other_channel.should be_closed
87
+ }
88
+ end
89
+ end
90
+ end
54
91
 
55
92
  context "when passive option is used" do
56
- context "and exchange with given name already exists" do
93
+ context "and queue with given name already exists" do
57
94
  it "silently returns" do
58
95
  name = "a_new_queue declared at #{Time.now.to_i}"
59
96
 
60
- original_exchange = @channel.queue(name)
61
- exchange = @channel.queue(name, :passive => true)
97
+ original_queue = @channel.queue(name)
98
+ queue = @channel.queue(name, :passive => true)
62
99
 
63
- exchange.should == original_exchange
100
+ queue.should == original_queue
64
101
 
65
102
  done
66
103
  end # it
67
104
  end
68
105
 
69
- context "and exchange with given name DOES NOT exist" do
106
+ context "and queue with given name DOES NOT exist" do
70
107
  it "raises an exception" do
71
108
  pending "Not yet supported"
72
109
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amqp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0.rc1
4
+ version: 0.8.0.rc2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -11,12 +11,12 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain:
14
- date: 2011-04-17 00:00:00.000000000 +04:00
14
+ date: 2011-04-18 00:00:00.000000000
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: eventmachine
19
- requirement: &2164608620 !ruby/object:Gem::Requirement
19
+ requirement: &2168550180 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ~>
@@ -24,18 +24,18 @@ dependencies:
24
24
  version: 0.12.10
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *2164608620
27
+ version_requirements: *2168550180
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: amq-client
30
- requirement: &2164608200 !ruby/object:Gem::Requirement
30
+ requirement: &2168549540 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
34
34
  - !ruby/object:Gem::Version
35
- version: '0'
35
+ version: 0.7.0.alpha2
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *2164608200
38
+ version_requirements: *2168549540
39
39
  description: Asynchronous AMQP 0.9.1 client for Ruby. Built on top of Eventmachine.
40
40
  email:
41
41
  - michael@novemberain.com
@@ -44,24 +44,6 @@ executables: []
44
44
  extensions: []
45
45
  extra_rdoc_files:
46
46
  - README.textile
47
- - doc/_index.html
48
- - doc/AMQP.html
49
- - doc/class_list.html
50
- - doc/EXAMPLE_01_PINGPONG
51
- - doc/EXAMPLE_02_CLOCK
52
- - doc/EXAMPLE_03_STOCKS
53
- - doc/EXAMPLE_04_MULTICLOCK
54
- - doc/EXAMPLE_05_ACK
55
- - doc/EXAMPLE_05_POP
56
- - doc/EXAMPLE_06_HASHTABLE
57
- - doc/file.README.html
58
- - doc/file.VendorSpecificExtensions.html
59
- - doc/file_list.html
60
- - doc/frames.html
61
- - doc/index.html
62
- - doc/method_list.html
63
- - doc/MQ.html
64
- - doc/top-level-namespace.html
65
47
  files:
66
48
  - .gitignore
67
49
  - .rspec
@@ -77,19 +59,34 @@ files:
77
59
  - bin/irb
78
60
  - bin/jenkins.sh
79
61
  - bin/set_test_suite_realms_up.sh
80
- - doc/EXAMPLE_01_PINGPONG
81
- - doc/EXAMPLE_02_CLOCK
82
- - doc/EXAMPLE_03_STOCKS
83
- - doc/EXAMPLE_04_MULTICLOCK
84
- - doc/EXAMPLE_05_ACK
85
- - doc/EXAMPLE_05_POP
86
- - doc/EXAMPLE_06_HASHTABLE
62
+ - docs/RabbitMQVersions.textile
87
63
  - docs/VendorSpecificExtensions.textile
64
+ - examples/extensions/rabbitmq/per_queue_message_ttl.rb
88
65
  - examples/extensions/rabbitmq/publisher_confirmations_with_transient_messages.rb
89
66
  - examples/hello_world.rb
90
67
  - examples/real-world/task-queue/README.textile
91
68
  - examples/real-world/task-queue/consumer.rb
92
69
  - examples/real-world/task-queue/producer.rb
70
+ - examples/tls_certificates/client/cert.pem
71
+ - examples/tls_certificates/client/key.pem
72
+ - examples/tls_certificates/client/keycert.p12
73
+ - examples/tls_certificates/client/req.pem
74
+ - examples/tls_certificates/server/cert.pem
75
+ - examples/tls_certificates/server/key.pem
76
+ - examples/tls_certificates/server/keycert.p12
77
+ - examples/tls_certificates/server/req.pem
78
+ - examples/tls_certificates/testca/cacert.cer
79
+ - examples/tls_certificates/testca/cacert.pem
80
+ - examples/tls_certificates/testca/certs/01.pem
81
+ - examples/tls_certificates/testca/certs/02.pem
82
+ - examples/tls_certificates/testca/index.txt
83
+ - examples/tls_certificates/testca/index.txt.attr
84
+ - examples/tls_certificates/testca/index.txt.attr.old
85
+ - examples/tls_certificates/testca/index.txt.old
86
+ - examples/tls_certificates/testca/openssl.cnf
87
+ - examples/tls_certificates/testca/private/cakey.pem
88
+ - examples/tls_certificates/testca/serial
89
+ - examples/tls_certificates/testca/serial.old
93
90
  - examples/various/ack.rb
94
91
  - examples/various/automatic_binding_for_default_direct_exchange.rb
95
92
  - examples/various/basic_get.rb
@@ -146,42 +143,40 @@ files:
146
143
  - spec/unit/amqp/basic_spec.rb
147
144
  - spec/unit/amqp/connection_spec.rb
148
145
  - tasks.rb
149
- - doc/_index.html
150
- - doc/AMQP.html
151
- - doc/class_list.html
152
- - doc/file.README.html
153
- - doc/file.VendorSpecificExtensions.html
154
- - doc/file_list.html
155
- - doc/frames.html
156
- - doc/index.html
157
- - doc/method_list.html
158
- - doc/MQ.html
159
- - doc/top-level-namespace.html
160
146
  has_rdoc: true
161
147
  homepage: http://github.com/ruby-amqp/amqp
162
148
  licenses: []
163
- post_install_message: ! "[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Channel.new now accepts
164
- (an optional) block and yields newly opened channel to it as soon as\n[\e[32mVersion
149
+ post_install_message: ! "[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Exchange#initialize
150
+ now accepts :arguments option that takes a hash. Brokers\n[\e[32mVersion 0.8.0\e[0m]
151
+ [API] AMQP::Queue#initialize now accepts :arguments option that takes a hash. RabbitMQ\n[\e[32mVersion
152
+ 0.8.0\e[0m] [API] AMQP#Logger is deprecated. It will be removed before 1.0 release.\n[\e[32mVersion
153
+ 0.8.0\e[0m] [API] AMQP#fork is deprecated. It will be removed before 1.0 release.\n[\e[32mVersion
154
+ 0.8.0\e[0m] [API] AMQP::RPC is deprecated. It will be removed before 1.0 release.\n[\e[32mVersion
155
+ 0.8.0\e[0m] [FEATURE] Significant improvements to the documentation\n[\e[32mVersion
156
+ 0.8.0\e[0m] [FEATURE] Support for RabbitMQ extensions to AMQP 0.9.1\n[\e[32mVersion
157
+ 0.8.0\e[0m] [API] AMQP::Exchange#publish now accepts (an optional) block that is
158
+ called as soon as message\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Channel.new now
159
+ accepts (an optional) block and yields newly opened channel to it as soon as\n[\e[32mVersion
165
160
  0.8.0\e[0m] [API] AMQP::Header#ack now can acknowledge multiple deliveries\n[\e[32mVersion
166
161
  0.8.0\e[0m] [API] AMQP::Exchange#delete now takes (an optional) block that is called
167
162
  when exchange.delete-ok response arrives.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Header
168
163
  now implements #to_hash\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#pop block
169
- now can take 1, 2 or 7 (that's right) arguments.\n[\e[32mVersion 0.8.0\e[0m] [API]
170
- AMQP::Queue#purge now takes an optional block which is called when queue.purge-ok
171
- response arrives.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#delete now takes
172
- an optional block which is called when queue.delete-ok response arrives.\n[\e[32mVersion
173
- 0.8.0\e[0m] [API] AMQP::Queue#delete now accepts :nowait option.\n[\e[32mVersion
174
- 0.8.0\e[0m] [API] AMQP::Queue#unbind now takes an optional block which is called
175
- when queue.unbind-ok response arrives.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#unbind
176
- now accepts :routing_key as alias to :key. we believe it is a good idea to use AMQP
177
- terms.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Channel#prefetch now takes (an optional)
178
- 2nd parameter that specifies\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Channel#recover
179
- now takes (an optional) callback that is called when\n[\e[32mVersion 0.8.0\e[0m]
180
- [API] AMQP::Frame is gone.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Buffer is gone.
181
- Serialization & framing are now handled primarily by amq-protocol.\n[\e[32mVersion
182
- 0.8.0\e[0m] [FEATURE] AMQP gem is now AMQP 0.9.1 compatible: it runs atop of amq-client
183
- gem\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#publish is deprecated.\n[\e[32mVersion
184
- 0.8.0\e[0m] [API] Name argument for AMQP::Queue.new and Channel#queue is optional.\n"
164
+ now can take 1, 2 or 3 arguments.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#purge
165
+ \ now takes an optional block which is called when queue.purge-ok response arrives.\n[\e[32mVersion
166
+ 0.8.0\e[0m] [API] AMQP::Queue#delete now takes an optional block which is called
167
+ when queue.delete-ok response arrives.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#delete
168
+ now accepts :nowait option.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#unbind
169
+ now takes an optional block which is called when queue.unbind-ok response arrives.\n[\e[32mVersion
170
+ 0.8.0\e[0m] [API] AMQP::Queue#unbind now accepts :routing_key as alias to :key.
171
+ we believe it is a good idea to use AMQP terms.\n[\e[32mVersion 0.8.0\e[0m] [API]
172
+ AMQP::Channel#prefetch now takes (an optional) 2nd parameter that specifies\n[\e[32mVersion
173
+ 0.8.0\e[0m] [API] AMQP::Channel#recover now takes (an optional) callback that is
174
+ called when\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Frame is gone.\n[\e[32mVersion
175
+ 0.8.0\e[0m] [API] AMQP::Buffer is gone. Serialization & framing are now handled
176
+ primarily by amq-protocol.\n[\e[32mVersion 0.8.0\e[0m] [FEATURE] AMQP gem is now
177
+ AMQP 0.9.1 compatible: it runs atop of amq-client gem\n[\e[32mVersion 0.8.0\e[0m]
178
+ [API] AMQP::Queue#publish is deprecated.\n[\e[32mVersion 0.8.0\e[0m] [API] Name
179
+ argument for AMQP::Queue.new and Channel#queue is optional.\n"
185
180
  rdoc_options:
186
181
  - --include=examples --main README.textile
187
182
  require_paths: