sidekick-client 0.1.0

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 (247) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +52 -0
  6. data/VERSION +1 -0
  7. data/lib/ext/README +1 -0
  8. data/lib/ext/bunny-0.6.0/LICENSE +20 -0
  9. data/lib/ext/bunny-0.6.0/README.rdoc +66 -0
  10. data/lib/ext/bunny-0.6.0/Rakefile +24 -0
  11. data/lib/ext/bunny-0.6.0/bunny.gemspec +65 -0
  12. data/lib/ext/bunny-0.6.0/examples/simple_08.rb +30 -0
  13. data/lib/ext/bunny-0.6.0/examples/simple_09.rb +30 -0
  14. data/lib/ext/bunny-0.6.0/examples/simple_ack_08.rb +33 -0
  15. data/lib/ext/bunny-0.6.0/examples/simple_ack_09.rb +33 -0
  16. data/lib/ext/bunny-0.6.0/examples/simple_consumer_08.rb +53 -0
  17. data/lib/ext/bunny-0.6.0/examples/simple_consumer_09.rb +53 -0
  18. data/lib/ext/bunny-0.6.0/examples/simple_fanout_08.rb +39 -0
  19. data/lib/ext/bunny-0.6.0/examples/simple_fanout_09.rb +39 -0
  20. data/lib/ext/bunny-0.6.0/examples/simple_headers_08.rb +40 -0
  21. data/lib/ext/bunny-0.6.0/examples/simple_headers_09.rb +40 -0
  22. data/lib/ext/bunny-0.6.0/examples/simple_publisher_08.rb +27 -0
  23. data/lib/ext/bunny-0.6.0/examples/simple_publisher_09.rb +27 -0
  24. data/lib/ext/bunny-0.6.0/examples/simple_topic_08.rb +59 -0
  25. data/lib/ext/bunny-0.6.0/examples/simple_topic_09.rb +59 -0
  26. data/lib/ext/bunny-0.6.0/lib/bunny/channel08.rb +39 -0
  27. data/lib/ext/bunny-0.6.0/lib/bunny/channel09.rb +39 -0
  28. data/lib/ext/bunny-0.6.0/lib/bunny/client08.rb +494 -0
  29. data/lib/ext/bunny-0.6.0/lib/bunny/client09.rb +460 -0
  30. data/lib/ext/bunny-0.6.0/lib/bunny/exchange08.rb +175 -0
  31. data/lib/ext/bunny-0.6.0/lib/bunny/exchange09.rb +177 -0
  32. data/lib/ext/bunny-0.6.0/lib/bunny/queue08.rb +389 -0
  33. data/lib/ext/bunny-0.6.0/lib/bunny/queue09.rb +395 -0
  34. data/lib/ext/bunny-0.6.0/lib/bunny/subscription08.rb +85 -0
  35. data/lib/ext/bunny-0.6.0/lib/bunny/subscription09.rb +85 -0
  36. data/lib/ext/bunny-0.6.0/lib/bunny.rb +87 -0
  37. data/lib/ext/bunny-0.6.0/lib/qrack/channel.rb +18 -0
  38. data/lib/ext/bunny-0.6.0/lib/qrack/client.rb +204 -0
  39. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/protocol08.rb +132 -0
  40. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/protocol09.rb +133 -0
  41. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/spec08.rb +823 -0
  42. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/spec09.rb +521 -0
  43. data/lib/ext/bunny-0.6.0/lib/qrack/qrack08.rb +23 -0
  44. data/lib/ext/bunny-0.6.0/lib/qrack/qrack09.rb +23 -0
  45. data/lib/ext/bunny-0.6.0/lib/qrack/queue.rb +53 -0
  46. data/lib/ext/bunny-0.6.0/lib/qrack/subscription.rb +102 -0
  47. data/lib/ext/bunny-0.6.0/lib/qrack/transport/buffer08.rb +276 -0
  48. data/lib/ext/bunny-0.6.0/lib/qrack/transport/buffer09.rb +276 -0
  49. data/lib/ext/bunny-0.6.0/lib/qrack/transport/frame08.rb +112 -0
  50. data/lib/ext/bunny-0.6.0/lib/qrack/transport/frame09.rb +94 -0
  51. data/lib/ext/bunny-0.6.0/spec/spec_08/bunny_spec.rb +65 -0
  52. data/lib/ext/bunny-0.6.0/spec/spec_08/connection_spec.rb +12 -0
  53. data/lib/ext/bunny-0.6.0/spec/spec_08/exchange_spec.rb +162 -0
  54. data/lib/ext/bunny-0.6.0/spec/spec_08/queue_spec.rb +206 -0
  55. data/lib/ext/bunny-0.6.0/spec/spec_09/bunny_spec.rb +65 -0
  56. data/lib/ext/bunny-0.6.0/spec/spec_09/connection_spec.rb +12 -0
  57. data/lib/ext/bunny-0.6.0/spec/spec_09/exchange_spec.rb +162 -0
  58. data/lib/ext/bunny-0.6.0/spec/spec_09/queue_spec.rb +205 -0
  59. data/lib/ext/eventmachine-0.12.10/.gitignore +14 -0
  60. data/lib/ext/eventmachine-0.12.10/README +82 -0
  61. data/lib/ext/eventmachine-0.12.10/Rakefile +374 -0
  62. data/lib/ext/eventmachine-0.12.10/docs/COPYING +60 -0
  63. data/lib/ext/eventmachine-0.12.10/docs/ChangeLog +211 -0
  64. data/lib/ext/eventmachine-0.12.10/docs/DEFERRABLES +133 -0
  65. data/lib/ext/eventmachine-0.12.10/docs/EPOLL +141 -0
  66. data/lib/ext/eventmachine-0.12.10/docs/GNU +281 -0
  67. data/lib/ext/eventmachine-0.12.10/docs/INSTALL +13 -0
  68. data/lib/ext/eventmachine-0.12.10/docs/KEYBOARD +38 -0
  69. data/lib/ext/eventmachine-0.12.10/docs/LEGAL +25 -0
  70. data/lib/ext/eventmachine-0.12.10/docs/LIGHTWEIGHT_CONCURRENCY +70 -0
  71. data/lib/ext/eventmachine-0.12.10/docs/PURE_RUBY +75 -0
  72. data/lib/ext/eventmachine-0.12.10/docs/RELEASE_NOTES +94 -0
  73. data/lib/ext/eventmachine-0.12.10/docs/SMTP +2 -0
  74. data/lib/ext/eventmachine-0.12.10/docs/SPAWNED_PROCESSES +89 -0
  75. data/lib/ext/eventmachine-0.12.10/docs/TODO +8 -0
  76. data/lib/ext/eventmachine-0.12.10/eventmachine.gemspec +40 -0
  77. data/lib/ext/eventmachine-0.12.10/examples/ex_channel.rb +43 -0
  78. data/lib/ext/eventmachine-0.12.10/examples/ex_queue.rb +2 -0
  79. data/lib/ext/eventmachine-0.12.10/examples/helper.rb +2 -0
  80. data/lib/ext/eventmachine-0.12.10/ext/binder.cpp +125 -0
  81. data/lib/ext/eventmachine-0.12.10/ext/binder.h +46 -0
  82. data/lib/ext/eventmachine-0.12.10/ext/cmain.cpp +827 -0
  83. data/lib/ext/eventmachine-0.12.10/ext/cplusplus.cpp +202 -0
  84. data/lib/ext/eventmachine-0.12.10/ext/ed.cpp +1893 -0
  85. data/lib/ext/eventmachine-0.12.10/ext/ed.h +424 -0
  86. data/lib/ext/eventmachine-0.12.10/ext/em.cpp +2282 -0
  87. data/lib/ext/eventmachine-0.12.10/ext/em.h +232 -0
  88. data/lib/ext/eventmachine-0.12.10/ext/emwin.cpp +300 -0
  89. data/lib/ext/eventmachine-0.12.10/ext/emwin.h +94 -0
  90. data/lib/ext/eventmachine-0.12.10/ext/epoll.cpp +26 -0
  91. data/lib/ext/eventmachine-0.12.10/ext/epoll.h +25 -0
  92. data/lib/ext/eventmachine-0.12.10/ext/eventmachine.h +122 -0
  93. data/lib/ext/eventmachine-0.12.10/ext/eventmachine_cpp.h +96 -0
  94. data/lib/ext/eventmachine-0.12.10/ext/extconf.rb +148 -0
  95. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/extconf.rb +83 -0
  96. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.cpp +214 -0
  97. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.h +59 -0
  98. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/rubymain.cpp +127 -0
  99. data/lib/ext/eventmachine-0.12.10/ext/files.cpp +94 -0
  100. data/lib/ext/eventmachine-0.12.10/ext/files.h +65 -0
  101. data/lib/ext/eventmachine-0.12.10/ext/kb.cpp +81 -0
  102. data/lib/ext/eventmachine-0.12.10/ext/page.cpp +107 -0
  103. data/lib/ext/eventmachine-0.12.10/ext/page.h +51 -0
  104. data/lib/ext/eventmachine-0.12.10/ext/pipe.cpp +349 -0
  105. data/lib/ext/eventmachine-0.12.10/ext/project.h +151 -0
  106. data/lib/ext/eventmachine-0.12.10/ext/rubymain.cpp +1166 -0
  107. data/lib/ext/eventmachine-0.12.10/ext/sigs.cpp +89 -0
  108. data/lib/ext/eventmachine-0.12.10/ext/sigs.h +32 -0
  109. data/lib/ext/eventmachine-0.12.10/ext/ssl.cpp +460 -0
  110. data/lib/ext/eventmachine-0.12.10/ext/ssl.h +94 -0
  111. data/lib/ext/eventmachine-0.12.10/java/.classpath +8 -0
  112. data/lib/ext/eventmachine-0.12.10/java/.project +17 -0
  113. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactor.java +570 -0
  114. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactorException.java +40 -0
  115. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableChannel.java +69 -0
  116. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableDatagramChannel.java +189 -0
  117. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableSocketChannel.java +364 -0
  118. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Application.java +194 -0
  119. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Connection.java +74 -0
  120. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/ConnectionFactory.java +37 -0
  121. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +46 -0
  122. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/PeriodicTimer.java +38 -0
  123. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Timer.java +54 -0
  124. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ApplicationTest.java +109 -0
  125. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ConnectTest.java +148 -0
  126. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/EMTest.java +80 -0
  127. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestDatagrams.java +53 -0
  128. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestServers.java +75 -0
  129. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestTimers.java +90 -0
  130. data/lib/ext/eventmachine-0.12.10/lib/em/buftok.rb +138 -0
  131. data/lib/ext/eventmachine-0.12.10/lib/em/callback.rb +26 -0
  132. data/lib/ext/eventmachine-0.12.10/lib/em/channel.rb +57 -0
  133. data/lib/ext/eventmachine-0.12.10/lib/em/connection.rb +564 -0
  134. data/lib/ext/eventmachine-0.12.10/lib/em/deferrable.rb +192 -0
  135. data/lib/ext/eventmachine-0.12.10/lib/em/file_watch.rb +54 -0
  136. data/lib/ext/eventmachine-0.12.10/lib/em/future.rb +61 -0
  137. data/lib/ext/eventmachine-0.12.10/lib/em/messages.rb +66 -0
  138. data/lib/ext/eventmachine-0.12.10/lib/em/process_watch.rb +44 -0
  139. data/lib/ext/eventmachine-0.12.10/lib/em/processes.rb +119 -0
  140. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/header_and_content.rb +138 -0
  141. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient.rb +263 -0
  142. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient2.rb +590 -0
  143. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/line_and_text.rb +125 -0
  144. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/linetext2.rb +161 -0
  145. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/memcache.rb +323 -0
  146. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/object_protocol.rb +45 -0
  147. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/postgres3.rb +247 -0
  148. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/saslauth.rb +175 -0
  149. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpclient.rb +357 -0
  150. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpserver.rb +547 -0
  151. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/socks4.rb +66 -0
  152. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/stomp.rb +200 -0
  153. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/tcptest.rb +53 -0
  154. data/lib/ext/eventmachine-0.12.10/lib/em/protocols.rb +36 -0
  155. data/lib/ext/eventmachine-0.12.10/lib/em/queue.rb +61 -0
  156. data/lib/ext/eventmachine-0.12.10/lib/em/spawnable.rb +85 -0
  157. data/lib/ext/eventmachine-0.12.10/lib/em/streamer.rb +130 -0
  158. data/lib/ext/eventmachine-0.12.10/lib/em/timers.rb +56 -0
  159. data/lib/ext/eventmachine-0.12.10/lib/em/version.rb +3 -0
  160. data/lib/ext/eventmachine-0.12.10/lib/eventmachine.rb +1592 -0
  161. data/lib/ext/eventmachine-0.12.10/lib/evma/callback.rb +32 -0
  162. data/lib/ext/eventmachine-0.12.10/lib/evma/container.rb +75 -0
  163. data/lib/ext/eventmachine-0.12.10/lib/evma/factory.rb +77 -0
  164. data/lib/ext/eventmachine-0.12.10/lib/evma/protocol.rb +87 -0
  165. data/lib/ext/eventmachine-0.12.10/lib/evma/reactor.rb +48 -0
  166. data/lib/ext/eventmachine-0.12.10/lib/evma.rb +32 -0
  167. data/lib/ext/eventmachine-0.12.10/lib/jeventmachine.rb +257 -0
  168. data/lib/ext/eventmachine-0.12.10/lib/pr_eventmachine.rb +1022 -0
  169. data/lib/ext/eventmachine-0.12.10/setup.rb +1585 -0
  170. data/lib/ext/eventmachine-0.12.10/tasks/cpp.rake_example +77 -0
  171. data/lib/ext/eventmachine-0.12.10/tests/client.crt +31 -0
  172. data/lib/ext/eventmachine-0.12.10/tests/client.key +51 -0
  173. data/lib/ext/eventmachine-0.12.10/tests/test_attach.rb +126 -0
  174. data/lib/ext/eventmachine-0.12.10/tests/test_basic.rb +284 -0
  175. data/lib/ext/eventmachine-0.12.10/tests/test_channel.rb +63 -0
  176. data/lib/ext/eventmachine-0.12.10/tests/test_connection_count.rb +35 -0
  177. data/lib/ext/eventmachine-0.12.10/tests/test_defer.rb +47 -0
  178. data/lib/ext/eventmachine-0.12.10/tests/test_epoll.rb +160 -0
  179. data/lib/ext/eventmachine-0.12.10/tests/test_error_handler.rb +35 -0
  180. data/lib/ext/eventmachine-0.12.10/tests/test_errors.rb +82 -0
  181. data/lib/ext/eventmachine-0.12.10/tests/test_exc.rb +55 -0
  182. data/lib/ext/eventmachine-0.12.10/tests/test_file_watch.rb +49 -0
  183. data/lib/ext/eventmachine-0.12.10/tests/test_futures.rb +198 -0
  184. data/lib/ext/eventmachine-0.12.10/tests/test_get_sock_opt.rb +30 -0
  185. data/lib/ext/eventmachine-0.12.10/tests/test_handler_check.rb +37 -0
  186. data/lib/ext/eventmachine-0.12.10/tests/test_hc.rb +218 -0
  187. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient.rb +218 -0
  188. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient2.rb +153 -0
  189. data/lib/ext/eventmachine-0.12.10/tests/test_inactivity_timeout.rb +50 -0
  190. data/lib/ext/eventmachine-0.12.10/tests/test_kb.rb +60 -0
  191. data/lib/ext/eventmachine-0.12.10/tests/test_ltp.rb +182 -0
  192. data/lib/ext/eventmachine-0.12.10/tests/test_ltp2.rb +317 -0
  193. data/lib/ext/eventmachine-0.12.10/tests/test_next_tick.rb +133 -0
  194. data/lib/ext/eventmachine-0.12.10/tests/test_object_protocol.rb +37 -0
  195. data/lib/ext/eventmachine-0.12.10/tests/test_pause.rb +70 -0
  196. data/lib/ext/eventmachine-0.12.10/tests/test_pending_connect_timeout.rb +48 -0
  197. data/lib/ext/eventmachine-0.12.10/tests/test_process_watch.rb +48 -0
  198. data/lib/ext/eventmachine-0.12.10/tests/test_processes.rb +128 -0
  199. data/lib/ext/eventmachine-0.12.10/tests/test_proxy_connection.rb +92 -0
  200. data/lib/ext/eventmachine-0.12.10/tests/test_pure.rb +125 -0
  201. data/lib/ext/eventmachine-0.12.10/tests/test_queue.rb +44 -0
  202. data/lib/ext/eventmachine-0.12.10/tests/test_running.rb +42 -0
  203. data/lib/ext/eventmachine-0.12.10/tests/test_sasl.rb +72 -0
  204. data/lib/ext/eventmachine-0.12.10/tests/test_send_file.rb +242 -0
  205. data/lib/ext/eventmachine-0.12.10/tests/test_servers.rb +76 -0
  206. data/lib/ext/eventmachine-0.12.10/tests/test_smtpclient.rb +83 -0
  207. data/lib/ext/eventmachine-0.12.10/tests/test_smtpserver.rb +85 -0
  208. data/lib/ext/eventmachine-0.12.10/tests/test_spawn.rb +322 -0
  209. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_args.rb +79 -0
  210. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_methods.rb +50 -0
  211. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_verify.rb +82 -0
  212. data/lib/ext/eventmachine-0.12.10/tests/test_timers.rb +162 -0
  213. data/lib/ext/eventmachine-0.12.10/tests/test_ud.rb +36 -0
  214. data/lib/ext/eventmachine-0.12.10/tests/testem.rb +31 -0
  215. data/lib/ext/eventmachine-0.12.10/web/whatis +7 -0
  216. data/lib/ext/misc/README +1 -0
  217. data/lib/ext/misc/indifferent_access.rb +131 -0
  218. data/lib/ext/uuidtools-2.1.1/CHANGELOG +56 -0
  219. data/lib/ext/uuidtools-2.1.1/LICENSE +20 -0
  220. data/lib/ext/uuidtools-2.1.1/README +13 -0
  221. data/lib/ext/uuidtools-2.1.1/Rakefile +48 -0
  222. data/lib/ext/uuidtools-2.1.1/lib/compat/securerandom.rb +202 -0
  223. data/lib/ext/uuidtools-2.1.1/lib/uuidtools/version.rb +35 -0
  224. data/lib/ext/uuidtools-2.1.1/lib/uuidtools.rb +618 -0
  225. data/lib/ext/uuidtools-2.1.1/spec/spec.opts +1 -0
  226. data/lib/ext/uuidtools-2.1.1/spec/spec_helper.rb +7 -0
  227. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/mac_address_spec.rb +15 -0
  228. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/utility_spec.rb +21 -0
  229. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/uuid_creation_spec.rb +121 -0
  230. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/uuid_parsing_spec.rb +127 -0
  231. data/lib/ext/uuidtools-2.1.1/tasks/benchmark.rake +38 -0
  232. data/lib/ext/uuidtools-2.1.1/tasks/clobber.rake +2 -0
  233. data/lib/ext/uuidtools-2.1.1/tasks/gem.rake +68 -0
  234. data/lib/ext/uuidtools-2.1.1/tasks/git.rake +40 -0
  235. data/lib/ext/uuidtools-2.1.1/tasks/metrics.rake +22 -0
  236. data/lib/ext/uuidtools-2.1.1/tasks/rdoc.rake +29 -0
  237. data/lib/ext/uuidtools-2.1.1/tasks/rubyforge.rake +89 -0
  238. data/lib/ext/uuidtools-2.1.1/tasks/spec.rake +64 -0
  239. data/lib/ext/uuidtools-2.1.1/website/index.html +95 -0
  240. data/lib/sidekick/client/sidekick_client.rb +46 -0
  241. data/lib/sidekick/shared/sidekick_logger.rb +14 -0
  242. data/lib/sidekick/shared/sidekick_queue_publisher.rb +91 -0
  243. data/lib/sidekick-client.rb +7 -0
  244. data/sidekick-client.gemspec +289 -0
  245. data/test/helper.rb +10 -0
  246. data/test/test_sidekick-client.rb +7 -0
  247. metadata +311 -0
