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.
- data/Authors.txt +4 -0
- data/Changelog.txt +11 -0
- data/Copyright.txt +16 -0
- data/Rakefile +16 -25
- data/Readme.markdown +1 -3
- data/bin/cerberus +5 -0
- data/lib/cerberus/builder/bjam.rb +1 -3
- data/lib/cerberus/builder/maven2.rb +0 -1
- data/lib/cerberus/builder/rake.rb +1 -1
- data/lib/cerberus/builder/rspec.rb +0 -1
- data/lib/cerberus/builder/ruby_base.rb +0 -1
- data/lib/cerberus/component_lazy_loader.rb +6 -2
- data/lib/cerberus/config.example.yml +1 -0
- data/lib/cerberus/constants.rb +2 -2
- data/lib/cerberus/manager.rb +7 -1
- data/lib/cerberus/publisher/mail.rb +4 -4
- data/lib/cerberus/publisher/twitter.rb +0 -1
- data/lib/cerberus/scm/base.rb +19 -0
- data/lib/cerberus/scm/bzr.rb +62 -0
- data/lib/cerberus/scm/cvs.rb +2 -7
- data/lib/cerberus/scm/darcs.rb +2 -11
- data/lib/cerberus/scm/git.rb +6 -14
- data/lib/cerberus/scm/perforce.rb +4 -4
- data/lib/cerberus/scm/svn.rb +2 -7
- data/lib/cerberus/utils.rb +5 -0
- data/lib/vendor/irc/README +23 -0
- data/lib/vendor/irc/lib/IRC.rb +164 -0
- data/lib/vendor/irc/lib/IRCChannel.rb +33 -0
- data/lib/vendor/irc/lib/IRCConnection.rb +134 -0
- data/lib/vendor/irc/lib/IRCEvent.rb +91 -0
- data/lib/vendor/irc/lib/IRCUser.rb +23 -0
- data/lib/vendor/irc/lib/IRCUtil.rb +49 -0
- data/lib/vendor/irc/lib/eventmap.yml +247 -0
- data/lib/vendor/twitter/CHANGES +129 -0
- data/lib/vendor/twitter/MIT-LICENSE +20 -0
- data/lib/vendor/twitter/README +37 -0
- data/lib/vendor/twitter/TODO +7 -0
- data/lib/vendor/twitter/lib/twitter.rb +34 -0
- data/lib/vendor/twitter/lib/twitter/client.rb +24 -0
- data/lib/vendor/twitter/lib/twitter/client/account.rb +24 -0
- data/lib/vendor/twitter/lib/twitter/client/auth.rb +27 -0
- data/lib/vendor/twitter/lib/twitter/client/base.rb +93 -0
- data/lib/vendor/twitter/lib/twitter/client/blocks.rb +35 -0
- data/lib/vendor/twitter/lib/twitter/client/favorites.rb +53 -0
- data/lib/vendor/twitter/lib/twitter/client/friendship.rb +35 -0
- data/lib/vendor/twitter/lib/twitter/client/graph.rb +37 -0
- data/lib/vendor/twitter/lib/twitter/client/messaging.rb +79 -0
- data/lib/vendor/twitter/lib/twitter/client/profile.rb +29 -0
- data/lib/vendor/twitter/lib/twitter/client/search.rb +27 -0
- data/lib/vendor/twitter/lib/twitter/client/status.rb +51 -0
- data/lib/vendor/twitter/lib/twitter/client/timeline.rb +72 -0
- data/lib/vendor/twitter/lib/twitter/client/user.rb +65 -0
- data/lib/vendor/twitter/lib/twitter/config.rb +77 -0
- data/lib/vendor/twitter/lib/twitter/console.rb +31 -0
- data/lib/vendor/twitter/lib/twitter/core.rb +137 -0
- data/lib/vendor/twitter/lib/twitter/ext.rb +2 -0
- data/lib/vendor/twitter/lib/twitter/ext/stdlib.rb +52 -0
- data/lib/vendor/twitter/lib/twitter/extras.rb +39 -0
- data/lib/vendor/twitter/lib/twitter/meta.rb +56 -0
- data/lib/vendor/twitter/lib/twitter/model.rb +360 -0
- data/lib/vendor/twitter/lib/twitter/version.rb +19 -0
- data/lib/vendor/twitter/spec/twitter/client/account_spec.rb +28 -0
- data/lib/vendor/twitter/spec/twitter/client/auth_spec.rb +34 -0
- data/lib/vendor/twitter/spec/twitter/client/base_spec.rb +242 -0
- data/lib/vendor/twitter/spec/twitter/client/blocks_spec.rb +76 -0
- data/lib/vendor/twitter/spec/twitter/client/favorites_spec.rb +183 -0
- data/lib/vendor/twitter/spec/twitter/client/friendship_spec.rb +76 -0
- data/lib/vendor/twitter/spec/twitter/client/graph_spec.rb +67 -0
- data/lib/vendor/twitter/spec/twitter/client/messaging_spec.rb +135 -0
- data/lib/vendor/twitter/spec/twitter/client/profile_spec.rb +91 -0
- data/lib/vendor/twitter/spec/twitter/client/search_spec.rb +68 -0
- data/lib/vendor/twitter/spec/twitter/client/status_spec.rb +119 -0
- data/lib/vendor/twitter/spec/twitter/client/timeline_spec.rb +79 -0
- data/lib/vendor/twitter/spec/twitter/client/user_spec.rb +203 -0
- data/lib/vendor/twitter/spec/twitter/client_spec.rb +2 -0
- data/lib/vendor/twitter/spec/twitter/config_spec.rb +86 -0
- data/lib/vendor/twitter/spec/twitter/console_spec.rb +15 -0
- data/lib/vendor/twitter/spec/twitter/core_spec.rb +127 -0
- data/lib/vendor/twitter/spec/twitter/ext/stdlib_spec.rb +59 -0
- data/lib/vendor/twitter/spec/twitter/extras_spec.rb +46 -0
- data/lib/vendor/twitter/spec/twitter/meta_spec.rb +90 -0
- data/lib/vendor/twitter/spec/twitter/model_spec.rb +508 -0
- data/lib/vendor/twitter/spec/twitter/version_spec.rb +19 -0
- data/lib/vendor/xmpp4r/CHANGELOG +83 -0
- data/lib/vendor/xmpp4r/COPYING +340 -0
- data/lib/vendor/xmpp4r/LICENSE +59 -0
- data/lib/vendor/xmpp4r/README.rdoc +110 -0
- data/lib/vendor/xmpp4r/README_ruby19.txt +43 -0
- data/lib/vendor/xmpp4r/Rakefile +262 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/versionpoll.rb +90 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/client.rb +70 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/component.rb +11 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/register.rb +42 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r.rb +116 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/base64.rb +32 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/target.rb +47 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +73 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +62 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/callbacks.rb +124 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps.rb +1 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/c.rb +53 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/generator.rb +160 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/helper.rb +87 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/client.rb +317 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/command/helper/responder.rb +53 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/command/iq/command.rb +154 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/component.rb +103 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/connection.rb +219 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms/x/data.rb +297 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/debuglog.rb +42 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/delay.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/delay/x/delay.rb +99 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/helper/responder.rb +165 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/errors.rb +281 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/framework/base.rb +55 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/framework/bot.rb +148 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding/client.rb +285 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/idgenerator.rb +37 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/iq.rb +221 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/jid.rb +167 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/message.rb +148 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc.rb +14 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/item.rb +143 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/muc.rb +70 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/presence.rb +232 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub.rb +8 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/event.rb +49 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/item.rb +35 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/items.rb +44 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/publish.rb +24 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodebrowser.rb +130 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/servicehelper.rb +417 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/query.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rexmladdons.rb +151 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/helper/roster.rb +519 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/iq/roster.rb +215 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/x/roster.rb +138 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc.rb +2 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/client.rb +123 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/server.rb +74 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/sasl.rb +237 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/semaphore.rb +38 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/stream.rb +497 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/streamparser.rb +77 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune.rb +2 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune/helper/helper.rb +58 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune/tune.rb +113 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard.rb +6 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/responder.rb +72 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/iq/version.rb +105 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/x.rb +37 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml.rb +1 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml/html.rb +115 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmpp4r.rb +18 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmppelement.rb +168 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmppstanza.rb +162 -0
- data/lib/vendor/xmpp4r/setup.rb +1586 -0
- data/lib/vendor/xmpp4r/test/bytestreams/tc_ibb.rb +186 -0
- data/lib/vendor/xmpp4r/test/bytestreams/tc_socks5bytestreams.rb +113 -0
- data/lib/vendor/xmpp4r/test/caps/tc_helper.rb +156 -0
- data/lib/vendor/xmpp4r/test/dataforms/tc_data.rb +81 -0
- data/lib/vendor/xmpp4r/test/delay/tc_xdelay.rb +51 -0
- data/lib/vendor/xmpp4r/test/discovery/tc_responder.rb +91 -0
- data/lib/vendor/xmpp4r/test/lib/assert_equal_xml.rb +14 -0
- data/lib/vendor/xmpp4r/test/lib/clienttester.rb +120 -0
- data/lib/vendor/xmpp4r/test/muc/tc_muc_mucclient.rb +830 -0
- data/lib/vendor/xmpp4r/test/muc/tc_muc_simplemucclient.rb +114 -0
- data/lib/vendor/xmpp4r/test/muc/tc_mucowner.rb +50 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_helper.rb +662 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_nodeconfig.rb +54 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_subscriptionconfig.rb +41 -0
- data/lib/vendor/xmpp4r/test/roster/tc_helper.rb +514 -0
- data/lib/vendor/xmpp4r/test/roster/tc_iqqueryroster.rb +173 -0
- data/lib/vendor/xmpp4r/test/roster/tc_xroster.rb +73 -0
- data/lib/vendor/xmpp4r/test/rpc/tc_helper.rb +96 -0
- data/lib/vendor/xmpp4r/test/tc_callbacks.rb +129 -0
- data/lib/vendor/xmpp4r/test/tc_class_names.rb +146 -0
- data/lib/vendor/xmpp4r/test/tc_client.rb +30 -0
- data/lib/vendor/xmpp4r/test/tc_errors.rb +146 -0
- data/lib/vendor/xmpp4r/test/tc_idgenerator.rb +30 -0
- data/lib/vendor/xmpp4r/test/tc_iq.rb +113 -0
- data/lib/vendor/xmpp4r/test/tc_iqquery.rb +31 -0
- data/lib/vendor/xmpp4r/test/tc_jid.rb +204 -0
- data/lib/vendor/xmpp4r/test/tc_message.rb +116 -0
- data/lib/vendor/xmpp4r/test/tc_presence.rb +150 -0
- data/lib/vendor/xmpp4r/test/tc_rexml.rb +139 -0
- data/lib/vendor/xmpp4r/test/tc_stream.rb +229 -0
- data/lib/vendor/xmpp4r/test/tc_streamComponent.rb +95 -0
- data/lib/vendor/xmpp4r/test/tc_streamError.rb +131 -0
- data/lib/vendor/xmpp4r/test/tc_streamSend.rb +59 -0
- data/lib/vendor/xmpp4r/test/tc_streamparser.rb +112 -0
- data/lib/vendor/xmpp4r/test/tc_xmppstanza.rb +135 -0
- data/lib/vendor/xmpp4r/test/ts_xmpp4r.rb +53 -0
- data/lib/vendor/xmpp4r/test/tune/tc_helper_recv.rb +84 -0
- data/lib/vendor/xmpp4r/test/tune/tc_helper_send.rb +74 -0
- data/lib/vendor/xmpp4r/test/tune/tc_tune.rb +79 -0
- data/lib/vendor/xmpp4r/test/vcard/tc_helper.rb +49 -0
- data/lib/vendor/xmpp4r/test/vcard/tc_iqvcard.rb +62 -0
- data/lib/vendor/xmpp4r/test/version/tc_helper.rb +60 -0
- data/lib/vendor/xmpp4r/test/version/tc_iqqueryversion.rb +97 -0
- data/lib/vendor/xmpp4r/test/xhtml/tc_html.rb +41 -0
- data/lib/vendor/xmpp4r/tools/gen_requires.bash +31 -0
- data/lib/vendor/xmpp4r/tools/xmpp4r-gemspec-test.rb +11 -0
- data/lib/vendor/xmpp4r/xmpp4r.gemspec +291 -0
- data/test/jabber_publisher_test.rb +1 -1
- data/test/mail_publisher_test.rb +2 -2
- data/test/mock/twitter.rb +0 -1
- data/test/rspec_builder_test.rb +39 -2
- data/test/rss_publisher_test.rb +1 -1
- data/test/twitter_publisher_test.rb +1 -1
- metadata +268 -53
- 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,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
|