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,41 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This script will send a jabber message to the specified JID. The subject can be
4
+ # specified using the '-s' option, and the message will be taken from stdin.
5
+
6
+ $:.unshift '../../../../../lib'
7
+
8
+ require 'optparse'
9
+ require 'xmpp4r'
10
+ include Jabber
11
+
12
+ # settings
13
+ myJID = JID.new('bot@localhost/Bot')
14
+ myPassword = 'bot'
15
+
16
+ to = nil
17
+ subject = ''
18
+ OptionParser.new do |opts|
19
+ opts.banner = 'Usage: jabbersend.rb -s \'subject\' -t dest@domain'
20
+ opts.separator ''
21
+ opts.on('-s', '--subject SUBJECT', 'sets the message\'s subject') { |s| subject = s }
22
+ opts.on('-t', '--to DESTJID', 'sets the receiver') { |t| to = JID.new(t) }
23
+ opts.on_tail('-h', '--help', 'Show this message') {
24
+ puts opts
25
+ exit
26
+ }
27
+ opts.parse!(ARGV)
28
+ end
29
+
30
+ if to.nil?
31
+ puts "No receiver specified. See jabbersend -h"
32
+ end
33
+
34
+ cl = Client.new(myJID)
35
+ cl.connect
36
+ cl.auth(myPassword)
37
+ body = STDIN.readlines.join
38
+ m = Message.new(to, body).set_type(:normal).set_id('1').set_subject(subject)
39
+ puts m.to_s
40
+ cl.send(m)
41
+ cl.close
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This script will send a jabber message to a list of JID given on stdin.
4
+
5
+ $:.unshift '../../../../../lib'
6
+
7
+ require 'optparse'
8
+ require 'xmpp4r'
9
+ include Jabber
10
+ #Jabber::debug = true
11
+
12
+ # - message in file
13
+ # - subject in command line
14
+ # - JID list on stdin
15
+
16
+ # settings
17
+ jid = JID.new('bot@localhost/Bot')
18
+ password = 'bot'
19
+ filename = 'message.txt'
20
+
21
+ subject = "Message de test"
22
+
23
+ OptionParser.new do |opts|
24
+ opts.banner = 'Usage: mass_sender.rb -j jid -p password'
25
+ opts.separator ''
26
+ opts.on('-j', '--jid JID', 'sets the jid') { |j| jid = JID.new(j) }
27
+ opts.on('-p', '--password PASSWORD', 'sets the password') { |p| password = p }
28
+ opts.on('-f', '--filename MESSAGE', 'sets the filename containing the message') { |f| filename = f }
29
+ opts.on('-s', '--subject SUBJECT', 'sets the subject') { |s| subject = s }
30
+ opts.on_tail('-h', '--help', 'Show this message') {
31
+ puts opts
32
+ exit
33
+ }
34
+ opts.parse!(ARGV)
35
+ end
36
+
37
+ body = IO::read(filename).chomp
38
+
39
+ cl = Client.new(jid)
40
+ cl.connect
41
+ cl.auth(password)
42
+ exit = false
43
+ sent = []
44
+ cl.add_message_callback do |m|
45
+ if m.type != :error
46
+ if !sent.include?(m.from)
47
+ cl.send(Message.new(m.from, "Je suis un robot. Si tu souhaites contacter un administrateur du serveur, envoie un message à lucas@nussbaum.fr ou rejoins la salle jabberfr@chat.jabberfr.org."))
48
+ sent << m.from
49
+ end
50
+ if m.body == 'exitnowplease'
51
+ cl.send(Message.new(m.from, "Exiting ..."))
52
+ exit = true
53
+ end
54
+ cl.send(Message.new('lucas@nussbaum.fr', "From #{m.from}: #{m.body.to_s}"))
55
+ end
56
+ end
57
+ cl.send(Presence.new)
58
+ m = Message.new(nil, body)
59
+ m.subject = subject
60
+ STDIN.each_line { |l|
61
+ l.chomp!
62
+ m.set_to(JID.new(l).to_s)
63
+ cl.send(m)
64
+ }
65
+ while not exit do
66
+ cl.process(1)
67
+ end
68
+ cl.close
@@ -0,0 +1,12 @@
1
+ require 'xmpp4r'
2
+ require 'xmpp4r/muc'
3
+
4
+ client = Jabber::Client.new('admin@myserver.co.uk/ruby')
5
+ muc = Jabber::MUC::MUCClient.new(client)
6
+ client.connect
7
+ client.auth('admin')
8
+ muc.join('room@conference.myserver.co.uk/admin')
9
+ muc.configure(
10
+ 'muc#roomconfig_roomname' => 'roomname',
11
+ 'muc#roomconfig_persistentroom' => 1
12
+ )
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift '../../../../../lib'
4
+
5
+ require 'xmpp4r'
6
+ require 'xmpp4r/muc/helper/mucbrowser'
7
+
8
+ if ARGV.size != 3
9
+ puts "Usage: #{$0} <jid> <password> <muc-jid>"
10
+ exit
11
+ end
12
+
13
+ jid, password, muc_jid = Jabber::JID.new(ARGV.shift), ARGV.shift, Jabber::JID.new(ARGV.shift)
14
+
15
+ cl = Jabber::Client.new(jid)
16
+ cl.connect
17
+ cl.auth(password)
18
+
19
+ browser = Jabber::MUC::MUCBrowser.new(cl)
20
+
21
+ print "Querying #{muc_jid} for identity..."; $stdout.flush
22
+ name = browser.muc_name(muc_jid)
23
+
24
+ if name.nil?
25
+ puts " Sorry, but the queried MUC component doesn't seem to support MUC or Groupchat."
26
+ else
27
+ puts " #{name}"
28
+
29
+ print "Querying #{muc_jid} for its rooms..."; $stdout.flush
30
+ rooms = browser.muc_rooms(muc_jid)
31
+ puts " #{rooms.size} rooms found"
32
+
33
+ max_room_length = 0
34
+ rooms.each_key { |jid| max_room_length = jid.to_s.size if jid.to_s.size > max_room_length }
35
+
36
+ rooms.each { |jid,name|
37
+ puts "#{jid.to_s.ljust(max_room_length)} #{name}"
38
+ }
39
+ end
40
+
41
+ cl.close
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift '../../../../../lib/'
3
+ require 'xmpp4r'
4
+ require 'xmpp4r/muc/helper/simplemucclient'
5
+
6
+
7
+ if ARGV.size != 3
8
+ puts "Usage: #{$0} <jid> <password> <room@conference/nick>"
9
+ exit
10
+ end
11
+
12
+ # Print a line formatted depending on time.nil?
13
+ def print_line(time, line)
14
+ if time.nil?
15
+ puts line
16
+ else
17
+ puts "#{time.strftime('%I:%M')} #{line}"
18
+ end
19
+ end
20
+
21
+
22
+ #Jabber::debug = true
23
+ cl = Jabber::Client.new(Jabber::JID.new(ARGV[0]))
24
+ cl.connect
25
+ cl.auth(ARGV[1])
26
+
27
+ # For waking up...
28
+ mainthread = Thread.current
29
+
30
+ # This is the SimpleMUCClient helper!
31
+ m = Jabber::MUC::SimpleMUCClient.new(cl)
32
+
33
+ # SimpleMUCClient callback-blocks
34
+
35
+ m.on_join { |time,nick|
36
+ print_line time, "#{nick} has joined!"
37
+ puts "Users: " + m.roster.keys.join(', ')
38
+ }
39
+ m.on_leave { |time,nick|
40
+ print_line time, "#{nick} has left!"
41
+ }
42
+
43
+ m.on_message { |time,nick,text|
44
+ print_line time, "<#{nick}> #{text}"
45
+
46
+ # Avoid reacting on messaged delivered as room history
47
+ unless time
48
+ # Bot: invite astro@spaceboyz.net
49
+ if text.strip =~ /^(.+?): invite (.+)$/
50
+ jid = $2
51
+ if $1.downcase == m.jid.resource.downcase
52
+ m.invite(jid => "Inviting you on behalf of #{nick}")
53
+ m.say("Inviting #{jid}...")
54
+ end
55
+ # Bot: subject This is room is powered by XMPP4R
56
+ elsif text.strip =~ /^(.+?): subject (.+)$/
57
+ if $1.downcase == m.jid.resource.downcase
58
+ m.subject = $2
59
+ end
60
+ # Bot: exit please
61
+ elsif text.strip =~ /^(.+?): exit please$/
62
+ if $1.downcase == m.jid.resource.downcase
63
+ puts "exiting"
64
+ m.exit "Exiting on behalf of #{nick}"
65
+ mainthread.wakeup
66
+ end
67
+ end
68
+ end
69
+ }
70
+ m.on_room_message { |time,text|
71
+ print_line time, "- #{text}"
72
+ }
73
+ m.on_subject { |time,nick,subject|
74
+ print_line time, "*** (#{nick}) #{subject}"
75
+ }
76
+
77
+ m.join(ARGV[2])
78
+
79
+ # Wait for being waken up by m.on_message
80
+ Thread.stop
81
+
82
+ cl.close
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../../../../../lib'
4
+ require 'xmpp4r'
5
+
6
+
7
+ # Argument checking
8
+ if ARGV.size < 2
9
+ puts("Usage: #{$0} <desired jid> <password> [field1=value1] [fieldN=valueN]")
10
+ exit
11
+ end
12
+
13
+
14
+ # The usual procedure
15
+ cl = Jabber::Client.new(Jabber::JID.new(ARGV[0]))
16
+ puts "Connecting"
17
+ cl.connect
18
+
19
+ # Registration of the new user account
20
+ puts "Registering..."
21
+ begin
22
+ fields = {}
23
+ ARGV[2..-1].each { |a|
24
+ k, v = a.split('=', 2)
25
+ fields[k] = v
26
+ }
27
+ cl.register(ARGV[1], fields)
28
+ puts "Successful"
29
+ rescue Jabber::ServerError => e
30
+ puts "Error: #{e.error.text}"
31
+ if e.error.type == :modify
32
+ puts "Accepted registration information:"
33
+ instructions, fields = cl.register_info
34
+ fields.each { |info|
35
+ puts "* #{info}"
36
+ }
37
+ puts "(#{instructions})"
38
+ end
39
+ end
40
+
41
+ # Shutdown
42
+ cl.close
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift '../../../../../lib'
4
+ require 'xmpp4r'
5
+ include Jabber
6
+
7
+ if ARGV.size != 2
8
+ puts "Warning! This example UNREGISTERS user accounts!"
9
+ puts "Usage: #{$0} <jid> <password>"
10
+ exit
11
+ end
12
+
13
+ cl = Client.new(JID.new(ARGV[0]))
14
+ cl.connect
15
+ cl.auth(ARGV[1])
16
+ cl.remove_registration
17
+
18
+ cl.close
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This script can get all roster entries
4
+
5
+ #$:.unshift '../../../../../lib'
6
+
7
+ require 'optparse'
8
+ require 'xmpp4r'
9
+ require 'xmpp4r/roster/iq/roster'
10
+ include Jabber
11
+
12
+ jid = JID.new('lucastest@linux.ensimag.fr/rosterget')
13
+ password = 'lucastest'
14
+
15
+ OptionParser.new do |opts|
16
+ opts.banner = 'Usage: roster.rb -t get -j jid -p password'
17
+ opts.separator ''
18
+ opts.on('-j', '--jid JID', 'sets the jid') { |j| jid = JID.new(j) }
19
+ opts.on('-p', '--password PASSWORD', 'sets the password') { |p| password = p }
20
+ opts.on_tail('-h', '--help', 'Show this message') {
21
+ puts opts
22
+ exit
23
+ }
24
+ opts.parse!(ARGV)
25
+ end
26
+
27
+ cl = Client.new(jid)
28
+ cl.connect
29
+ cl.auth(password)
30
+ cl.send(Iq.new_rosterget)
31
+ exit = false
32
+ cl.add_iq_callback { |i|
33
+ if i.type == :result and i.query.kind_of?(Roster::IqQueryRoster)
34
+ i.query.each_element { |e|
35
+ e.text = ''
36
+ puts e.to_s
37
+ }
38
+ exit = true
39
+ end
40
+ }
41
+ while not exit
42
+ cl.process
43
+ end
44
+ cl.close
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../../../../../lib/'
4
+
5
+ require 'xmpp4r'
6
+ require 'xmpp4r/roster/helper/roster'
7
+
8
+ # Command line argument checking
9
+
10
+ if ARGV.size != 2
11
+ puts("Usage: ./rosterprint.rb <jid> <password>")
12
+ exit
13
+ end
14
+
15
+ # Building up the connection
16
+
17
+ #Jabber::debug = true
18
+
19
+ jid = Jabber::JID.new(ARGV[0])
20
+
21
+ cl = Jabber::Client.new(jid)
22
+ cl.connect
23
+ cl.auth(ARGV[1])
24
+
25
+ # The roster instance
26
+ roster = Jabber::Roster::Helper.new(cl)
27
+
28
+ mainthread = Thread.current
29
+
30
+ roster.add_query_callback { |iq|
31
+ mainthread.wakeup
32
+ }
33
+
34
+ Thread.stop
35
+
36
+ roster.groups.each { |group|
37
+ if group.nil?
38
+ puts "*** Ungrouped ***"
39
+ else
40
+ puts "*** #{group} ***"
41
+ end
42
+
43
+ roster.find_by_group(group).each { |item|
44
+ puts "- #{item.iname} (#{item.jid})"
45
+ }
46
+
47
+ print "\n"
48
+ }
49
+
50
+ cl.close
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../../../../../lib'
4
+
5
+ require 'xmpp4r'
6
+ require 'xmpp4r/roster/iq/roster'
7
+
8
+ # Command line argument checking
9
+
10
+ if ARGV.size < 4
11
+ puts("Usage: ./rosterrename.rb <your jid> <password> <jid to rename> <new name> [<group1> ... <groupn>]")
12
+ exit
13
+ end
14
+
15
+ # Building up the connection
16
+
17
+ #Jabber::debug = true
18
+
19
+ jid = Jabber::JID.new(ARGV[0])
20
+
21
+ cl = Jabber::Client.new(jid)
22
+ cl.connect
23
+ cl.auth(ARGV[1])
24
+
25
+ # The iq stanza
26
+ iq = Jabber::Iq.new(:set)
27
+ # The new roster instance and item element
28
+ iq.add(Jabber::Roster::IqQueryRoster.new).add(Jabber::Roster::RosterItem.new(ARGV[2], ARGV[3])).groups = ARGV[4..ARGV.size]
29
+
30
+ # Sending the stanza
31
+ cl.send(iq)
32
+
33
+ # Don't look at the results:
34
+ cl.close
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # XMPP4R - XMPP Library for Ruby
4
+ # Copyright (C) 2005 Stephan Maka <stephan@spaceboyz.net>
5
+ # Released under Ruby's license (see the LICENSE file) or GPL, at your option
6
+ #
7
+ #
8
+ # Roster-Watch example
9
+ #
10
+ #
11
+ # Learn how a roster looks like
12
+ # how presences are received
13
+ # about subscription requests and answers
14
+ # what vCards contain
15
+ #
16
+ # It's recommended to insert 'p' commands in this script. :-)
17
+ #
18
+ # This script does:
19
+ #
20
+ # * Listing roster changes
21
+ #
22
+ # * Subscribe to roster items which have a subscription of "none" or "from"
23
+ # WARNING: Chances are that you don't want that :-)
24
+ #
25
+ # * Requesting vCards for unnamed items in your roster and renaming them
26
+ # to the <NICKNAME/> or <FN/> field in the vCard
27
+ #
28
+ # * Listing presence changes
29
+ #
30
+ # * Listing subscription and unsubscription requests and answers
31
+
32
+ $:.unshift '../../../../../lib/'
33
+
34
+ require 'xmpp4r'
35
+ require 'xmpp4r/roster/helper/roster'
36
+ require 'xmpp4r/vcard/helper/vcard'
37
+
38
+ # Command line argument checking
39
+
40
+ if ARGV.size != 2
41
+ puts("Usage: ./rosterwatch.rb <jid> <password>")
42
+ exit
43
+ end
44
+
45
+ # Building up the connection
46
+
47
+ #Jabber::debug = true
48
+
49
+ jid = Jabber::JID.new(ARGV[0])
50
+
51
+ cl = Jabber::Client.new(jid)
52
+ cl.connect
53
+ cl.auth(ARGV[1])
54
+
55
+ # The roster instance
56
+ roster = Jabber::Roster::Helper.new(cl)
57
+
58
+ # Callback to handle updated roster items
59
+ roster.add_update_callback { |olditem,item|
60
+ if [:from, :none].include?(item.subscription) && item.ask != :subscribe
61
+ puts("Subscribing to #{item.jid}")
62
+ item.subscribe
63
+ end
64
+
65
+ # Print the item
66
+ if olditem.nil?
67
+ # We didn't knew before:
68
+ puts("#{item.iname} (#{item.jid}, #{item.subscription}) #{item.groups.join(', ')}")
69
+ else
70
+ # Showing whats different:
71
+ puts("#{olditem.iname} (#{olditem.jid}, #{olditem.subscription}) #{olditem.groups.join(', ')} -> #{item.iname} (#{item.jid}, #{item.subscription}) #{item.groups.join(', ')}")
72
+ end
73
+
74
+ # If the item has no name associated...
75
+ unless item.iname
76
+ Thread.new do
77
+ puts("#{item.jid} has no nickname... getting vCard")
78
+ begin
79
+ # ...get a vCard
80
+ vcard = Jabber::Vcard::Helper.new(cl).get(item.jid.strip)
81
+
82
+ unless vcard.nil?
83
+ # Rename him to vCard's <NICKNAME/> field
84
+ if vcard['NICKNAME']
85
+ item.iname = vcard['NICKNAME']
86
+ puts("Renaming #{item.jid} to #{vcard['NICKNAME']}")
87
+ item.send
88
+ # Rename him to vCard's <FN/> field
89
+ elsif vcard['FN']
90
+ item.iname = vcard['FN']
91
+ puts("Renaming #{item.jid} to #{vcard['FN']}")
92
+ item.send
93
+ # We've got a lazy one
94
+ else
95
+ puts("#{item.jid} provided no details in vCard")
96
+ end
97
+ end
98
+
99
+ rescue Exception => e
100
+ # This will be (mostly) thrown by Jabber::Vcard::Helper#get
101
+ puts("Error getting vCard for #{item.jid}: #{e.to_s}")
102
+ end
103
+ end
104
+ end
105
+ }
106
+
107
+ # Presence updates:
108
+ roster.add_presence_callback { |item,oldpres,pres|
109
+ # Can't look for something that just does not exist...
110
+ if pres.nil?
111
+ # ...so create it:
112
+ pres = Jabber::Presence.new
113
+ end
114
+ if oldpres.nil?
115
+ # ...so create it:
116
+ oldpres = Jabber::Presence.new
117
+ end
118
+
119
+ # Print name and jid:
120
+ name = "#{pres.from}"
121
+ if item.iname
122
+ name = "#{item.iname} (#{pres.from})"
123
+ end
124
+ puts(name)
125
+
126
+ # Print type changes:
127
+ unless oldpres.type.nil? && pres.type.nil?
128
+ puts(" Type: #{oldpres.type.inspect} -> #{pres.type.inspect}")
129
+ end
130
+ # Print show changes:
131
+ unless oldpres.show.nil? && pres.show.nil?
132
+ puts(" Show: #{oldpres.show.to_s.inspect} -> #{pres.show.to_s.inspect}")
133
+ end
134
+ # Print status changes:
135
+ unless oldpres.status.nil? && pres.status.nil?
136
+ puts(" Status: #{oldpres.status.to_s.inspect} -> #{pres.status.to_s.inspect}")
137
+ end
138
+ # Print priority changes:
139
+ unless oldpres.priority.nil? && pres.priority.nil?
140
+ puts(" Priority: #{oldpres.priority.inspect} -> #{pres.priority.inspect}")
141
+ end
142
+
143
+ # Note: presences with type='error' will reflect our own show/status/priority
144
+ # as it is mostly just a reply from a server. This is *not* a bug.
145
+ }
146
+
147
+ # Subscription requests and responses:
148
+ subscription_callback = lambda { |item,pres|
149
+ name = pres.from
150
+ if item != nil && item.iname != nil
151
+ name = "#{item.iname} (#{pres.from})"
152
+ end
153
+ case pres.type
154
+ when :subscribe then puts("Subscription request from #{name}")
155
+ when :subscribed then puts("Subscribed to #{name}")
156
+ when :unsubscribe then puts("Unsubscription request from #{name}")
157
+ when :unsubscribed then puts("Unsubscribed from #{name}")
158
+ else raise "The Roster Helper is buggy!!! subscription callback with type=#{pres.type}"
159
+ end
160
+ }
161
+ roster.add_subscription_callback(0, nil, &subscription_callback)
162
+ roster.add_subscription_request_callback(0, nil, &subscription_callback)
163
+
164
+ # Send initial presence
165
+ # this is important for receiving presence of subscribed users
166
+ cl.send(Jabber::Presence.new.set_show(:dnd).set_status('Watching my roster change...'))
167
+
168
+ # Main loop:
169
+ Thread.stop
170
+
171
+ cl.close