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,276 @@
1
+ if [].map.respond_to? :with_index
2
+ class Array #:nodoc:
3
+ def enum_with_index
4
+ each.with_index
5
+ end
6
+ end
7
+ else
8
+ require 'enumerator'
9
+ end
10
+
11
+ module Qrack
12
+ module Transport09 #:nodoc: all
13
+ class Buffer
14
+
15
+ def initialize data = ''
16
+ @data = data
17
+ @pos = 0
18
+ end
19
+
20
+ attr_reader :pos
21
+
22
+ def data
23
+ @data.clone
24
+ end
25
+ alias :contents :data
26
+ alias :to_s :data
27
+
28
+ def << data
29
+ @data << data.to_s
30
+ self
31
+ end
32
+
33
+ def length
34
+ @data.length
35
+ end
36
+
37
+ def empty?
38
+ pos == length
39
+ end
40
+
41
+ def rewind
42
+ @pos = 0
43
+ end
44
+
45
+ def read_properties *types
46
+ types.shift if types.first == :properties
47
+
48
+ i = 0
49
+ values = []
50
+
51
+ while props = read(:short)
52
+ (0..14).each do |n|
53
+ # no more property types
54
+ break unless types[i]
55
+
56
+ # if flag is set
57
+ if props & (1<<(15-n)) != 0
58
+ if types[i] == :bit
59
+ # bit values exist in flags only
60
+ values << true
61
+ else
62
+ # save type name for later reading
63
+ values << types[i]
64
+ end
65
+ else
66
+ # property not set or is false bit
67
+ values << (types[i] == :bit ? false : nil)
68
+ end
69
+
70
+ i+=1
71
+ end
72
+
73
+ # bit(0) == 0 means no more property flags
74
+ break unless props & 1 == 1
75
+ end
76
+
77
+ values.map do |value|
78
+ value.is_a?(Symbol) ? read(value) : value
79
+ end
80
+ end
81
+
82
+ def read *types
83
+ if types.first == :properties
84
+ return read_properties(*types)
85
+ end
86
+
87
+ values = types.map do |type|
88
+ case type
89
+ when :octet
90
+ _read(1, 'C')
91
+ when :short
92
+ _read(2, 'n')
93
+ when :long
94
+ _read(4, 'N')
95
+ when :longlong
96
+ upper, lower = _read(8, 'NN')
97
+ upper << 32 | lower
98
+ when :shortstr
99
+ _read read(:octet)
100
+ when :longstr
101
+ _read read(:long)
102
+ when :timestamp
103
+ Time.at read(:longlong)
104
+ when :table
105
+ t = Hash.new
106
+
107
+ table = Buffer.new(read(:longstr))
108
+ until table.empty?
109
+ key, type = table.read(:shortstr, :octet)
110
+ key = key.intern
111
+ t[key] ||= case type
112
+ when 83 # 'S'
113
+ table.read(:longstr)
114
+ when 73 # 'I'
115
+ table.read(:long)
116
+ when 68 # 'D'
117
+ exp = table.read(:octet)
118
+ num = table.read(:long)
119
+ num / 10.0**exp
120
+ when 84 # 'T'
121
+ table.read(:timestamp)
122
+ when 70 # 'F'
123
+ table.read(:table)
124
+ end
125
+ end
126
+
127
+ t
128
+ when :bit
129
+ if (@bits ||= []).empty?
130
+ val = read(:octet)
131
+ @bits = (0..7).map{|i| (val & 1<<i) != 0 }
132
+ end
133
+
134
+ @bits.shift
135
+ else
136
+ raise Qrack::InvalidTypeError, "Cannot read data of type #{type}"
137
+ end
138
+ end
139
+
140
+ types.size == 1 ? values.first : values
141
+ end
142
+
143
+ def write type, data
144
+ case type
145
+ when :octet
146
+ _write(data, 'C')
147
+ when :short
148
+ _write(data, 'n')
149
+ when :long
150
+ _write(data, 'N')
151
+ when :longlong
152
+ lower = data & 0xffffffff
153
+ upper = (data & ~0xffffffff) >> 32
154
+ _write([upper, lower], 'NN')
155
+ when :shortstr
156
+ data = (data || '').to_s
157
+ _write([data.length, data], 'Ca*')
158
+ when :longstr
159
+ if data.is_a? Hash
160
+ write(:table, data)
161
+ else
162
+ data = (data || '').to_s
163
+ _write([data.length, data], 'Na*')
164
+ end
165
+ when :timestamp
166
+ write(:longlong, data.to_i)
167
+ when :table
168
+ data ||= {}
169
+ write :longstr, (data.inject(Buffer.new) do |table, (key, value)|
170
+ table.write(:shortstr, key.to_s)
171
+
172
+ case value
173
+ when String
174
+ table.write(:octet, 83) # 'S'
175
+ table.write(:longstr, value.to_s)
176
+ when Fixnum
177
+ table.write(:octet, 73) # 'I'
178
+ table.write(:long, value)
179
+ when Float
180
+ table.write(:octet, 68) # 'D'
181
+ # XXX there's gotta be a better way to do this..
182
+ exp = value.to_s.split('.').last.length
183
+ num = value * 10**exp
184
+ table.write(:octet, exp)
185
+ table.write(:long, num)
186
+ when Time
187
+ table.write(:octet, 84) # 'T'
188
+ table.write(:timestamp, value)
189
+ when Hash
190
+ table.write(:octet, 70) # 'F'
191
+ table.write(:table, value)
192
+ end
193
+
194
+ table
195
+ end)
196
+ when :bit
197
+ [*data].to_enum(:each_slice, 8).each{|bits|
198
+ write(:octet, bits.enum_with_index.inject(0){ |byte, (bit, i)|
199
+ byte |= 1<<i if bit
200
+ byte
201
+ })
202
+ }
203
+ when :properties
204
+ values = []
205
+ data.enum_with_index.inject(0) do |short, ((type, value), i)|
206
+ n = i % 15
207
+ last = i+1 == data.size
208
+
209
+ if (n == 0 and i != 0) or last
210
+ if data.size > i+1
211
+ short |= 1<<0
212
+ elsif last and value
213
+ values << [type,value]
214
+ short |= 1<<(15-n)
215
+ end
216
+
217
+ write(:short, short)
218
+ short = 0
219
+ end
220
+
221
+ if value and !last
222
+ values << [type,value]
223
+ short |= 1<<(15-n)
224
+ end
225
+
226
+ short
227
+ end
228
+
229
+ values.each do |type, value|
230
+ write(type, value) unless type == :bit
231
+ end
232
+ else
233
+ raise Qrack::InvalidTypeError, "Cannot write data of type #{type}"
234
+ end
235
+
236
+ self
237
+ end
238
+
239
+ def extract
240
+ begin
241
+ cur_data, cur_pos = @data.clone, @pos
242
+ yield self
243
+ rescue Qrack::BufferOverflowError
244
+ @data, @pos = cur_data, cur_pos
245
+ nil
246
+ end
247
+ end
248
+
249
+ def _read(size, pack = nil)
250
+ if @data.is_a?(Qrack::Client)
251
+ raw = @data.read(size)
252
+ return raw if raw.nil? or pack.nil?
253
+ return raw.unpack(pack).first
254
+ end
255
+
256
+ if @pos + size > length
257
+ raise Qrack::BufferOverflowError
258
+ else
259
+ data = @data[@pos,size]
260
+ @data[@pos,size] = ''
261
+ if pack
262
+ data = data.unpack(pack)
263
+ data = data.pop if data.size == 1
264
+ end
265
+ data
266
+ end
267
+ end
268
+
269
+ def _write data, pack = nil
270
+ data = [*data].pack(pack) if pack
271
+ @data[@pos,0] = data
272
+ @pos += data.length
273
+ end
274
+ end
275
+ end
276
+ end
@@ -0,0 +1,112 @@
1
+
2
+ #:stopdoc:
3
+ # this file was autogenerated on Fri Jun 04 10:11:23 +0100 2009
4
+ #
5
+ # DO NOT EDIT! (edit ext/qparser.rb and config.yml instead, and run 'ruby qparser.rb')
6
+
7
+ module Qrack
8
+ module Transport
9
+ class Frame
10
+
11
+ FOOTER = 206
12
+ ID = 0
13
+
14
+ @types = { 1 => 'Method',
15
+ 2 => 'Header',
16
+ 3 => 'Body',
17
+ 4 => 'OobMethod',
18
+ 5 => 'OobHeader',
19
+ 6 => 'OobBody',
20
+ 7 => 'Trace',
21
+ 8 => 'Heartbeat'}
22
+
23
+ attr_accessor :channel, :payload
24
+
25
+ def initialize payload = nil, channel = 0
26
+ @channel, @payload = channel, payload
27
+ end
28
+
29
+ def id
30
+ self.class::ID
31
+ end
32
+
33
+ def to_binary
34
+ buf = Transport::Buffer.new
35
+ buf.write :octet, id
36
+ buf.write :short, channel
37
+ buf.write :longstr, payload
38
+ buf.write :octet, FOOTER
39
+ buf.rewind
40
+ buf
41
+ end
42
+
43
+ def to_s
44
+ to_binary.to_s
45
+ end
46
+
47
+ def == frame
48
+ [ :id, :channel, :payload ].inject(true) do |eql, field|
49
+ eql and __send__(field) == frame.__send__(field)
50
+ end
51
+ end
52
+
53
+ def self.parse buf
54
+ buf = Transport::Buffer.new(buf) unless buf.is_a? Transport::Buffer
55
+ buf.extract do
56
+ id, channel, payload, footer = buf.read(:octet, :short, :longstr, :octet)
57
+ Qrack::Transport.const_get(@types[id]).new(payload, channel) if footer == FOOTER
58
+ end
59
+ end
60
+
61
+ end
62
+
63
+ class Method < Frame
64
+
65
+ ID = 1
66
+
67
+ def initialize payload = nil, channel = 0
68
+ super
69
+ unless @payload.is_a? Protocol::Class::Method or @payload.nil?
70
+ @payload = Protocol.parse(@payload)
71
+ end
72
+ end
73
+ end
74
+
75
+ class Header < Frame
76
+
77
+ ID = 2
78
+
79
+ def initialize payload = nil, channel = 0
80
+ super
81
+ unless @payload.is_a? Protocol::Header or @payload.nil?
82
+ @payload = Protocol::Header.new(@payload)
83
+ end
84
+ end
85
+ end
86
+
87
+ class Body < Frame
88
+ ID = 3
89
+ end
90
+
91
+ class OobMethod < Frame
92
+ ID = 4
93
+ end
94
+
95
+ class OobHeader < Frame
96
+ ID = 5
97
+ end
98
+
99
+ class OobBody < Frame
100
+ ID = 6
101
+ end
102
+
103
+ class Trace < Frame
104
+ ID = 7
105
+ end
106
+
107
+ class Heartbeat < Frame
108
+ ID = 8
109
+ end
110
+
111
+ end
112
+ end
@@ -0,0 +1,94 @@
1
+
2
+ #:stopdoc:
3
+ # this file was autogenerated on Wed Jun 17 15:20:32 +0100 2009
4
+ #
5
+ # DO NOT EDIT! (edit ext/qparser.rb and config.yml instead, and run 'ruby qparser.rb')
6
+
7
+ module Qrack
8
+ module Transport09
9
+ class Frame
10
+
11
+ FOOTER = 206
12
+ ID = 0
13
+
14
+ @types = {
15
+ 1 => 'Method',
16
+ 2 => 'Header',
17
+ 3 => 'Body',
18
+ 8 => 'Heartbeat',
19
+ }
20
+
21
+ attr_accessor :channel, :payload
22
+
23
+ def initialize payload = nil, channel = 0
24
+ @channel, @payload = channel, payload
25
+ end
26
+
27
+ def id
28
+ self.class::ID
29
+ end
30
+
31
+ def to_binary
32
+ buf = Transport09::Buffer.new
33
+ buf.write :octet, id
34
+ buf.write :short, channel
35
+ buf.write :longstr, payload
36
+ buf.write :octet, FOOTER
37
+ buf.rewind
38
+ buf
39
+ end
40
+
41
+ def to_s
42
+ to_binary.to_s
43
+ end
44
+
45
+ def == frame
46
+ [ :id, :channel, :payload ].inject(true) do |eql, field|
47
+ eql and __send__(field) == frame.__send__(field)
48
+ end
49
+ end
50
+
51
+ def self.parse buf
52
+ buf = Transport09::Buffer.new(buf) unless buf.is_a? Transport09::Buffer
53
+ buf.extract do
54
+ id, channel, payload, footer = buf.read(:octet, :short, :longstr, :octet)
55
+ Qrack::Transport09.const_get(@types[id]).new(payload, channel) if footer == FOOTER
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ class Method < Frame
62
+
63
+ ID = 1
64
+
65
+ def initialize payload = nil, channel = 0
66
+ super
67
+ unless @payload.is_a? Protocol09::Class::Method or @payload.nil?
68
+ @payload = Protocol09.parse(@payload)
69
+ end
70
+ end
71
+ end
72
+
73
+ class Header < Frame
74
+
75
+ ID = 2
76
+
77
+ def initialize payload = nil, channel = 0
78
+ super
79
+ unless @payload.is_a? Protocol09::Header or @payload.nil?
80
+ @payload = Protocol09::Header.new(@payload)
81
+ end
82
+ end
83
+ end
84
+
85
+ class Body < Frame
86
+ ID = 3
87
+ end
88
+
89
+ class Heartbeat < Frame
90
+ ID = 8
91
+ end
92
+
93
+ end
94
+ end