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,29 @@
|
|
|
1
|
+
class Twitter::Client
|
|
2
|
+
@@PROFILE_URIS = {
|
|
3
|
+
:info => '/account/update_profile',
|
|
4
|
+
:colors => '/account/update_profile_colors',
|
|
5
|
+
:device => '/account/update_delivery_device',
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
# Provides access to the Twitter Profile API.
|
|
9
|
+
#
|
|
10
|
+
# You can update profile information. You can update the types of profile
|
|
11
|
+
# information:
|
|
12
|
+
# * :info (name, email, url, location, description)
|
|
13
|
+
# * :colors (background_color, text_color, link_color, sidebar_fill_color,
|
|
14
|
+
# sidebar_border_color)
|
|
15
|
+
# * :device (set device to either "sms", "im" or "none")
|
|
16
|
+
#
|
|
17
|
+
# Example:
|
|
18
|
+
# user = client.profile(:info, :location => "University Library")
|
|
19
|
+
# puts user.inspect
|
|
20
|
+
def profile(action, attributes)
|
|
21
|
+
connection = create_http_connection
|
|
22
|
+
connection.start do |connection|
|
|
23
|
+
response = http_connect(attributes.to_http_str) do |conn|
|
|
24
|
+
create_http_post_request(@@PROFILE_URIS[action])
|
|
25
|
+
end
|
|
26
|
+
bless_models(Twitter::User.unmarshal(response.body))
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class Twitter::Client
|
|
2
|
+
|
|
3
|
+
@@SEARCH_URIS = {
|
|
4
|
+
:basic => "/search.json",
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
# Provides access to Twitter's Search API.
|
|
8
|
+
#
|
|
9
|
+
# Example:
|
|
10
|
+
# # For keyword search
|
|
11
|
+
# iterator = @twitter.search(:q => "coworking")
|
|
12
|
+
# while (tweet = iterator.next)
|
|
13
|
+
# puts tweet.text
|
|
14
|
+
# end
|
|
15
|
+
#
|
|
16
|
+
# An <tt>ArgumentError</tt> will be raised if an invalid <tt>action</tt>
|
|
17
|
+
# is given. Valid actions are:
|
|
18
|
+
# * +:received+
|
|
19
|
+
# * +:sent+
|
|
20
|
+
def search(options = {})
|
|
21
|
+
# raise ArgumentError, "Invalid messaging action: #{action}"
|
|
22
|
+
uri = @@SEARCH_URIS[:basic]
|
|
23
|
+
response = http_connect(nil, false, :search) {|conn| create_http_get_request(uri, options) }
|
|
24
|
+
json = JSON.parse(response.body)
|
|
25
|
+
bless_models(Twitter::Status.unmarshal(JSON.dump(json["results"])))
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
class Twitter::Client
|
|
2
|
+
@@STATUS_URIS = {
|
|
3
|
+
:get => '/statuses/show.json',
|
|
4
|
+
:post => '/statuses/update.json',
|
|
5
|
+
:delete => '/statuses/destroy.json',
|
|
6
|
+
:reply => '/statuses/update.json',
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
# Provides access to individual statuses via Twitter's Status APIs
|
|
10
|
+
#
|
|
11
|
+
# <tt>action</tt> can be of the following values:
|
|
12
|
+
# * <tt>:get</tt> to retrieve status content. Assumes <tt>value</tt> given responds to :to_i message in meaningful way to yield intended status id.
|
|
13
|
+
# * <tt>:post</tt> to publish a new status
|
|
14
|
+
# * <tt>:delete</tt> to remove an existing status. Assumes <tt>value</tt> given responds to :to_i message in meaningful way to yield intended status id.
|
|
15
|
+
# * <tt>:reply</tt> to reply to an existing status. Assumes <tt>value</tt> given is <tt>Hash</tt> which contains <tt>:in_reply_to_status_id</tt> and <tt>:status</tt>
|
|
16
|
+
#
|
|
17
|
+
# <tt>value</tt> should be set to:
|
|
18
|
+
# * the status identifier for <tt>:get</tt> case
|
|
19
|
+
# * the status text message for <tt>:post</tt> case
|
|
20
|
+
# * none necessary for <tt>:delete</tt> case
|
|
21
|
+
#
|
|
22
|
+
# Examples:
|
|
23
|
+
# twitter.status(:get, 107786772)
|
|
24
|
+
# twitter.status(:post, "New Ruby open source project Twitter4R version 0.2.0 released.")
|
|
25
|
+
# twitter.status(:delete, 107790712)
|
|
26
|
+
#
|
|
27
|
+
# An <tt>ArgumentError</tt> will be raised if an invalid <tt>action</tt>
|
|
28
|
+
# is given. Valid actions are:
|
|
29
|
+
# * +:get+
|
|
30
|
+
# * +:post+
|
|
31
|
+
# * +:delete+
|
|
32
|
+
def status(action, value = nil)
|
|
33
|
+
return self.timeline_for(action, value || {}) if :replies == action
|
|
34
|
+
raise ArgumentError, "Invalid status action: #{action}" unless @@STATUS_URIS.keys.member?(action)
|
|
35
|
+
return nil unless value
|
|
36
|
+
uri = @@STATUS_URIS[action]
|
|
37
|
+
response = nil
|
|
38
|
+
case action
|
|
39
|
+
when :get
|
|
40
|
+
response = http_connect {|conn| create_http_get_request(uri, :id => value.to_i) }
|
|
41
|
+
when :post
|
|
42
|
+
response = http_connect({:status => value, :source => @@config.source}.to_http_str) {|conn| create_http_post_request(uri) }
|
|
43
|
+
when :delete
|
|
44
|
+
response = http_connect {|conn| create_http_delete_request(uri, :id => value.to_i) }
|
|
45
|
+
when :reply
|
|
46
|
+
return nil if (!value.is_a?(Hash) || !value[:status] || !value[:in_reply_to_status_id])
|
|
47
|
+
response = http_connect(value.merge(:source => @@config.source).to_http_str) {|conn| create_http_post_request(uri) }
|
|
48
|
+
end
|
|
49
|
+
bless_model(Twitter::Status.unmarshal(response.body))
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
class Twitter::Client
|
|
2
|
+
@@TIMELINE_URIS = {
|
|
3
|
+
:public => '/statuses/public_timeline.json',
|
|
4
|
+
:friends => '/statuses/friends_timeline.json',
|
|
5
|
+
:friend => '/statuses/friends_timeline.json',
|
|
6
|
+
:user => '/statuses/user_timeline.json',
|
|
7
|
+
:me => '/statuses/user_timeline.json',
|
|
8
|
+
:replies => '/statuses/replies.json',
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
# Provides access to Twitter's Timeline APIs
|
|
12
|
+
#
|
|
13
|
+
# Returns timeline for given <tt>type</tt>.
|
|
14
|
+
#
|
|
15
|
+
# <tt>type</tt> can take the following values:
|
|
16
|
+
# * <tt>public</tt>
|
|
17
|
+
# * <tt>friends</tt> or <tt>friend</tt>
|
|
18
|
+
# * <tt>user</tt> or <tt>me</tt>
|
|
19
|
+
#
|
|
20
|
+
# <tt>:id</tt> is on key applicable to be defined in </tt>options</tt>:
|
|
21
|
+
# * the id or screen name (aka login) for :friends
|
|
22
|
+
# * the id or screen name (aka login) for :user
|
|
23
|
+
# * meaningless for the :me case, since <tt>twitter.timeline_for(:user, 'mylogin')</tt> and <tt>twitter.timeline_for(:me)</tt> are the same assuming 'mylogin' is the authenticated user's screen name (aka login).
|
|
24
|
+
#
|
|
25
|
+
# Examples:
|
|
26
|
+
# # returns the public statuses since status with id of 6543210
|
|
27
|
+
# twitter.timeline_for(:public, id => 6543210)
|
|
28
|
+
# # returns the statuses for friend with user id 43210
|
|
29
|
+
# twitter.timeline_for(:friend, :id => 43210)
|
|
30
|
+
# # returns the statuses for friend with screen name (aka login) of 'otherlogin'
|
|
31
|
+
# twitter.timeline_for(:friend, :id => 'otherlogin')
|
|
32
|
+
# # returns the statuses for user with screen name (aka login) of 'otherlogin'
|
|
33
|
+
# twitter.timeline_for(:user, :id => 'otherlogin')
|
|
34
|
+
#
|
|
35
|
+
# <tt>options</tt> can also include the following keys:
|
|
36
|
+
# * <tt>:id</tt> is the user ID, screen name of Twitter::User representation of a <tt>Twitter</tt> user.
|
|
37
|
+
# * <tt>:since</tt> is a Time object specifying the date-time from which to return results for. Applicable for the :friend, :friends, :user and :me cases.
|
|
38
|
+
# * <tt>:count</tt> specifies the number of statuses to retrieve. Only applicable for the :user case.
|
|
39
|
+
# * <tt>since_id</tt> is the status id of the public timeline from which to retrieve statuses for <tt>:public</tt>. Only applicable for the :public case.
|
|
40
|
+
#
|
|
41
|
+
# You can also pass this method a block, which will iterate through the results
|
|
42
|
+
# of the requested timeline and apply the block logic for each status returned.
|
|
43
|
+
#
|
|
44
|
+
# Example:
|
|
45
|
+
# twitter.timeline_for(:public) do |status|
|
|
46
|
+
# puts status.user.screen_name, status.text
|
|
47
|
+
# end
|
|
48
|
+
#
|
|
49
|
+
# twitter.timeline_for(:friend, :id => 'myfriend', :since => 30.minutes.ago) do |status|
|
|
50
|
+
# puts status.user.screen_name, status.text
|
|
51
|
+
# end
|
|
52
|
+
#
|
|
53
|
+
# timeline = twitter.timeline_for(:me) do |status|
|
|
54
|
+
# puts status.text
|
|
55
|
+
# end
|
|
56
|
+
#
|
|
57
|
+
# An <tt>ArgumentError</tt> will be raised if an invalid <tt>type</tt>
|
|
58
|
+
# is given. Valid types are:
|
|
59
|
+
# * +:public+
|
|
60
|
+
# * +:friends+
|
|
61
|
+
# * +:friend+
|
|
62
|
+
# * +:user+
|
|
63
|
+
# * +:me+
|
|
64
|
+
def timeline_for(type, options = {}, &block)
|
|
65
|
+
raise ArgumentError, "Invalid timeline type: #{type}" unless @@TIMELINE_URIS.keys.member?(type)
|
|
66
|
+
uri = @@TIMELINE_URIS[type]
|
|
67
|
+
response = http_connect {|conn| create_http_get_request(uri, options) }
|
|
68
|
+
timeline = Twitter::Status.unmarshal(response.body)
|
|
69
|
+
timeline.each {|status| bless_model(status); yield status if block_given? }
|
|
70
|
+
timeline
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
class Twitter::Client
|
|
2
|
+
@@USER_URIS = {
|
|
3
|
+
:info => '/users/show',
|
|
4
|
+
:friends => '/statuses/friends.json',
|
|
5
|
+
:followers => '/statuses/followers.json',
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
# Provides access to Twitter's User APIs
|
|
9
|
+
#
|
|
10
|
+
# Returns user instance for the <tt>id</tt> given. The <tt>id</tt>
|
|
11
|
+
# can either refer to the numeric user ID or the user's screen name.
|
|
12
|
+
#
|
|
13
|
+
# For example,
|
|
14
|
+
# @twitter.user(234943) #=> Twitter::User object instance for user with numeric id of 234943
|
|
15
|
+
# @twitter.user('mylogin') #=> Twitter::User object instance for user with screen name 'mylogin'
|
|
16
|
+
#
|
|
17
|
+
# Where <tt>options</tt> is a +Hash+ of options that can include:
|
|
18
|
+
# * <tt>:page</tt> - optional. Retrieves the next set of friends. There are 100 friends per page. Default: 1.
|
|
19
|
+
# * <tt>:lite</tt> - optional. Prevents the inline inclusion of current status. Default: false.
|
|
20
|
+
# * <tt>:since</tt> - optional. Only relevant for <tt>:friends</tt> action. Narrows the results to just those friends added after the date given as value of this option. Must be HTTP-formatted date.
|
|
21
|
+
#
|
|
22
|
+
# An <tt>ArgumentError</tt> will be raised if an invalid <tt>action</tt>
|
|
23
|
+
# is given. Valid actions are:
|
|
24
|
+
# * +:info+
|
|
25
|
+
# * +:friends+
|
|
26
|
+
#
|
|
27
|
+
# +Note:+ You should not use this method to attempt to retrieve the
|
|
28
|
+
# authenticated user's followers. Please use any of the following
|
|
29
|
+
# ways of accessing this list:
|
|
30
|
+
# followers = client.my(:followers)
|
|
31
|
+
# OR
|
|
32
|
+
# followers = client.my(:info).followers
|
|
33
|
+
def user(id, action = :info, options = {})
|
|
34
|
+
raise ArgumentError, "Invalid user action: #{action}" unless @@USER_URIS.keys.member?(action)
|
|
35
|
+
id = id.to_i if id.is_a?(Twitter::User)
|
|
36
|
+
params = options.merge(:id => id)
|
|
37
|
+
response = http_connect {|conn| create_http_get_request(@@USER_URIS[action], params) }
|
|
38
|
+
bless_models(Twitter::User.unmarshal(response.body))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Syntactic sugar for queries relating to authenticated user in Twitter's User API
|
|
42
|
+
#
|
|
43
|
+
# Where <tt>action</tt> is one of the following:
|
|
44
|
+
# * <tt>:info</tt> - Returns user instance for the authenticated user.
|
|
45
|
+
# * <tt>:friends</tt> - Returns Array of users that are authenticated user's friends
|
|
46
|
+
# * <tt>:followers</tt> - Returns Array of users that are authenticated user's followers
|
|
47
|
+
#
|
|
48
|
+
# Where <tt>options</tt> is a +Hash+ of options that can include:
|
|
49
|
+
# * <tt>:page</tt> - optional. Retrieves the next set of friends. There are 100 friends per page. Default: 1.
|
|
50
|
+
# * <tt>:lite</tt> - optional. Prevents the inline inclusion of current status. Default: false.
|
|
51
|
+
# * <tt>:since</tt> - optional. Only relevant for <tt>:friends</tt> action. Narrows the results to just those friends added after the date given as value of this option. Must be HTTP-formatted date.
|
|
52
|
+
#
|
|
53
|
+
# An <tt>ArgumentError</tt> will be raised if an invalid <tt>action</tt>
|
|
54
|
+
# is given. Valid actions are:
|
|
55
|
+
# * +:info+
|
|
56
|
+
# * +:friends+
|
|
57
|
+
# * +:followers+
|
|
58
|
+
def my(action, options = {})
|
|
59
|
+
raise ArgumentError, "Invalid user action: #{action}" unless @@USER_URIS.keys.member?(action)
|
|
60
|
+
params = options.merge(:id => @login)
|
|
61
|
+
response = http_connect {|conn| create_http_get_request(@@USER_URIS[action], params) }
|
|
62
|
+
users = Twitter::User.unmarshal(response.body)
|
|
63
|
+
bless_models(users)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# config.rb contains classes, methods and extends existing Twitter4R classes
|
|
2
|
+
# to provide easy configuration facilities.
|
|
3
|
+
|
|
4
|
+
module Twitter
|
|
5
|
+
# Represents global configuration for Twitter::Client.
|
|
6
|
+
# Can override the following configuration options:
|
|
7
|
+
# * <tt>protocol</tt> - <tt>:http</tt>, <tt>:https</tt> or <tt>:ssl</tt> supported. <tt>:ssl</tt> is an alias for <tt>:https</tt>. Defaults to <tt>:ssl</tt>
|
|
8
|
+
# * <tt>host</tt> - hostname to connect to for the Twitter service. Defaults to <tt>'twitter.com'</tt>.
|
|
9
|
+
# * <tt>port</tt> - port to connect to for the Twitter service. Defaults to <tt>443</tt>.
|
|
10
|
+
# * <tt>proxy_host</tt> - proxy host to use. Defaults to nil.
|
|
11
|
+
# * <tt>proxy_port</tt> - proxy host to use. Defaults to nil.
|
|
12
|
+
# * <tt>proxy_user</tt> - proxy username to use. Defaults to nil.
|
|
13
|
+
# * <tt>proxy_pass</tt> - proxy password to use. Defaults to nil.
|
|
14
|
+
# * <tt>user_agent</tt> - user agent string to use for each request of the HTTP header.
|
|
15
|
+
# * <tt>application_name</tt> - name of your client application. Defaults to 'Twitter4R'
|
|
16
|
+
# * <tt>application_version</tt> - version of your client application. Defaults to current <tt>Twitter::Version.to_version</tt>.
|
|
17
|
+
# * <tt>application_url</tt> - URL of your client application. Defaults to http://twitter4r.rubyforge.org.
|
|
18
|
+
# * <tt>source</tt> - the source id given to you by Twitter to identify your application in their web interface. Note: you must contact Twitter.com developer directly so they can configure their servers appropriately.
|
|
19
|
+
class Config
|
|
20
|
+
include ClassUtilMixin
|
|
21
|
+
@@ATTRIBUTES = [
|
|
22
|
+
:protocol,
|
|
23
|
+
:host,
|
|
24
|
+
:port,
|
|
25
|
+
:search_protocol,
|
|
26
|
+
:search_host,
|
|
27
|
+
:search_port,
|
|
28
|
+
:proxy_host,
|
|
29
|
+
:proxy_port,
|
|
30
|
+
:proxy_user,
|
|
31
|
+
:proxy_pass,
|
|
32
|
+
:user_agent,
|
|
33
|
+
:application_name,
|
|
34
|
+
:application_version,
|
|
35
|
+
:application_url,
|
|
36
|
+
:source,
|
|
37
|
+
]
|
|
38
|
+
attr_accessor *@@ATTRIBUTES
|
|
39
|
+
|
|
40
|
+
# Override of Object#eql? to ensure RSpec specifications run
|
|
41
|
+
# correctly. Also done to follow Ruby best practices.
|
|
42
|
+
def eql?(other)
|
|
43
|
+
return true if self == other
|
|
44
|
+
@@ATTRIBUTES.each do |att|
|
|
45
|
+
return false unless self.send(att).eql?(other.send(att))
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class Client
|
|
52
|
+
@@defaults = { :host => 'twitter.com',
|
|
53
|
+
:port => 443,
|
|
54
|
+
:protocol => :ssl,
|
|
55
|
+
:search_host => 'search.twitter.com',
|
|
56
|
+
:search_port => 80,
|
|
57
|
+
:search_protocol => :http,
|
|
58
|
+
:proxy_host => nil,
|
|
59
|
+
:proxy_port => nil,
|
|
60
|
+
:user_agent => "default",
|
|
61
|
+
:application_name => 'Twitter4R',
|
|
62
|
+
:application_version => Twitter::Version.to_version,
|
|
63
|
+
:application_url => 'http://twitter4r.rubyforge.org',
|
|
64
|
+
:source => 'twitter4r',
|
|
65
|
+
}
|
|
66
|
+
@@config = Twitter::Config.new(@@defaults)
|
|
67
|
+
|
|
68
|
+
# Twitter::Client class methods
|
|
69
|
+
class << self
|
|
70
|
+
# Yields to given <tt>block</tt> to configure the Twitter4R API.
|
|
71
|
+
def configure(&block)
|
|
72
|
+
raise ArgumentError, "Block must be provided to configure" unless block_given?
|
|
73
|
+
yield @@config
|
|
74
|
+
end # configure
|
|
75
|
+
end # class << self
|
|
76
|
+
end # Client class
|
|
77
|
+
end # Twitter module
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Contains hooks for the twitter console
|
|
2
|
+
|
|
3
|
+
require('optparse')
|
|
4
|
+
|
|
5
|
+
module Twitter
|
|
6
|
+
class Client
|
|
7
|
+
class << self
|
|
8
|
+
# Helper method mostly for irb shell prototyping.
|
|
9
|
+
#
|
|
10
|
+
# Reads in login/password Twitter credentials from YAML file
|
|
11
|
+
# found at the location given by <tt>config_file</tt> that has
|
|
12
|
+
# the following format:
|
|
13
|
+
# envname:
|
|
14
|
+
# login: mytwitterlogin
|
|
15
|
+
# password: mytwitterpassword
|
|
16
|
+
#
|
|
17
|
+
# Where <tt>envname</tt> is the name of the environment like 'test',
|
|
18
|
+
# 'dev' or 'prod'. The <tt>env</tt> argument defaults to 'test'.
|
|
19
|
+
#
|
|
20
|
+
# To use this in the shell you would do something like the following
|
|
21
|
+
# examples:
|
|
22
|
+
# twitter = Twitter::Client.from_config('config/twitter.yml', 'dev')
|
|
23
|
+
# twitter = Twitter::Client.from_config('config/twitter.yml')
|
|
24
|
+
def from_config(config_file, env = 'test')
|
|
25
|
+
yaml_hash = YAML.load(File.read(config_file))
|
|
26
|
+
self.new yaml_hash[env]
|
|
27
|
+
end
|
|
28
|
+
end # class << self
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# The Twitter4R API provides a nicer Ruby object API to work with
|
|
2
|
+
# instead of coding around the REST API.
|
|
3
|
+
|
|
4
|
+
# Module to encapsule the Twitter4R API.
|
|
5
|
+
module Twitter
|
|
6
|
+
# Mixin module for classes that need to have a constructor similar to
|
|
7
|
+
# Rails' models, where a <tt>Hash</tt> is provided to set attributes
|
|
8
|
+
# appropriately.
|
|
9
|
+
#
|
|
10
|
+
# To define a class that uses this mixin, use the following code:
|
|
11
|
+
# class FilmActor
|
|
12
|
+
# include ClassUtilMixin
|
|
13
|
+
# end
|
|
14
|
+
module ClassUtilMixin #:nodoc:
|
|
15
|
+
def self.included(base) #:nodoc:
|
|
16
|
+
base.send(:include, InstanceMethods)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Instance methods defined for <tt>Twitter::ModelMixin</tt> module.
|
|
20
|
+
module InstanceMethods #:nodoc:
|
|
21
|
+
# Constructor/initializer that takes a hash of parameters that
|
|
22
|
+
# will initialize *members* or instance attributes to the
|
|
23
|
+
# values given. For example,
|
|
24
|
+
#
|
|
25
|
+
# class FilmActor
|
|
26
|
+
# include Twitter::ClassUtilMixin
|
|
27
|
+
# attr_accessor :name
|
|
28
|
+
# end
|
|
29
|
+
#
|
|
30
|
+
# class Production
|
|
31
|
+
# include Twitter::ClassUtilMixin
|
|
32
|
+
# attr_accessor :title, :year, :actors
|
|
33
|
+
# end
|
|
34
|
+
#
|
|
35
|
+
# # Favorite actress...
|
|
36
|
+
# jodhi = FilmActor.new(:name => "Jodhi May")
|
|
37
|
+
# jodhi.name # => "Jodhi May"
|
|
38
|
+
#
|
|
39
|
+
# # Favorite actor...
|
|
40
|
+
# robert = FilmActor.new(:name => "Robert Lindsay")
|
|
41
|
+
# robert.name # => "Robert Lindsay"
|
|
42
|
+
#
|
|
43
|
+
# # Jane is also an excellent pick...gotta love her accent!
|
|
44
|
+
# jane = FilmActor.new(name => "Jane Horrocks")
|
|
45
|
+
# jane.name # => "Jane Horrocks"
|
|
46
|
+
#
|
|
47
|
+
# # Witty BBC series...
|
|
48
|
+
# mrs_pritchard = Production.new(:title => "The Amazing Mrs. Pritchard",
|
|
49
|
+
# :year => 2005,
|
|
50
|
+
# :actors => [jodhi, jane])
|
|
51
|
+
# mrs_pritchard.title # => "The Amazing Mrs. Pritchard"
|
|
52
|
+
# mrs_pritchard.year # => 2005
|
|
53
|
+
# mrs_pritchard.actors # => [#<FilmActor:0xb79d6bbc @name="Jodhi May">,
|
|
54
|
+
# <FilmActor:0xb79d319c @name="Jane Horrocks">]
|
|
55
|
+
# # Any Ros Pritchard's out there to save us from the Tony Blair
|
|
56
|
+
# # and Gordon Brown *New Labour* debacle? You've got my vote!
|
|
57
|
+
#
|
|
58
|
+
# jericho = Production.new(:title => "Jericho",
|
|
59
|
+
# :year => 2005,
|
|
60
|
+
# :actors => [robert])
|
|
61
|
+
# jericho.title # => "Jericho"
|
|
62
|
+
# jericho.year # => 2005
|
|
63
|
+
# jericho.actors # => [#<FilmActor:0xc95d3eec @name="Robert Lindsay">]
|
|
64
|
+
#
|
|
65
|
+
# Assuming class <tt>FilmActor</tt> includes
|
|
66
|
+
# <tt>Twitter::ClassUtilMixin</tt> in the class definition
|
|
67
|
+
# and has an attribute of <tt>name</tt>, then that instance
|
|
68
|
+
# attribute will be set to "Jodhi May" for the <tt>actress</tt>
|
|
69
|
+
# object during object initialization (aka construction for
|
|
70
|
+
# you Java heads).
|
|
71
|
+
def initialize(params = {})
|
|
72
|
+
params.each do |key,val|
|
|
73
|
+
self.send("#{key}=", val) if self.respond_to? key
|
|
74
|
+
end
|
|
75
|
+
self.send(:init) if self.respond_to? :init
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
protected
|
|
79
|
+
# Helper method to provide an easy and terse way to require
|
|
80
|
+
# a block is provided to a method.
|
|
81
|
+
def require_block(block_given)
|
|
82
|
+
raise ArgumentError, "Must provide a block" unless block_given
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end # ClassUtilMixin
|
|
86
|
+
|
|
87
|
+
# Exception subclass raised when there is an error encountered upon
|
|
88
|
+
# querying or posting to the remote Twitter REST API.
|
|
89
|
+
#
|
|
90
|
+
# To consume and query any <tt>RESTError</tt> raised by Twitter4R:
|
|
91
|
+
# begin
|
|
92
|
+
# # Do something with your instance of <tt>Twitter::Client</tt>.
|
|
93
|
+
# # Maybe something like:
|
|
94
|
+
# timeline = twitter.timeline_for(:public)
|
|
95
|
+
# rescue RESTError => re
|
|
96
|
+
# puts re.code, re.message, re.uri
|
|
97
|
+
# end
|
|
98
|
+
# Which on the code raising a <tt>RESTError</tt> will output something like:
|
|
99
|
+
# 404
|
|
100
|
+
# Resource Not Found
|
|
101
|
+
# /i_am_crap.json
|
|
102
|
+
class RESTError < RuntimeError
|
|
103
|
+
include ClassUtilMixin
|
|
104
|
+
@@ATTRIBUTES = [:code, :message, :uri]
|
|
105
|
+
attr_accessor :code, :message, :uri
|
|
106
|
+
|
|
107
|
+
# Returns string in following format:
|
|
108
|
+
# "HTTP #{@code}: #{@message} at #{@uri}"
|
|
109
|
+
# For example,
|
|
110
|
+
# "HTTP 404: Resource Not Found at /i_am_crap.json"
|
|
111
|
+
def to_s
|
|
112
|
+
"HTTP #{@code}: #{@message} at #{@uri}"
|
|
113
|
+
end
|
|
114
|
+
end # RESTError
|
|
115
|
+
|
|
116
|
+
# Remote REST API interface representation
|
|
117
|
+
#
|
|
118
|
+
class RESTInterfaceSpec
|
|
119
|
+
include ClassUtilMixin
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Remote REST API method representation
|
|
124
|
+
#
|
|
125
|
+
class RESTMethodSpec
|
|
126
|
+
include ClassUtilMixin
|
|
127
|
+
attr_accessor :uri, :method, :parameters
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Remote REST API method parameter representation
|
|
131
|
+
#
|
|
132
|
+
class RESTParameterSpec
|
|
133
|
+
include ClassUtilMixin
|
|
134
|
+
attr_accessor :name, :type, :required
|
|
135
|
+
def required?; @required; end
|
|
136
|
+
end
|
|
137
|
+
end
|