cerberus 0.6 → 0.7

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 (290) hide show
  1. data/Authors.txt +4 -0
  2. data/Changelog.txt +11 -0
  3. data/Copyright.txt +16 -0
  4. data/Rakefile +16 -25
  5. data/Readme.markdown +1 -3
  6. data/bin/cerberus +5 -0
  7. data/lib/cerberus/builder/bjam.rb +1 -3
  8. data/lib/cerberus/builder/maven2.rb +0 -1
  9. data/lib/cerberus/builder/rake.rb +1 -1
  10. data/lib/cerberus/builder/rspec.rb +0 -1
  11. data/lib/cerberus/builder/ruby_base.rb +0 -1
  12. data/lib/cerberus/component_lazy_loader.rb +6 -2
  13. data/lib/cerberus/config.example.yml +1 -0
  14. data/lib/cerberus/constants.rb +2 -2
  15. data/lib/cerberus/manager.rb +7 -1
  16. data/lib/cerberus/publisher/mail.rb +4 -4
  17. data/lib/cerberus/publisher/twitter.rb +0 -1
  18. data/lib/cerberus/scm/base.rb +19 -0
  19. data/lib/cerberus/scm/bzr.rb +62 -0
  20. data/lib/cerberus/scm/cvs.rb +2 -7
  21. data/lib/cerberus/scm/darcs.rb +2 -11
  22. data/lib/cerberus/scm/git.rb +6 -14
  23. data/lib/cerberus/scm/perforce.rb +4 -4
  24. data/lib/cerberus/scm/svn.rb +2 -7
  25. data/lib/cerberus/utils.rb +5 -0
  26. data/lib/vendor/irc/README +23 -0
  27. data/lib/vendor/irc/lib/IRC.rb +164 -0
  28. data/lib/vendor/irc/lib/IRCChannel.rb +33 -0
  29. data/lib/vendor/irc/lib/IRCConnection.rb +134 -0
  30. data/lib/vendor/irc/lib/IRCEvent.rb +91 -0
  31. data/lib/vendor/irc/lib/IRCUser.rb +23 -0
  32. data/lib/vendor/irc/lib/IRCUtil.rb +49 -0
  33. data/lib/vendor/irc/lib/eventmap.yml +247 -0
  34. data/lib/vendor/twitter/CHANGES +129 -0
  35. data/lib/vendor/twitter/MIT-LICENSE +20 -0
  36. data/lib/vendor/twitter/README +37 -0
  37. data/lib/vendor/twitter/TODO +7 -0
  38. data/lib/vendor/twitter/lib/twitter.rb +34 -0
  39. data/lib/vendor/twitter/lib/twitter/client.rb +24 -0
  40. data/lib/vendor/twitter/lib/twitter/client/account.rb +24 -0
  41. data/lib/vendor/twitter/lib/twitter/client/auth.rb +27 -0
  42. data/lib/vendor/twitter/lib/twitter/client/base.rb +93 -0
  43. data/lib/vendor/twitter/lib/twitter/client/blocks.rb +35 -0
  44. data/lib/vendor/twitter/lib/twitter/client/favorites.rb +53 -0
  45. data/lib/vendor/twitter/lib/twitter/client/friendship.rb +35 -0
  46. data/lib/vendor/twitter/lib/twitter/client/graph.rb +37 -0
  47. data/lib/vendor/twitter/lib/twitter/client/messaging.rb +79 -0
  48. data/lib/vendor/twitter/lib/twitter/client/profile.rb +29 -0
  49. data/lib/vendor/twitter/lib/twitter/client/search.rb +27 -0
  50. data/lib/vendor/twitter/lib/twitter/client/status.rb +51 -0
  51. data/lib/vendor/twitter/lib/twitter/client/timeline.rb +72 -0
  52. data/lib/vendor/twitter/lib/twitter/client/user.rb +65 -0
  53. data/lib/vendor/twitter/lib/twitter/config.rb +77 -0
  54. data/lib/vendor/twitter/lib/twitter/console.rb +31 -0
  55. data/lib/vendor/twitter/lib/twitter/core.rb +137 -0
  56. data/lib/vendor/twitter/lib/twitter/ext.rb +2 -0
  57. data/lib/vendor/twitter/lib/twitter/ext/stdlib.rb +52 -0
  58. data/lib/vendor/twitter/lib/twitter/extras.rb +39 -0
  59. data/lib/vendor/twitter/lib/twitter/meta.rb +56 -0
  60. data/lib/vendor/twitter/lib/twitter/model.rb +360 -0
  61. data/lib/vendor/twitter/lib/twitter/version.rb +19 -0
  62. data/lib/vendor/twitter/spec/twitter/client/account_spec.rb +28 -0
  63. data/lib/vendor/twitter/spec/twitter/client/auth_spec.rb +34 -0
  64. data/lib/vendor/twitter/spec/twitter/client/base_spec.rb +242 -0
  65. data/lib/vendor/twitter/spec/twitter/client/blocks_spec.rb +76 -0
  66. data/lib/vendor/twitter/spec/twitter/client/favorites_spec.rb +183 -0
  67. data/lib/vendor/twitter/spec/twitter/client/friendship_spec.rb +76 -0
  68. data/lib/vendor/twitter/spec/twitter/client/graph_spec.rb +67 -0
  69. data/lib/vendor/twitter/spec/twitter/client/messaging_spec.rb +135 -0
  70. data/lib/vendor/twitter/spec/twitter/client/profile_spec.rb +91 -0
  71. data/lib/vendor/twitter/spec/twitter/client/search_spec.rb +68 -0
  72. data/lib/vendor/twitter/spec/twitter/client/status_spec.rb +119 -0
  73. data/lib/vendor/twitter/spec/twitter/client/timeline_spec.rb +79 -0
  74. data/lib/vendor/twitter/spec/twitter/client/user_spec.rb +203 -0
  75. data/lib/vendor/twitter/spec/twitter/client_spec.rb +2 -0
  76. data/lib/vendor/twitter/spec/twitter/config_spec.rb +86 -0
  77. data/lib/vendor/twitter/spec/twitter/console_spec.rb +15 -0
  78. data/lib/vendor/twitter/spec/twitter/core_spec.rb +127 -0
  79. data/lib/vendor/twitter/spec/twitter/ext/stdlib_spec.rb +59 -0
  80. data/lib/vendor/twitter/spec/twitter/extras_spec.rb +46 -0
  81. data/lib/vendor/twitter/spec/twitter/meta_spec.rb +90 -0
  82. data/lib/vendor/twitter/spec/twitter/model_spec.rb +508 -0
  83. data/lib/vendor/twitter/spec/twitter/version_spec.rb +19 -0
  84. data/lib/vendor/xmpp4r/CHANGELOG +83 -0
  85. data/lib/vendor/xmpp4r/COPYING +340 -0
  86. data/lib/vendor/xmpp4r/LICENSE +59 -0
  87. data/lib/vendor/xmpp4r/README.rdoc +110 -0
  88. data/lib/vendor/xmpp4r/README_ruby19.txt +43 -0
  89. data/lib/vendor/xmpp4r/Rakefile +262 -0
  90. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
  91. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
  92. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
  93. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
  94. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
  95. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
  96. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
  97. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
  98. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
  99. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
  100. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
  101. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
  102. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
  103. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
  104. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
  105. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
  106. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
  107. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
  108. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
  109. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
  110. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
  111. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/versionpoll.rb +90 -0
  112. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
  113. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
  114. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
  115. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/client.rb +70 -0
  116. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/component.rb +11 -0
  117. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
  118. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
  119. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
  120. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
  121. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
  122. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
  123. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/register.rb +42 -0
  124. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
  125. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
  126. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
  127. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
  128. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
  129. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
  130. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
  131. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
  132. data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
  133. data/lib/vendor/xmpp4r/lib/xmpp4r.rb +116 -0
  134. data/lib/vendor/xmpp4r/lib/xmpp4r/base64.rb +32 -0
  135. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams.rb +15 -0
  136. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
  137. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
  138. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
  139. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/target.rb +47 -0
  140. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
  141. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
  142. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
  143. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
  144. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +73 -0
  145. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +62 -0
  146. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
  147. data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
  148. data/lib/vendor/xmpp4r/lib/xmpp4r/callbacks.rb +124 -0
  149. data/lib/vendor/xmpp4r/lib/xmpp4r/caps.rb +1 -0
  150. data/lib/vendor/xmpp4r/lib/xmpp4r/caps/c.rb +53 -0
  151. data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/generator.rb +160 -0
  152. data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/helper.rb +87 -0
  153. data/lib/vendor/xmpp4r/lib/xmpp4r/client.rb +317 -0
  154. data/lib/vendor/xmpp4r/lib/xmpp4r/command/helper/responder.rb +53 -0
  155. data/lib/vendor/xmpp4r/lib/xmpp4r/command/iq/command.rb +154 -0
  156. data/lib/vendor/xmpp4r/lib/xmpp4r/component.rb +103 -0
  157. data/lib/vendor/xmpp4r/lib/xmpp4r/connection.rb +219 -0
  158. data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms.rb +5 -0
  159. data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms/x/data.rb +297 -0
  160. data/lib/vendor/xmpp4r/lib/xmpp4r/debuglog.rb +42 -0
  161. data/lib/vendor/xmpp4r/lib/xmpp4r/delay.rb +5 -0
  162. data/lib/vendor/xmpp4r/lib/xmpp4r/delay/x/delay.rb +99 -0
  163. data/lib/vendor/xmpp4r/lib/xmpp4r/discovery.rb +7 -0
  164. data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/helper/responder.rb +165 -0
  165. data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
  166. data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
  167. data/lib/vendor/xmpp4r/lib/xmpp4r/errors.rb +281 -0
  168. data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation.rb +5 -0
  169. data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
  170. data/lib/vendor/xmpp4r/lib/xmpp4r/framework/base.rb +55 -0
  171. data/lib/vendor/xmpp4r/lib/xmpp4r/framework/bot.rb +148 -0
  172. data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding.rb +5 -0
  173. data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding/client.rb +285 -0
  174. data/lib/vendor/xmpp4r/lib/xmpp4r/idgenerator.rb +37 -0
  175. data/lib/vendor/xmpp4r/lib/xmpp4r/iq.rb +221 -0
  176. data/lib/vendor/xmpp4r/lib/xmpp4r/jid.rb +167 -0
  177. data/lib/vendor/xmpp4r/lib/xmpp4r/message.rb +148 -0
  178. data/lib/vendor/xmpp4r/lib/xmpp4r/muc.rb +14 -0
  179. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
  180. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
  181. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
  182. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
  183. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
  184. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
  185. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/item.rb +143 -0
  186. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/muc.rb +70 -0
  187. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
  188. data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
  189. data/lib/vendor/xmpp4r/lib/xmpp4r/presence.rb +232 -0
  190. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub.rb +8 -0
  191. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
  192. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/event.rb +49 -0
  193. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/item.rb +35 -0
  194. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/items.rb +44 -0
  195. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
  196. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/publish.rb +24 -0
  197. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
  198. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
  199. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
  200. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodebrowser.rb +130 -0
  201. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
  202. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/servicehelper.rb +417 -0
  203. data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
  204. data/lib/vendor/xmpp4r/lib/xmpp4r/query.rb +15 -0
  205. data/lib/vendor/xmpp4r/lib/xmpp4r/rexmladdons.rb +151 -0
  206. data/lib/vendor/xmpp4r/lib/xmpp4r/roster.rb +7 -0
  207. data/lib/vendor/xmpp4r/lib/xmpp4r/roster/helper/roster.rb +519 -0
  208. data/lib/vendor/xmpp4r/lib/xmpp4r/roster/iq/roster.rb +215 -0
  209. data/lib/vendor/xmpp4r/lib/xmpp4r/roster/x/roster.rb +138 -0
  210. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc.rb +2 -0
  211. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/client.rb +123 -0
  212. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/server.rb +74 -0
  213. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
  214. data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
  215. data/lib/vendor/xmpp4r/lib/xmpp4r/sasl.rb +237 -0
  216. data/lib/vendor/xmpp4r/lib/xmpp4r/semaphore.rb +38 -0
  217. data/lib/vendor/xmpp4r/lib/xmpp4r/stream.rb +497 -0
  218. data/lib/vendor/xmpp4r/lib/xmpp4r/streamparser.rb +77 -0
  219. data/lib/vendor/xmpp4r/lib/xmpp4r/tune.rb +2 -0
  220. data/lib/vendor/xmpp4r/lib/xmpp4r/tune/helper/helper.rb +58 -0
  221. data/lib/vendor/xmpp4r/lib/xmpp4r/tune/tune.rb +113 -0
  222. data/lib/vendor/xmpp4r/lib/xmpp4r/vcard.rb +6 -0
  223. data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
  224. data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
  225. data/lib/vendor/xmpp4r/lib/xmpp4r/version.rb +7 -0
  226. data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/responder.rb +72 -0
  227. data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
  228. data/lib/vendor/xmpp4r/lib/xmpp4r/version/iq/version.rb +105 -0
  229. data/lib/vendor/xmpp4r/lib/xmpp4r/x.rb +37 -0
  230. data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml.rb +1 -0
  231. data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml/html.rb +115 -0
  232. data/lib/vendor/xmpp4r/lib/xmpp4r/xmpp4r.rb +18 -0
  233. data/lib/vendor/xmpp4r/lib/xmpp4r/xmppelement.rb +168 -0
  234. data/lib/vendor/xmpp4r/lib/xmpp4r/xmppstanza.rb +162 -0
  235. data/lib/vendor/xmpp4r/setup.rb +1586 -0
  236. data/lib/vendor/xmpp4r/test/bytestreams/tc_ibb.rb +186 -0
  237. data/lib/vendor/xmpp4r/test/bytestreams/tc_socks5bytestreams.rb +113 -0
  238. data/lib/vendor/xmpp4r/test/caps/tc_helper.rb +156 -0
  239. data/lib/vendor/xmpp4r/test/dataforms/tc_data.rb +81 -0
  240. data/lib/vendor/xmpp4r/test/delay/tc_xdelay.rb +51 -0
  241. data/lib/vendor/xmpp4r/test/discovery/tc_responder.rb +91 -0
  242. data/lib/vendor/xmpp4r/test/lib/assert_equal_xml.rb +14 -0
  243. data/lib/vendor/xmpp4r/test/lib/clienttester.rb +120 -0
  244. data/lib/vendor/xmpp4r/test/muc/tc_muc_mucclient.rb +830 -0
  245. data/lib/vendor/xmpp4r/test/muc/tc_muc_simplemucclient.rb +114 -0
  246. data/lib/vendor/xmpp4r/test/muc/tc_mucowner.rb +50 -0
  247. data/lib/vendor/xmpp4r/test/pubsub/tc_helper.rb +662 -0
  248. data/lib/vendor/xmpp4r/test/pubsub/tc_nodeconfig.rb +54 -0
  249. data/lib/vendor/xmpp4r/test/pubsub/tc_subscriptionconfig.rb +41 -0
  250. data/lib/vendor/xmpp4r/test/roster/tc_helper.rb +514 -0
  251. data/lib/vendor/xmpp4r/test/roster/tc_iqqueryroster.rb +173 -0
  252. data/lib/vendor/xmpp4r/test/roster/tc_xroster.rb +73 -0
  253. data/lib/vendor/xmpp4r/test/rpc/tc_helper.rb +96 -0
  254. data/lib/vendor/xmpp4r/test/tc_callbacks.rb +129 -0
  255. data/lib/vendor/xmpp4r/test/tc_class_names.rb +146 -0
  256. data/lib/vendor/xmpp4r/test/tc_client.rb +30 -0
  257. data/lib/vendor/xmpp4r/test/tc_errors.rb +146 -0
  258. data/lib/vendor/xmpp4r/test/tc_idgenerator.rb +30 -0
  259. data/lib/vendor/xmpp4r/test/tc_iq.rb +113 -0
  260. data/lib/vendor/xmpp4r/test/tc_iqquery.rb +31 -0
  261. data/lib/vendor/xmpp4r/test/tc_jid.rb +204 -0
  262. data/lib/vendor/xmpp4r/test/tc_message.rb +116 -0
  263. data/lib/vendor/xmpp4r/test/tc_presence.rb +150 -0
  264. data/lib/vendor/xmpp4r/test/tc_rexml.rb +139 -0
  265. data/lib/vendor/xmpp4r/test/tc_stream.rb +229 -0
  266. data/lib/vendor/xmpp4r/test/tc_streamComponent.rb +95 -0
  267. data/lib/vendor/xmpp4r/test/tc_streamError.rb +131 -0
  268. data/lib/vendor/xmpp4r/test/tc_streamSend.rb +59 -0
  269. data/lib/vendor/xmpp4r/test/tc_streamparser.rb +112 -0
  270. data/lib/vendor/xmpp4r/test/tc_xmppstanza.rb +135 -0
  271. data/lib/vendor/xmpp4r/test/ts_xmpp4r.rb +53 -0
  272. data/lib/vendor/xmpp4r/test/tune/tc_helper_recv.rb +84 -0
  273. data/lib/vendor/xmpp4r/test/tune/tc_helper_send.rb +74 -0
  274. data/lib/vendor/xmpp4r/test/tune/tc_tune.rb +79 -0
  275. data/lib/vendor/xmpp4r/test/vcard/tc_helper.rb +49 -0
  276. data/lib/vendor/xmpp4r/test/vcard/tc_iqvcard.rb +62 -0
  277. data/lib/vendor/xmpp4r/test/version/tc_helper.rb +60 -0
  278. data/lib/vendor/xmpp4r/test/version/tc_iqqueryversion.rb +97 -0
  279. data/lib/vendor/xmpp4r/test/xhtml/tc_html.rb +41 -0
  280. data/lib/vendor/xmpp4r/tools/gen_requires.bash +31 -0
  281. data/lib/vendor/xmpp4r/tools/xmpp4r-gemspec-test.rb +11 -0
  282. data/lib/vendor/xmpp4r/xmpp4r.gemspec +291 -0
  283. data/test/jabber_publisher_test.rb +1 -1
  284. data/test/mail_publisher_test.rb +2 -2
  285. data/test/mock/twitter.rb +0 -1
  286. data/test/rspec_builder_test.rb +39 -2
  287. data/test/rss_publisher_test.rb +1 -1
  288. data/test/twitter_publisher_test.rb +1 -1
  289. metadata +268 -53
  290. data/lib/cerberus/publisher/gmailer.rb +0 -17