@@ -0,0 +1,395 @@
1
+ module Bunny
2
+
3
+ =begin rdoc
4
+
5
+ === DESCRIPTION:
6
+
7
+ Queues store and forward messages. Queues can be configured in the server or created at runtime.
8
+ Queues must be attached to at least one exchange in order to receive messages from publishers.
9
+
10
+ =end
11
+
12
+ class Queue09 < Qrack::Queue
13
+
14
+ def initialize(client, name, opts = {})
15
+ # check connection to server
16
+ raise Bunny::ConnectionError, 'Not connected to server' if client.status == :not_connected
17
+
18
+ @client = client
19
+ @opts = opts
20
+ @delivery_tag = nil
21
+
22
+ # Queues without a given name are named by the server and are generally
23
+ # bound to the process that created them.
24
+ if !name
25
+ opts = {
26
+ :passive => false,
27
+ :durable => false,
28
+ :exclusive => true,
29
+ :auto_delete => true,
30
+ :reserved_1 => 0
31
+ }.merge(opts)
32
+ end
33
+
34
+ # ignore the :nowait option if passed, otherwise program will hang waiting for a
35
+ # response that will not be sent by the server
36
+ opts.delete(:nowait)
37
+
38
+ client.send_frame(
39
+ Qrack::Protocol09::Queue::Declare.new({ :queue => name || '', :nowait => false, :reserved_1 => 0 }.merge(opts))
40
+ )
41
+
42
+ method = client.next_method
43
+
44
+ client.check_response(method, Qrack::Protocol09::Queue::DeclareOk, "Error declaring queue #{name}")
45
+
46
+ @name = method.queue
47
+ client.queues[@name] = self
48
+ end
49
+
50
+ =begin rdoc
51
+
52
+ === DESCRIPTION:
53
+
54
+ Acknowledges one or more messages delivered via the _Deliver_ or _Get_-_Ok_ methods. The client can
55
+ ask to confirm a single message or a set of messages up to and including a specific message.
56
+
57
+ ==== OPTIONS:
58
+
59
+ * <tt>:delivery_tag</tt>
60
+ * <tt>:multiple => true or false (_default_)</tt> - If set to _true_, the delivery tag is treated
61
+ as "up to and including", so that the client can acknowledge multiple messages with a single
62
+ method. If set to _false_, the delivery tag refers to a single message. If the multiple field
63
+ is _true_, and the delivery tag is zero, tells the server to acknowledge all outstanding messages.
64
+
65
+ =end
66
+
67
+ def ack(opts={})
68
+ # Set delivery tag
69
+ if delivery_tag.nil? and opts[:delivery_tag].nil?
70
+ raise Bunny::AcknowledgementError, "No delivery tag received"
71
+ else
72
+ self.delivery_tag = opts[:delivery_tag] if delivery_tag.nil?
73
+ end
74
+
75
+ client.send_frame(
76
+ Qrack::Protocol09::Basic::Ack.new({:delivery_tag => delivery_tag, :multiple => false}.merge(opts))
77
+ )
78
+
79
+ # reset delivery tag
80
+ self.delivery_tag = nil
81
+ end
82
+
83
+ =begin rdoc
84
+
85
+ === DESCRIPTION:
86
+
87
+ Binds a queue to an exchange. Until a queue is bound it will not receive any messages. Queues are
88
+ bound to the direct exchange '' by default. If error occurs, a _Bunny_::_ProtocolError_ is raised.
89
+
90
+ * <tt>:key => 'routing key'* <tt>:key => 'routing_key'</tt> - Specifies the routing key for
91
+ the binding. The routing key is used for routing messages depending on the exchange configuration.
92
+ * <tt>:nowait => true or false (_default_)</tt> - Ignored by Bunny, always _false_.
93
+
94
+ ==== RETURNS:
95
+
96
+ <tt>:bind_ok</tt> if successful.
97
+
98
+ =end
99
+
100
+ def bind(exchange, opts = {})
101
+ exchange = exchange.respond_to?(:name) ? exchange.name : exchange
102
+
103
+ # ignore the :nowait option if passed, otherwise program will hang waiting for a
104
+ # response that will not be sent by the server
105
+ opts.delete(:nowait)
106
+
107
+ client.send_frame(
108
+ Qrack::Protocol09::Queue::Bind.new({ :queue => name,
109
+ :exchange => exchange,
110
+ :routing_key => opts.delete(:key),
111
+ :nowait => false,
112
+ :reserved_1 => 0 }.merge(opts))
113
+ )
114
+
115
+ method = client.next_method
116
+
117
+ client.check_response(method, Qrack::Protocol09::Queue::BindOk,
118
+ "Error binding queue: #{name} to exchange: #{exchange}")
119
+
120
+ # return message
121
+ :bind_ok
122
+ end
123
+
124
+ =begin rdoc
125
+
126
+ === DESCRIPTION:
127
+
128
+ Requests that a queue is deleted from broker/server. When a queue is deleted any pending messages
129
+ are sent to a dead-letter queue if this is defined in the server configuration. Removes reference
130
+ from queues if successful. If an error occurs raises _Bunny_::_ProtocolError_.
131
+
132
+ ==== Options:
133
+
134
+ * <tt>:if_unused => true or false (_default_)</tt> - If set to _true_, the server will only
135
+ delete the queue if it has no consumers. If the queue has consumers the server does not
136
+ delete it but raises a channel exception instead.
137
+ * <tt>:if_empty => true or false (_default_)</tt> - If set to _true_, the server will only
138
+ delete the queue if it has no messages. If the queue is not empty the server raises a channel
139
+ exception.
140
+ * <tt>:nowait => true or false (_default_)</tt> - Ignored by Bunny, always _false_.
141
+
142
+ ==== Returns:
143
+
144
+ <tt>:delete_ok</tt> if successful
145
+ =end
146
+
147
+ def delete(opts = {})
148
+ # ignore the :nowait option if passed, otherwise program will hang waiting for a
149
+ # response that will not be sent by the server
150
+ opts.delete(:nowait)
151
+
152
+ client.send_frame(
153
+ Qrack::Protocol09::Queue::Delete.new({ :queue => name, :nowait => false, :reserved_1 => 0 }.merge(opts))
154
+ )
155
+
156
+ method = client.next_method
157
+
158
+ client.check_response(method, Qrack::Protocol09::Queue::DeleteOk, "Error deleting queue #{name}")
159
+
160
+ client.queues.delete(name)
161
+
162
+ # return confirmation
163
+ :delete_ok
164
+ end
165
+
166
+ =begin rdoc
167
+
168
+ === DESCRIPTION:
169
+
170
+ Gets a message from a queue in a synchronous way. If error occurs, raises _Bunny_::_ProtocolError_.
171
+
172
+ ==== OPTIONS:
173
+
174
+ * <tt>:ack => false (_default_) or true</tt> - If set to _false_, the server does not expect an
175
+ acknowledgement message from the client. If set to _true_, the server expects an acknowledgement
176
+ message from the client and will re-queue the message if it does not receive one within a time specified
177
+ by the server.
178
+
179
+ ==== RETURNS:
180
+
181
+ Hash <tt>{:header, :payload, :delivery_details}</tt>. <tt>:delivery_details</tt> is
182
+ a hash <tt>{:consumer_tag, :delivery_tag, :redelivered, :exchange, :routing_key}</tt>.
183
+
184
+ If the queue is empty the returned hash will contain the values -
185
+
186
+ :header => nil
187
+ :payload => :queue_empty
188
+ :delivery_details => nil
189
+
190
+ N.B. If a block is provided then the hash will be passed into the block and the return value
191
+ will be nil.
192
+
193
+ =end
194
+
195
+ def pop(opts = {}, &blk)
196
+
197
+ # do we want to have to provide an acknowledgement?
198
+ ack = opts.delete(:ack)
199
+
200
+ client.send_frame(
201
+ Qrack::Protocol09::Basic::Get.new({ :queue => name,
202
+ :consumer_tag => name,
203
+ :no_ack => !ack,
204
+ :nowait => true,
205
+ :reserved_1 => 0 }.merge(opts))
206
+ )
207
+
208
+ method = client.next_method
209
+
210
+ if method.is_a?(Qrack::Protocol09::Basic::GetEmpty) then
211
+ queue_empty = true
212
+ elsif !method.is_a?(Qrack::Protocol09::Basic::GetOk)
213
+ raise Bunny::ProtocolError, "Error getting message from queue #{name}"
214
+ end
215
+
216
+ if !queue_empty
217
+ # get delivery tag to use for acknowledge
218
+ self.delivery_tag = method.delivery_tag if ack
219
+
220
+ header = client.next_payload
221
+
222
+ # If maximum frame size is smaller than message payload body then message
223
+ # will have a message header and several message bodies
224
+ msg = ''
225
+ while msg.length < header.size
226
+ msg += client.next_payload
227
+ end
228
+
229
+ msg_hash = {:header => header, :payload => msg, :delivery_details => method.arguments}
230
+
231
+ else
232
+ msg_hash = {:header => nil, :payload => :queue_empty, :delivery_details => nil}
233
+ end
234
+
235
+ # Pass message hash to block or return message hash
236
+ blk ? blk.call(msg_hash) : msg_hash
237
+
238
+ end
239
+
240
+ =begin rdoc
241
+
242
+ === DESCRIPTION:
243
+
244
+ Removes all messages from a queue. It does not cancel consumers. Purged messages are deleted
245
+ without any formal "undo" mechanism. If an error occurs raises _Bunny_::_ProtocolError_.
246
+
247
+ ==== Options:
248
+
249
+ * <tt>:nowait => true or false (_default_)</tt> - Ignored by Bunny, always _false_.
250
+
251
+ ==== Returns:
252
+
253
+ <tt>:purge_ok</tt> if successful
254
+ =end
255
+
256
+ def purge(opts = {})
257
+ # ignore the :nowait option if passed, otherwise program will hang waiting for a
258
+ # response that will not be sent by the server
259
+ opts.delete(:nowait)
260
+
261
+ client.send_frame(
262
+ Qrack::Protocol09::Queue::Purge.new({ :queue => name, :nowait => false, :reserved_1 => 0 }.merge(opts))
263
+ )
264
+
265
+ method = client.next_method
266
+
267
+ client.check_response(method, Qrack::Protocol09::Queue::PurgeOk, "Error purging queue #{name}")
268
+
269
+ # return confirmation
270
+ :purge_ok
271
+
272
+ end
273
+
274
+ =begin rdoc
275
+
276
+ === DESCRIPTION:
277
+
278
+ Returns hash {:message_count, :consumer_count}.
279
+
280
+ =end
281
+
282
+ def status
283
+ client.send_frame(
284
+ Qrack::Protocol09::Queue::Declare.new({ :queue => name, :passive => true, :reserved_1 => 0 })
285
+ )
286
+ method = client.next_method
287
+ {:message_count => method.message_count, :consumer_count => method.consumer_count}
288
+ end
289
+
290
+ def subscribe(opts = {}, &blk)
291
+ # Create subscription
292
+ s = Bunny::Subscription09.new(client, self, opts)
293
+ s.start(&blk)
294
+
295
+ # Reset when subscription finished
296
+ @subscription = nil
297
+ end
298
+
299
+ =begin rdoc
300
+
301
+ === DESCRIPTION:
302
+
303
+ Removes a queue binding from an exchange. If error occurs, a _Bunny_::_ProtocolError_ is raised.
304
+
305
+ ==== OPTIONS:
306
+ * <tt>:key => 'routing key'* <tt>:key => 'routing_key'</tt> - Specifies the routing key for
307
+ the binding.
308
+ * <tt>:nowait => true or false (_default_)</tt> - Ignored by Bunny, always _false_.
309
+
310
+ ==== RETURNS:
311
+
312
+ <tt>:unbind_ok</tt> if successful.
313
+
314
+ =end
315
+
316
+ def unbind(exchange, opts = {})
317
+ exchange = exchange.respond_to?(:name) ? exchange.name : exchange
318
+
319
+ # ignore the :nowait option if passed, otherwise program will hang waiting for a
320
+ # response that will not be sent by the server
321
+ opts.delete(:nowait)
322
+
323
+ client.send_frame(
324
+ Qrack::Protocol09::Queue::Unbind.new({ :queue => name,
325
+ :exchange => exchange,
326
+ :routing_key => opts.delete(:key),
327
+ :nowait => false,
328
+ :reserved_1 => 0 }.merge(opts)
329
+ )
330
+ )
331
+
332
+ method = client.next_method
333
+
334
+ client.check_response(method, Qrack::Protocol09::Queue::UnbindOk, "Error unbinding queue #{name}")
335
+
336
+ # return message
337
+ :unbind_ok
338
+ end
339
+
340
+ =begin rdoc
341
+
342
+ === DESCRIPTION:
343
+
344
+ Cancels a consumer. This does not affect already delivered messages, but it does mean
345
+ the server will not send any more messages for that consumer.
346
+
347
+ ==== OPTIONS:
348
+
349
+ * <tt>:consumer_tag => '_tag_'</tt> - Specifies the identifier for the consumer.
350
+ * <tt>:nowait => true or false (_default_)</tt> - Ignored by Bunny, always _false_.
351
+
352
+ ==== Returns:
353
+
354
+ <tt>:unsubscribe_ok</tt> if successful
355
+
356
+ =end
357
+
358
+ def unsubscribe(opts = {})
359
+ # Default consumer_tag from subscription if not passed in
360
+ consumer_tag = subscription ? subscription.consumer_tag : opts[:consumer_tag]
361
+
362
+ # Must have consumer tag to tell server what to unsubscribe
363
+ raise Bunny::UnsubscribeError,
364
+ "No consumer tag received" if !consumer_tag
365
+
366
+ # Cancel consumer
367
+ client.send_frame( Qrack::Protocol09::Basic::Cancel.new(:consumer_tag => consumer_tag,
368
+ :nowait => false))
369
+
370
+ method = client.next_method
371
+
372
+ client.check_response(method, Qrack::Protocol09::Basic::CancelOk,
373
+ "Error unsubscribing from queue #{name}")
374
+
375
+ # Reset subscription
376
+ @subscription = nil
377
+
378
+ # Return confirmation
379
+ :unsubscribe_ok
380
+
381
+ end
382
+
383
+ private
384
+
385
+ def exchange
386
+ @exchange ||= Bunny::Exchange09.new(client, '', { :type => :direct,
387
+ :key => name,
388
+ :reserved_1 => 0,
389
+ :reserved_2 => false,
390
+ :reserved_3 => false})
391
+ end
392
+
393
+ end
394
+
395
+ end
@@ -0,0 +1,85 @@
1
+ module Bunny
2
+
3
+ =begin rdoc
4
+
5
+ === DESCRIPTION:
6
+
7
+ Asks the server to start a "consumer", which is a transient request for messages from a specific
8
+ queue. Consumers last as long as the channel they were created on, or until the client cancels them
9
+ with an _unsubscribe_. Every time a message reaches the queue it is passed to the _blk_ for
10
+ processing. If error occurs, _Bunny_::_ProtocolError_ is raised.
11
+
12
+ ==== OPTIONS:
13
+ * <tt>:consumer_tag => '_tag_'</tt> - Specifies the identifier for the consumer. The consumer tag is
14
+ local to a connection, so two clients can use the same consumer tags. If this option is not
15
+ specified a server generated name is used.
16
+ * <tt>:ack => false (_default_) or true</tt> - If set to _false_, the server does not expect an
17
+ acknowledgement message from the client. If set to _true_, the server expects an acknowledgement
18
+ message from the client and will re-queue the message if it does not receive one within a time specified
19
+ by the server.
20
+ * <tt>:exclusive => true or false (_default_)</tt> - Request exclusive consumer access, meaning
21
+ only this consumer can access the queue.
22
+ * <tt>:nowait => true or false (_default_)</tt> - Ignored by Bunny, always _false_.
23
+ * <tt>:timeout => number of seconds - The subscribe loop will continue to wait for
24
+ messages until terminated (Ctrl-C or kill command) or this timeout interval is reached.
25
+ * <tt>:message_max => max number messages to process</tt> - When the required number of messages
26
+ is processed subscribe loop is exited.
27
+
28
+ ==== OPERATION:
29
+
30
+ Passes a hash of message information to the block, if one has been supplied. The hash contains
31
+ :header, :payload and :delivery_details. The structure of the data is as follows -
32
+
33
+ :header has instance variables -
34
+ @klass
35
+ @size
36
+ @weight
37
+ @properties is a hash containing -
38
+ :content_type
39
+ :delivery_mode
40
+ :priority
41
+
42
+ :payload contains the message contents
43
+
44
+ :delivery details is a hash containing -
45
+ :consumer_tag
46
+ :delivery_tag
47
+ :redelivered
48
+ :exchange
49
+ :routing_key
50
+
51
+ If the :timeout option is specified then Qrack::ClientTimeout is raised if method times out
52
+ waiting to receive the next message from the queue.
53
+
54
+ ==== EXAMPLES
55
+
56
+ my_queue.subscribe(:timeout => 5) {|msg| puts msg[:payload]}
57
+
58
+ my_queue.subscribe(:message_max => 10, :ack => true) {|msg| puts msg[:payload]}
59
+
60
+ =end
61
+
62
+ class Subscription < Qrack::Subscription
63
+
64
+
65
+ def setup_consumer
66
+ client.send_frame(
67
+ Qrack::Protocol::Basic::Consume.new({ :queue => queue.name,
68
+ :consumer_tag => consumer_tag,
69
+ :no_ack => !ack,
70
+ :exclusive => exclusive,
71
+ :nowait => false }.merge(@opts))
72
+ )
73
+
74
+ method = client.next_method
75
+
76
+ client.check_response(method, Qrack::Protocol::Basic::ConsumeOk,
77
+ "Error subscribing to queue #{queue.name}")
78
+
79
+ @consumer_tag = method.consumer_tag
80
+
81
+ end
82
+
83
+ end
84
+
85
+ end