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,281 @@
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
+ module Jabber
6
+
7
+ # CUSTOM ERROR CLASSES
8
+
9
+ # All of our custom errors are superclassed by JabberError < StandardError
10
+ class JabberError < StandardError; end
11
+
12
+ # A client-side only argument error
13
+ class ArgumentError < JabberError; end
14
+
15
+ ##
16
+ # An error returned from the server
17
+ #
18
+ # e.g. This exception can be raised by helpers when they
19
+ # receive a server reply with <tt>type='error'</tt>
20
+ #
21
+ # The ServerError carries a Jabber::ErrorResponse element
22
+ #
23
+ class ServerError < JabberError #:nodoc:
24
+
25
+ ##
26
+ # The error element which caused this exception
27
+ attr_reader :error
28
+
29
+ ##
30
+ # Initialize a ServerError by passing an ErrorResponse instance
31
+ # error:: [Error]
32
+ def initialize(error)
33
+ @error = error
34
+ end
35
+
36
+ ##
37
+ # Sample output:
38
+ # 'subscription-required: Please subscribe first'
39
+ def to_s
40
+ "#{@error.error}: #{@error.text}"
41
+ end
42
+ end
43
+
44
+ class ClientAuthenticationFailure < JabberError; end
45
+
46
+ class ComponentAuthenticationFailure < JabberError; end
47
+
48
+ # TODO : Give this a better name
49
+ class NoNameXmlnsRegistered < JabberError
50
+ def initialize(klass)
51
+ super "Class #{klass} has not set name and xmlns"
52
+ end
53
+ end
54
+
55
+ # TODO : Give this a better name
56
+ class SOCKS5Error < JabberError; end
57
+
58
+ ##
59
+ # A class used to build/parse <error/> elements.
60
+ # Look at XEP-0086 for explanation:
61
+ # http://www.xmpp.org/extensions/xep-0086.html
62
+ #
63
+ # FIXME : XEP-0086 is officially deprecated. What effect does that have on this class? Any?
64
+ #
65
+ class ErrorResponse < XMPPElement
66
+ name_xmlns 'error'
67
+
68
+ ##
69
+ # errorcondition:: [nil] or [String] of the following:
70
+ # * "bad-request"
71
+ # * "conflict"
72
+ # * "feature-not-implemented"
73
+ # * "forbidden"
74
+ # * "gone"
75
+ # * "internal-server-error"
76
+ # * "item-not-found"
77
+ # * "jid-malformed"
78
+ # * "not-acceptable"
79
+ # * "not-allowed"
80
+ # * "not-authorized"
81
+ # * "payment-required"
82
+ # * "recipient-unavailable"
83
+ # * "redirect"
84
+ # * "registration-required"
85
+ # * "remote-server-not-found"
86
+ # * "remote-server-timeout"
87
+ # * "resource-constraint"
88
+ # * "service-unavailable"
89
+ # * "subscription-required"
90
+ # * "undefined-condition"
91
+ # * "unexpected-request"
92
+ # Will raise an [Exception] if not [nil] and none of the above
93
+ #
94
+ # Also sets type and code to appropriate values according to errorcondition
95
+ #
96
+ # text: [nil] or [String] ErrorResponse text
97
+ def initialize(errorcondition=nil, text=nil)
98
+ if errorcondition.nil?
99
+ super()
100
+ set_text(text) unless text.nil?
101
+ else
102
+ errortype = nil
103
+ errorcode = nil
104
+ @@Errors.each { |cond,type,code|
105
+ if errorcondition == cond
106
+ errortype = type
107
+ errorcode = code
108
+ end
109
+ }
110
+
111
+ if errortype.nil? || errorcode.nil?
112
+ raise ArgumentError, "Unknown error condition when initializing ErrorReponse"
113
+ end
114
+
115
+ super()
116
+ set_error(errorcondition)
117
+ set_type(errortype)
118
+ set_code(errorcode)
119
+ set_text(text) unless text.nil?
120
+ end
121
+ end
122
+
123
+ ##
124
+ # Get the 'Legacy error code' or nil
125
+ # result:: [Integer] Error code
126
+ def code
127
+ if attributes['code']
128
+ attributes['code'].to_i
129
+ else
130
+ nil
131
+ end
132
+ end
133
+
134
+ ##
135
+ # Set the 'Legacy error code' or nil
136
+ # i:: [Integer] Error code
137
+ def code=(i)
138
+ if i.nil?
139
+ attributes['code'] = nil
140
+ else
141
+ attributes['code'] = i.to_s
142
+ end
143
+ end
144
+
145
+ ##
146
+ # Set the 'Legacy error code' (chaining-friendly)
147
+ def set_code(i)
148
+ self.code = i
149
+ self
150
+ end
151
+
152
+ ##
153
+ # Get the 'XMPP error condition'
154
+ #
155
+ # This can be anything that possess the specific namespace,
156
+ # checks don't apply here
157
+ def error
158
+ name = nil
159
+ each_element { |e| name = e.name if (e.namespace == 'urn:ietf:params:xml:ns:xmpp-stanzas') && (e.name != 'text') }
160
+ name
161
+ end
162
+
163
+ ##
164
+ # Set the 'XMPP error condition'
165
+ #
166
+ # One previous element with that namespace will be deleted before
167
+ #
168
+ # s:: [String] Name of the element to be added,
169
+ # namespace will be added automatically, checks don't apply here
170
+ def error=(s)
171
+ xe = nil
172
+ each_element { |e| xe = e if (e.namespace == 'urn:ietf:params:xml:ns:xmpp-stanzas') && (e.name != 'text') }
173
+ unless xe.nil?
174
+ delete_element(xe)
175
+ end
176
+
177
+ add_element(s).add_namespace('urn:ietf:params:xml:ns:xmpp-stanzas')
178
+ end
179
+
180
+ ##
181
+ # Set the 'XMPP error condition' (chaining-friendly)
182
+ def set_error(s)
183
+ self.error = s
184
+ self
185
+ end
186
+
187
+ ##
188
+ # Get the errors <text/> element text
189
+ # result:: [String] or nil
190
+ def text
191
+ first_element_text('text') || super
192
+ end
193
+
194
+ ##
195
+ # Set the errors <text/> element text
196
+ # (Previous <text/> elements will be deleted first)
197
+ # s:: [String] <text/> content or [nil] if no <text/> element
198
+ def text=(s)
199
+ delete_elements('text')
200
+
201
+ unless s.nil?
202
+ e = add_element('text')
203
+ e.add_namespace('urn:ietf:params:xml:ns:xmpp-stanzas')
204
+ e.text = s
205
+ end
206
+ end
207
+
208
+ ##
209
+ # Set the errors <text/> element text (chaining-friendly)
210
+ def set_text(s)
211
+ self.text = s
212
+ self
213
+ end
214
+
215
+ ##
216
+ # Get the type of error
217
+ # (meaning how to proceed)
218
+ # result:: [Symbol] or [nil] as following:
219
+ # * :auth
220
+ # * :cancel
221
+ # * :continue
222
+ # * :modify
223
+ # * :wait
224
+ def type
225
+ case attributes['type']
226
+ when 'auth' then :auth
227
+ when 'cancel' then :cancel
228
+ when 'continue' then :continue
229
+ when 'modify' then :modify
230
+ when 'wait' then :wait
231
+ else nil
232
+ end
233
+ end
234
+
235
+ ##
236
+ # Set the type of error (see ErrorResponse#type)
237
+ def type=(t)
238
+ case t
239
+ when :auth then attributes['type'] = 'auth'
240
+ when :cancel then attributes['type'] = 'cancel'
241
+ when :continue then attributes['type'] = 'continue'
242
+ when :modify then attributes['type'] = 'modify'
243
+ when :wait then attributes['type'] = 'wait'
244
+ else attributes['type'] = nil
245
+ end
246
+ end
247
+
248
+ ##
249
+ # Set the type of error (chaining-friendly)
250
+ def set_type(t)
251
+ self.type = t
252
+ self
253
+ end
254
+
255
+ ##
256
+ # Possible XMPP error conditions, types and codes (XEP-0086)
257
+ @@Errors = [['bad-request', :modify, 400],
258
+ ['conflict', :cancel, 409],
259
+ ['feature-not-implemented', :cancel, 501],
260
+ ['forbidden', :auth, 403],
261
+ ['gone', :modify, 302],
262
+ ['internal-server-error', :wait, 500],
263
+ ['item-not-found', :cancel, 404],
264
+ ['jid-malformed', :modify, 400],
265
+ ['not-acceptable', :modify, 406],
266
+ ['not-allowed', :cancel, 405],
267
+ ['not-authorized', :auth, 401],
268
+ ['payment-required', :auth, 402],
269
+ ['recipient-unavailable', :wait, 404],
270
+ ['redirect', :modify, 302],
271
+ ['registration-required', :auth, 407],
272
+ ['remote-server-not-found', :cancel, 404],
273
+ ['remote-server-timeout', :wait, 504],
274
+ ['resource-constraint', :wait, 500],
275
+ ['service-unavailable', :cancel, 503],
276
+ ['subscription-required', :auth, 407],
277
+ ['undefined-condition', nil, 500],
278
+ ['unexpected-request', :wait, 400]]
279
+ end
280
+
281
+ end
@@ -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/feature_negotiation/iq/feature.rb'
@@ -0,0 +1,28 @@
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/iq'
6
+ require 'xmpp4r/dataforms/x/data'
7
+
8
+ module Jabber
9
+ module FeatureNegotiation
10
+ ##
11
+ # Feature negotiation,
12
+ # can appear as direct child to Iq
13
+ # or as child of IqSi
14
+ class IqFeature < XMPPElement
15
+ name_xmlns 'feature', 'http://jabber.org/protocol/feature-neg'
16
+
17
+ ##
18
+ # First <x/> child with xmlns='jabber:x:data'
19
+ def x
20
+ res = nil
21
+ each_element('x') { |e|
22
+ res = e if e.namespace == 'jabber:x:data'
23
+ }
24
+ res
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,55 @@
1
+ require 'thread'
2
+
3
+ module Jabber
4
+ module Framework
5
+ class Base
6
+
7
+ def self.helper(name, klass=nil, &factory)
8
+ if klass.nil? and factory.nil?
9
+ raise "helper #{name} needs a class or factory"
10
+ end
11
+
12
+ define_method(name) do
13
+ @helpers_lock.synchronize do
14
+ if @helpers[name]
15
+ @helpers[name]
16
+ else
17
+ if factory
18
+ @helpers[name] = instance_eval { factory.call(@stream) }
19
+ elsif klass
20
+ @helpers[name] = klass.new(@stream)
21
+ else
22
+ raise
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ attr_accessor :stream
30
+
31
+ def initialize(stream)
32
+ @stream = stream
33
+ @helpers = {}
34
+ @helpers_lock = Mutex.new
35
+
36
+ # Catch all unhandled iq stanzas (lowest priority)
37
+ @stream.add_iq_callback(-1000, self, &method(:on_unhandled_iq))
38
+ end
39
+
40
+ def on_unhandled_iq(iq)
41
+ if iq.type == :get or iq.type == :set
42
+ answer = iq.answer(true)
43
+ answer.type = :error
44
+ answer.add(ErrorResponse.new('feature-not-implemented'))
45
+ @stream.send(answer)
46
+
47
+ true
48
+ else
49
+ false
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,148 @@
1
+ require 'xmpp4r/framework/base'
2
+
3
+ require 'xmpp4r'
4
+ require 'xmpp4r/roster'
5
+ require 'xmpp4r/caps/c'
6
+ require 'xmpp4r/discovery'
7
+ require 'xmpp4r/xhtml'
8
+
9
+ module Jabber
10
+ module Framework
11
+ ##
12
+ # Abstract handler methods that *may* be implemented by a deriving class:
13
+ # * on_message(text)
14
+ # * on_message_xhtml(html_body, text)
15
+ class Bot < Base
16
+ helper :roster, Roster::Helper
17
+ helper(:disco_default) { |cl|
18
+ Discovery::Responder.new(cl,
19
+ nil,
20
+ [Jabber::Discovery::Identity.new('client', 'XMPP4R Bot', 'bot')]
21
+ )
22
+ }
23
+ helper(:disco_caps) { |cl|
24
+ Discovery::Responder.new(cl,
25
+ "http://home.gna.org/xmpp4r/#{Jabber::XMPP4R_VERSION}",
26
+ [Jabber::Discovery::Identity.new('client', 'XMPP4R Bot', 'bot')]
27
+ )
28
+ }
29
+
30
+ def initialize(jid, password)
31
+ cl = Jabber::Client.new(jid)
32
+ cl.connect
33
+ cl.auth(password)
34
+
35
+ super(cl)
36
+
37
+ roster.add_subscription_request_callback do |item,presence|
38
+ if accept_subscription_from?(presence.from.strip)
39
+ roster.accept_subscription(presence.from.strip)
40
+ else
41
+ roster.decline_subscription(presence.from.strip)
42
+ end
43
+ end
44
+
45
+ @pep_notifications = []
46
+ cl.add_message_callback do |msg|
47
+ if msg.type != :error and msg.body
48
+ if (html = msg.first_element('html')) and respond_to? :on_message_xhtml
49
+ on_message_xhtml(html.body, msg.body)
50
+ elsif respond_to? :on_message
51
+ on_message(msg.body)
52
+ end
53
+ elsif msg.type != :error and (event = msg.first_element('event'))
54
+ event.each_element('items') do |items|
55
+ node = items.attributes['node']
56
+ items.each_element('item') do |item|
57
+ @pep_notifications.each { |notification_node,callback|
58
+ if node == notification_node
59
+ callback.call(msg.from, item)
60
+ end
61
+ }
62
+ end
63
+ end
64
+ else
65
+ false
66
+ end
67
+ end
68
+
69
+ add_cap('presence')
70
+ add_cap(Caps::NS_CAPS)
71
+ add_cap('message') if respond_to? :on_message
72
+ add_cap(XHTML::NS_XHTML_IM) if respond_to? :on_message_xhtml
73
+
74
+ @presence_show = nil
75
+ @presence_status = nil
76
+ end
77
+
78
+ ##
79
+ # Add feature namespace to Capabilities Discovery
80
+ def add_cap(capability)
81
+ disco_default.add_feature(capability)
82
+ disco_caps.add_feature(capability)
83
+ end
84
+
85
+ ##
86
+ # Front-end for Roster::Helper#add_subscription_request_callback
87
+ #
88
+ # Can be overwritten, must return true or false
89
+ def accept_subscription_from?(jid)
90
+ true
91
+ end
92
+
93
+ ##
94
+ # Send a simple text chat message
95
+ def send_message(to, text)
96
+ msg = Message.new
97
+ msg.type = :chat
98
+ msg.to = to
99
+ msg.body = text
100
+ @stream.send(msg)
101
+ end
102
+
103
+ ##
104
+ # Send an XHTML chat message
105
+ # text:: [String] alternate plain text body, generated from xhtml_contents if nil
106
+ def send_message_xhtml(to, xhtml_contents, text=nil)
107
+ msg = Message.new
108
+ msg.type = :chat
109
+ msg.to = to
110
+ html = msg.add(XHTML::HTML.new(xhtml_contents))
111
+ msg.body = text ? text : html.to_text
112
+ @stream.send(msg)
113
+ end
114
+
115
+ ##
116
+ # Set and send a Presence
117
+ def set_presence(show=nil, status=nil)
118
+ @presence_show = show
119
+ @presence_status = status
120
+ send_presence
121
+ end
122
+
123
+ private
124
+
125
+ def send_presence
126
+ roster.wait_for_roster
127
+
128
+ # TODO: vcard photo hash
129
+ if @presence_show == :unavailable
130
+ presence = Presence.new(nil, @presence_status)
131
+ presence.type = :unavailable
132
+ else
133
+ presence = Presence.new(@presence_show, @presence_status)
134
+ end
135
+ presence.add(disco_caps.generate_caps)
136
+ @stream.send(presence)
137
+ end
138
+
139
+ public
140
+
141
+ def add_pep_notification(node, &callback)
142
+ add_cap("#{node}+notify")
143
+ @pep_notifications << [node, callback]
144
+ end
145
+ end
146
+
147
+ end
148
+ end