@@ -0,0 +1,5 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ require 'xmpp4r/httpbinding/client'
@@ -0,0 +1,285 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+
6
+ require 'xmpp4r/client'
7
+ require 'net/http'
8
+
9
+ module Jabber
10
+ module HTTPBinding
11
+ ##
12
+ # This class implements an alternative Client
13
+ # using HTTP Binding (JEP0124).
14
+ #
15
+ # This class is designed to be a drop-in replacement
16
+ # for Jabber::Client, except for the
17
+ # Jabber::HTTP::Client#connect method which takes an URI
18
+ # as argument.
19
+ #
20
+ # HTTP requests are buffered to not exceed the negotiated
21
+ # 'polling' and 'requests' parameters.
22
+ #
23
+ # Stanzas in HTTP resonses may be delayed to arrive in the
24
+ # order defined by 'rid' parameters.
25
+ #
26
+ # =Debugging
27
+ # Turning Jabber::debug to true will make debug output
28
+ # not only spit out stanzas but HTTP request/response
29
+ # bodies, too.
30
+ class Client < Jabber::Client
31
+
32
+ # Content-Type to be used for communication
33
+ # (you can set this to "text/html")
34
+ attr_accessor :http_content_type
35
+ # The server should wait this value seconds if
36
+ # there is no stanza to be received
37
+ attr_accessor :http_wait
38
+ # The server may hold this amount of stanzas
39
+ # to reduce number of HTTP requests
40
+ attr_accessor :http_hold
41
+
42
+ ##
43
+ # Initialize
44
+ # jid:: [JID or String]
45
+ def initialize(jid)
46
+ super
47
+
48
+ @lock = Mutex.new
49
+ @pending_requests = 0
50
+ @last_send = Time.at(0)
51
+ @send_buffer = ''
52
+
53
+ @http_wait = 20
54
+ @http_hold = 1
55
+ @http_content_type = 'text/xml; charset=utf-8'
56
+ end
57
+
58
+ ##
59
+ # Set up the stream using uri as the HTTP Binding URI
60
+ #
61
+ # You may optionally pass host and port parameters
62
+ # to make use of the JEP0124 'route' feature.
63
+ #
64
+ # uri:: [URI::Generic or String]
65
+ # host:: [String] Optional host to route to
66
+ # port:: [Fixnum] Port for route feature
67
+ def connect(uri, host=nil, port=5222)
68
+ uri = URI::parse(uri) unless uri.kind_of? URI::Generic
69
+ @uri = uri
70
+
71
+ @allow_tls = false # Shall be done at HTTP level
72
+ @stream_mechanisms = []
73
+ @stream_features = {}
74
+ @http_rid = IdGenerator.generate_id.to_i
75
+ @pending_rid = @http_rid
76
+ @pending_rid_lock = Mutex.new
77
+
78
+ req_body = REXML::Element.new('body')
79
+ req_body.attributes['rid'] = @http_rid
80
+ req_body.attributes['content'] = @http_content_type
81
+ req_body.attributes['hold'] = @http_hold.to_s
82
+ req_body.attributes['wait'] = @http_wait.to_s
83
+ req_body.attributes['to'] = @jid.domain
84
+ if host
85
+ req_body.attributes['route'] = 'xmpp:#{host}:#{port}'
86
+ end
87
+ req_body.attributes['secure'] = 'true'
88
+ req_body.attributes['xmlns'] = 'http://jabber.org/protocol/httpbind'
89
+ res_body = post(req_body)
90
+ unless res_body.name == 'body'
91
+ raise 'Response body is no <body/> element'
92
+ end
93
+
94
+ @streamid = res_body.attributes['authid']
95
+ @status = CONNECTED
96
+ @http_sid = res_body.attributes['sid']
97
+ @http_wait = res_body.attributes['wait'].to_i if res_body.attributes['wait']
98
+ @http_hold = res_body.attributes['hold'].to_i if res_body.attributes['hold']
99
+ @http_inactivity = res_body.attributes['inactivity'].to_i
100
+ @http_polling = res_body.attributes['polling'].to_i
101
+ @http_polling = 5 if @http_polling == 0
102
+ @http_requests = res_body.attributes['requests'].to_i
103
+ @http_requests = 1 if @http_requests == 0
104
+
105
+ receive_elements_with_rid(@http_rid, res_body.children)
106
+
107
+ @features_sem.run
108
+ end
109
+
110
+ ##
111
+ # Send a stanza, additionally with block
112
+ #
113
+ # This method ensures a 'jabber:client' namespace for
114
+ # the stanza
115
+ def send(xml, &block)
116
+ if xml.kind_of? REXML::Element
117
+ xml.add_namespace('jabber:client')
118
+ end
119
+
120
+ super
121
+ end
122
+
123
+ ##
124
+ # Ensure that there is one pending request
125
+ #
126
+ # Will be automatically called if you've sent
127
+ # a stanza.
128
+ def ensure_one_pending_request
129
+ return if is_disconnected?
130
+
131
+ if @lock.synchronize { @pending_requests } < 1
132
+ send_data('')
133
+ end
134
+ end
135
+
136
+ ##
137
+ # Close the session by sending
138
+ # <presence type='unavailable'/>
139
+ def close
140
+ @status = DISCONNECTED
141
+ send(Jabber::Presence.new.set_type(:unavailable))
142
+ end
143
+
144
+ private
145
+
146
+ ##
147
+ # Receive stanzas ensuring that the 'rid' order is kept
148
+ # result:: [REXML::Element]
149
+ def receive_elements_with_rid(rid, elements)
150
+ while rid > @pending_rid
151
+ @pending_rid_lock.lock
152
+ end
153
+ @pending_rid = rid + 1
154
+
155
+ elements.each { |e|
156
+ receive(e)
157
+ }
158
+
159
+ @pending_rid_lock.unlock
160
+ end
161
+
162
+ ##
163
+ # Do a POST request
164
+ def post(body)
165
+ body = body.to_s
166
+ request = Net::HTTP::Post.new(@uri.path)
167
+ request.content_length = body.size
168
+ request.body = body
169
+ request['Content-Type'] = @http_content_type
170
+ Jabber::debuglog("HTTP REQUEST (#{@pending_requests}/#{@http_requests}):\n#{request.body}")
171
+ response = Net::HTTP.start(@uri.host, @uri.port) { |http|
172
+ http.use_ssl = true if @uri.kind_of? URI::HTTPS
173
+ http.request(request)
174
+ }
175
+ Jabber::debuglog("HTTP RESPONSE (#{@pending_requests}/#{@http_requests}):\n#{response.body}")
176
+
177
+ unless response.kind_of? Net::HTTPSuccess
178
+ # Unfortunately, HTTPResponses aren't exceptions
179
+ # TODO: rescue'ing code should be able to distinguish
180
+ raise Net::HTTPBadResponse, "#{response.class}"
181
+ end
182
+
183
+ body = REXML::Document.new(response.body).root
184
+ if body.name != 'body' and body.namespace != 'http://jabber.org/protocol/httpbind'
185
+ raise REXML::ParseException.new('Malformed body')
186
+ end
187
+ body
188
+ end
189
+
190
+ ##
191
+ # Prepare data to POST and
192
+ # handle the result
193
+ def post_data(data)
194
+ req_body = nil
195
+ current_rid = nil
196
+
197
+ begin
198
+ begin
199
+ @lock.synchronize {
200
+ # Do not send unneeded requests
201
+ if data.size < 1 and @pending_requests > 0
202
+ return
203
+ end
204
+
205
+ req_body = "<body"
206
+ req_body += " rid='#{@http_rid += 1}'"
207
+ req_body += " sid='#{@http_sid}'"
208
+ req_body += " xmlns='http://jabber.org/protocol/httpbind'"
209
+ req_body += ">"
210
+ req_body += data
211
+ req_body += "</body>"
212
+ current_rid = @http_rid
213
+
214
+ @pending_requests += 1
215
+ @last_send = Time.now
216
+ }
217
+
218
+ res_body = post(req_body)
219
+
220
+ ensure
221
+ @lock.synchronize { @pending_requests -= 1 }
222
+ end
223
+
224
+ receive_elements_with_rid(current_rid, res_body.children)
225
+ ensure_one_pending_request
226
+
227
+ rescue REXML::ParseException
228
+ if @exception_block
229
+ Thread.new do
230
+ Thread.current.abort_on_exception = true
231
+ close; @exception_block.call(e, self, :parser)
232
+ end
233
+ else
234
+ Jabber::debuglog "Exception caught when parsing HTTP response!"
235
+ close
236
+ raise
237
+ end
238
+
239
+ rescue StandardError => e
240
+ Jabber::debuglog("POST error (will retry): #{e.class}: #{e}")
241
+ receive_elements_with_rid(current_rid, [])
242
+ # It's not good to resend on *any* exception,
243
+ # but there are too many cases (Timeout, 404, 502)
244
+ # where resending is appropriate
245
+ # TODO: recognize these conditions and act appropriate
246
+ send_data(data)
247
+ end
248
+ end
249
+
250
+ ##
251
+ # Send data,
252
+ # buffered and obeying 'polling' and 'requests' limits
253
+ def send_data(data)
254
+ @lock.synchronize do
255
+
256
+ @send_buffer += data
257
+ limited_by_polling = (@last_send + @http_polling >= Time.now)
258
+ limited_by_requests = (@pending_requests + 1 > @http_requests)
259
+
260
+ # Can we send?
261
+ if !limited_by_polling and !limited_by_requests
262
+ data = @send_buffer
263
+ @send_buffer = ''
264
+
265
+ Thread.new do
266
+ Thread.current.abort_on_exception = true
267
+ post_data(data)
268
+ end
269
+
270
+ elsif !limited_by_requests
271
+ Thread.new do
272
+ Thread.current.abort_on_exception = true
273
+ # Defer until @http_polling has expired
274
+ wait = @last_send + @http_polling - Time.now
275
+ sleep(wait) if wait > 0
276
+ # Ignore locking, it's already threaded ;-)
277
+ send_data('')
278
+ end
279
+ end
280
+
281
+ end
282
+ end
283
+ end
284
+ end
285
+ end
@@ -0,0 +1,37 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ require 'singleton'
6
+
7
+ module Jabber
8
+ ##
9
+ # The Jabber::IdGenerator class generates unique IDs for use
10
+ # in XMMP stanzas. Jabber::IdGenerator includes the Singleton
11
+ # Mixin, usage as following:
12
+ # Jabber::IdGenerator.generate_id
13
+ # => "23"
14
+ class IdGenerator
15
+ include Singleton
16
+
17
+ def initialize
18
+ @last_id = 0
19
+ end
20
+
21
+ ##
22
+ # Generate an unique ID.
23
+ #
24
+ # This is kind of boring this way, as it just counts up
25
+ # a number. Maybe something more random somewhen...
26
+ def IdGenerator.generate_id
27
+ IdGenerator.instance.generate_id
28
+ end
29
+
30
+ def generate_id
31
+ @last_id += 1
32
+ timefrac = Time.new.to_f.to_s.split(/\./, 2).last[-3..-1]
33
+
34
+ "#{@last_id}#{timefrac}"
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,221 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ require 'xmpp4r/xmppstanza'
6
+ require 'xmpp4r/jid'
7
+ require 'digest/sha1'
8
+
9
+ require 'xmpp4r/query'
10
+ require 'xmpp4r/vcard/iq/vcard'
11
+
12
+ module Jabber
13
+ ##
14
+ # IQ: Information/Query
15
+ # (see RFC3920 - 9.2.3
16
+ #
17
+ # A class used to build/parse IQ requests/responses
18
+ class Iq < XMPPStanza
19
+ name_xmlns 'iq', 'jabber:client'
20
+ force_xmlns true
21
+
22
+ @@element_classes = {}
23
+
24
+ ##
25
+ # Build a new <iq/> stanza
26
+ # type:: [Symbol] or nil, see Iq#type
27
+ # to:: [JID] Recipient
28
+ def initialize(type = nil, to = nil)
29
+ super()
30
+
31
+ if not to.nil?
32
+ set_to(to)
33
+ end
34
+ if not type.nil?
35
+ set_type(type)
36
+ end
37
+ end
38
+
39
+ ##
40
+ # Get the type of the Iq stanza
41
+ #
42
+ # The following values are allowed:
43
+ # * :get
44
+ # * :set
45
+ # * :result
46
+ # * :error
47
+ # result:: [Symbol] or nil
48
+ def type
49
+ case super
50
+ when 'get' then :get
51
+ when 'set' then :set
52
+ when 'result' then :result
53
+ when 'error' then :error
54
+ else nil
55
+ end
56
+ end
57
+
58
+ ##
59
+ # Set the type of the Iq stanza (see Iq#type)
60
+ # v:: [Symbol] or nil
61
+ def type=(v)
62
+ case v
63
+ when :get then super('get')
64
+ when :set then super('set')
65
+ when :result then super('result')
66
+ when :error then super('error')
67
+ else super(nil)
68
+ end
69
+ end
70
+
71
+ ##
72
+ # Set the type of the Iq stanza (chaining-friendly)
73
+ # v:: [Symbol] or nil
74
+ def set_type(v)
75
+ self.type = v
76
+ self
77
+ end
78
+
79
+ ##
80
+ # Returns the iq's query child, or nil
81
+ # result:: [IqQuery]
82
+ def query
83
+ first_element('query')
84
+ end
85
+
86
+ ##
87
+ # Delete old elements named newquery.name
88
+ #
89
+ # newquery:: [REXML::Element] will be added
90
+ def query=(newquery)
91
+ delete_elements(newquery.name)
92
+ add(newquery)
93
+ end
94
+
95
+ ##
96
+ # Returns the iq's query's namespace, or nil
97
+ # result:: [String]
98
+ def queryns
99
+ e = first_element('query')
100
+ if e
101
+ return e.namespace
102
+ else
103
+ return nil
104
+ end
105
+ end
106
+
107
+ ##
108
+ # Returns the iq's <vCard/> child, or nil
109
+ # result:: [IqVcard]
110
+ def vcard
111
+ first_element('vCard')
112
+ end
113
+
114
+ ##
115
+ # Returns the iq's <pubsub/> child, or nil
116
+ # result:: [IqVcard]
117
+ def pubsub
118
+ first_element('pubsub')
119
+ end
120
+
121
+ ##
122
+ # Returns the iq's <command/> child, or nil
123
+ # resulte:: [IqCommand]
124
+ def command
125
+ first_element("command")
126
+ end
127
+
128
+ ##
129
+ # Create a new Iq stanza with an unspecified query child
130
+ # (<query/> has no namespace)
131
+ def Iq.new_query(type = nil, to = nil)
132
+ iq = Iq.new(type, to)
133
+ query = IqQuery.new
134
+ iq.add(query)
135
+ iq
136
+ end
137
+
138
+ ##
139
+ # Create a new jabber:iq:auth set Stanza.
140
+ def Iq.new_authset(jid, password)
141
+ iq = Iq.new(:set)
142
+ query = IqQuery.new
143
+ query.add_namespace('jabber:iq:auth')
144
+ query.add(REXML::Element.new('username').add_text(jid.node))
145
+ query.add(REXML::Element.new('password').add_text(password))
146
+ query.add(REXML::Element.new('resource').add_text(jid.resource)) if not jid.resource.nil?
147
+ iq.add(query)
148
+ iq
149
+ end
150
+
151
+ ##
152
+ # Create a new jabber:iq:auth set Stanza for Digest authentication
153
+ def Iq.new_authset_digest(jid, session_id, password)
154
+ iq = Iq.new(:set)
155
+ query = IqQuery.new
156
+ query.add_namespace('jabber:iq:auth')
157
+ query.add(REXML::Element.new('username').add_text(jid.node))
158
+ query.add(REXML::Element.new('digest').add_text(Digest::SHA1.hexdigest(session_id + password)))
159
+ query.add(REXML::Element.new('resource').add_text(jid.resource)) if not jid.resource.nil?
160
+ iq.add(query)
161
+ iq
162
+ end
163
+
164
+ ##
165
+ # Create a new jabber:iq:register set stanza for service/server registration
166
+ # username:: [String] (Element will be ommited if unset)
167
+ # password:: [String] (Element will be ommited if unset)
168
+ def Iq.new_register(username=nil, password=nil)
169
+ iq = Iq.new(:set)
170
+ query = IqQuery.new
171
+ query.add_namespace('jabber:iq:register')
172
+ query.add(REXML::Element.new('username').add_text(username)) if username
173
+ query.add(REXML::Element.new('password').add_text(password)) if password
174
+ iq.add(query)
175
+ iq
176
+ end
177
+
178
+ ##
179
+ # Create a new jabber:iq:register get stanza for retrieval
180
+ # of accepted registration information
181
+ def Iq.new_registerget
182
+ iq = Iq.new(:get)
183
+ query = IqQuery.new
184
+ query.add_namespace('jabber:iq:register')
185
+ iq.add(query)
186
+ iq
187
+ end
188
+
189
+ ##
190
+ # Create a new jabber:iq:roster get Stanza.
191
+ #
192
+ # IqQueryRoster is unused here because possibly not require'd
193
+ def Iq.new_rosterget
194
+ iq = Iq.new(:get)
195
+ query = IqQuery.new
196
+ query.add_namespace('jabber:iq:roster')
197
+ iq.add(query)
198
+ iq
199
+ end
200
+
201
+ ##
202
+ # Create a new jabber:iq:roster get Stanza.
203
+ def Iq.new_browseget
204
+ iq = Iq.new(:get)
205
+ query = IqQuery.new
206
+ query.add_namespace('jabber:iq:browse')
207
+ iq.add(query)
208
+ iq
209
+ end
210
+
211
+ ##
212
+ # Create a new jabber:iq:roster set Stanza.
213
+ def Iq.new_rosterset
214
+ iq = Iq.new(:set)
215
+ query = IqQuery.new
216
+ query.add_namespace('jabber:iq:roster')
217
+ iq.add(query)
218
+ iq
219
+ end
220
+ end
221
+ end