mojodna-switchboard 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile ADDED
@@ -0,0 +1,28 @@
1
+ require 'switchboard'
2
+
3
+ task :gemspec do
4
+ gemspec =<<-EOF
5
+ Gem::Specification.new do |s|
6
+ s.name = "switchboard"
7
+ s.version = "#{Switchboard::VERSION * "."}"
8
+ s.summary = "XMPP toolkit."
9
+ s.description = "A toolkit for assembling XMPP clients and interacting with XMPP servers."
10
+ s.authors = ["Seth Fitzsimmons"]
11
+ s.email = ["seth@mojodna.net"]
12
+
13
+ s.files = #{Dir.glob("**/*").select { |f| File.file?(f) }.inspect}
14
+ s.executables = ["switchboard"]
15
+ s.require_paths = ["lib"]
16
+
17
+ s.add_dependency("xmpp4r")
18
+ end
19
+ EOF
20
+
21
+ open("switchboard.gemspec", "w") do |f|
22
+ f << gemspec
23
+ end
24
+
25
+ puts "gemspec successfully created."
26
+ end
27
+
28
+ task :default => :gemspec
data/bin/switchboard CHANGED
@@ -2,7 +2,7 @@
2
2
  require 'switchboard'
3
3
  require 'optparse'
4
4
 
5
- command = ARGV.clone.options do |opts|
5
+ ARGV.clone.options do |opts|
6
6
  # opts.banner = "Usage: example.rb [options]"
7
7
 
8
8
  command = Switchboard::Commands::Default
@@ -30,6 +30,4 @@ command = ARGV.clone.options do |opts|
30
30
  ARGV.reject! { |v| !argv.include?(v) }
31
31
 
32
32
  command
33
- end
34
-
35
- command.run!
33
+ end.run!
@@ -19,6 +19,7 @@ module Switchboard
19
19
 
20
20
  # opts.on("-d", "--daemon", "Make server run as a daemon.") { OPTIONS[:detach] = true }
21
21
  opts.on("-j", "--jid=jid", String, "Specifies the JID to use.") { |v| OPTIONS["jid"] = v }
22
+ opts.on("-r", "--resource=resource", String, "Specifies the resource to use.") { |v| OPTIONS["resource"] = v }
22
23
  opts.on("-p", "--password=password", String, "Specifies the password to use.") { |v| OPTIONS["password"] = v }
23
24
  # opts.on("-p", "--pidfile=path", String,
24
25
  # "Specifies a pidfile to use.") { |v| OPTIONS[:pidfile] = v }
@@ -0,0 +1,38 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Affiliations < Switchboard::Command
5
+ description "Lists pubsub affiliations"
6
+
7
+ def self.run!
8
+ switchboard = Switchboard::Core.new do
9
+ defer :affiliations_received do
10
+ begin
11
+ pubsub.get_affiliations(OPTIONS["pubsub.node"])
12
+ rescue Jabber::ServerError => e
13
+ puts e
14
+ end
15
+ end
16
+
17
+ def affiliations_received(affiliations)
18
+ if affiliations
19
+ affiliations.each do |node, affiliation|
20
+ puts [node, affiliation] * " => "
21
+ end
22
+ else
23
+ puts "No affiliations."
24
+ end
25
+ end
26
+ end
27
+
28
+ if OPTIONS["oauth"]
29
+ switchboard.plug!(OAuthPubSubJack)
30
+ else
31
+ switchboard.plug!(PubSubJack)
32
+ end
33
+ switchboard.run!
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Config < Switchboard::Command
5
+ description "Gets the configuration for a pubsub node"
6
+
7
+ def self.run!
8
+ switchboard = Switchboard::Core.new do
9
+ defer :configuration_retrieved do
10
+ begin
11
+ if ARGV.length == 2
12
+ key, value = ARGV
13
+ puts "Setting '#{key}' to '#{value}'"
14
+ config = Jabber::PubSub::NodeConfig.new(OPTIONS["pubsub.node"], key => value)
15
+ set_config_for(OPTIONS["pubsub.node"], config)
16
+ end
17
+
18
+ get_config_from(OPTIONS["pubsub.node"])
19
+ rescue Jabber::ServerError => e
20
+ puts e
21
+ end
22
+ end
23
+
24
+ def configuration_retrieved(config)
25
+ if config
26
+ puts "Configuration for node '#{config.node}':"
27
+ config.options.each do |k,v|
28
+ puts " " + [k, v] * ": "
29
+ end
30
+ else
31
+ puts "Could not load configuration for node '#{OPTIONS["pubsub.node"]}'."
32
+ end
33
+ end
34
+ end
35
+
36
+ if OPTIONS["oauth"]
37
+ switchboard.plug!(OAuthPubSubJack)
38
+ else
39
+ switchboard.plug!(PubSubJack)
40
+ end
41
+ switchboard.run!
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,45 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Create < Switchboard::Command
5
+ description "Creates a pubsub node"
6
+
7
+ def self.options(opts)
8
+ super(opts)
9
+ opts.on("--collection", "Specifies that a 'collection' node should be created.") { |v| OPTIONS["pubsub.create.node_type"] = "collection" }
10
+ end
11
+
12
+ def self.run!
13
+ switchboard = Switchboard::Core.new do
14
+ defer :node_created do
15
+ begin
16
+ if OPTIONS["pubsub.create.node_type"] == "collection"
17
+ create_collection_node(OPTIONS["pubsub.node"])
18
+ else
19
+ create_node(OPTIONS["pubsub.node"])
20
+ end
21
+ rescue Jabber::ServerError => e
22
+ puts e
23
+ end
24
+ end
25
+
26
+ def node_created(name)
27
+ if name
28
+ puts "Node '#{name}' was created."
29
+ else
30
+ puts "An auto-named node was created."
31
+ end
32
+ end
33
+ end
34
+
35
+ if OPTIONS["oauth"]
36
+ switchboard.plug!(OAuthPubSubJack)
37
+ else
38
+ switchboard.plug!(PubSubJack)
39
+ end
40
+ switchboard.run!
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,36 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Delete < Switchboard::Command
5
+ description "Deletes a pubsub node"
6
+
7
+ def self.run!
8
+ switchboard = Switchboard::Core.new do
9
+ defer :node_deleted do
10
+ begin
11
+ delete_node(OPTIONS["pubsub.node"])
12
+ rescue Jabber::ServerError => e
13
+ puts e
14
+ end
15
+ end
16
+
17
+ def node_deleted(success)
18
+ if success
19
+ puts "Node '#{OPTIONS["pubsub.node"]}' was deleted."
20
+ else
21
+ puts "Node '#{OPTIONS["pubsub.node"]}' could not be deleted."
22
+ end
23
+ end
24
+ end
25
+
26
+ if OPTIONS["oauth"]
27
+ switchboard.plug!(OAuthPubSubJack)
28
+ else
29
+ switchboard.plug!(PubSubJack)
30
+ end
31
+ switchboard.run!
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,52 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Info < Switchboard::Command
5
+ hide! # Jabber::PubSub::NodeBrowser is broken in xmpp4r-0.4.0
6
+ description "Gets information about a pubsub resource"
7
+
8
+ def self.run!
9
+ switchboard = Switchboard::Core.new do
10
+ defer :info_retrieved do
11
+ begin
12
+ browser = Jabber::PubSub::NodeBrowser.new(client)
13
+ browser.get_info(OPTIONS["pubsub.server"], OPTIONS["pubsub.node"])
14
+ rescue Jabber::ServerError => e
15
+ puts e
16
+ end
17
+ end
18
+
19
+ def info_retrieved(info)
20
+ if info
21
+ if OPTIONS["pubsub.node"]
22
+ puts "Info for '#{OPTIONS["pubsub.node"]}' on '#{OPTIONS["pubsub.server"]}'"
23
+ else
24
+ puts "Info for '#{OPTIONS["pubsub.server"]}'"
25
+ end
26
+ info.each do |k,v|
27
+ if v.is_a?(Array)
28
+ puts " #{k}:"
29
+ v.each do |v2|
30
+ puts " #{v2}"
31
+ end
32
+ else
33
+ puts " #{k}: #{v}"
34
+ end
35
+ end
36
+ else
37
+ puts "Info could not be loaded for '#{OPTIONS["pubsub.server"]}'"
38
+ end
39
+ end
40
+ end
41
+
42
+ if OPTIONS["oauth"]
43
+ switchboard.plug!(OAuthPubSubJack)
44
+ else
45
+ switchboard.plug!(PubSubJack)
46
+ end
47
+ switchboard.run!
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,44 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Items < Switchboard::Command
5
+ description "Get items from a pubsub node"
6
+
7
+ def self.options(opts)
8
+ super(opts)
9
+ opts.on("--item-count=count", Integer, "Specifies the number of items to retrieve.") { |v| OPTIONS["pubsub.items.count"] = v }
10
+ end
11
+
12
+ def self.run!
13
+ switchboard = Switchboard::Core.new do
14
+ defer :items_retrieved do
15
+ begin
16
+ get_items_from(OPTIONS["pubsub.node"], OPTIONS["pubsub.items.count"])
17
+ rescue Jabber::ServerError => e
18
+ puts e
19
+ end
20
+ end
21
+
22
+ def items_retrieved(items)
23
+ if items && items.any?
24
+ puts "Items:"
25
+ items.each do |id, item|
26
+ puts [id, item] * ": "
27
+ end
28
+ else
29
+ puts "No items available for node '#{OPTIONS["pubsub.node"]}'."
30
+ end
31
+ end
32
+ end
33
+
34
+ if OPTIONS["oauth"]
35
+ switchboard.plug!(OAuthPubSubJack)
36
+ else
37
+ switchboard.plug!(PubSubJack)
38
+ end
39
+ switchboard.run!
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Listen < Switchboard::Command
5
+ description "Listens for pubsub events"
6
+
7
+ def self.run!
8
+ switchboard = Switchboard::Core.new
9
+ switchboard.plug!(PubSubJack)
10
+
11
+ switchboard.on_pubsub_event do |event|
12
+ puts event.to_s
13
+ end
14
+
15
+ switchboard.run!
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,41 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Nodes < Switchboard::Command
5
+ hide! # Jabber::PubSub::NodeBrowser is broken in xmpp4r-0.4.0
6
+ description "Lists available pubsub nodes (maybe use pubsub.<server>)"
7
+
8
+ def self.run!
9
+ switchboard = Switchboard::Core.new do
10
+ defer :nodes_retrieved do
11
+ begin
12
+ browser = Jabber::PubSub::NodeBrowser.new(client)
13
+ browser.nodes(OPTIONS["pubsub.server"])
14
+ rescue Jabber::ServerError => e
15
+ puts e
16
+ end
17
+ end
18
+
19
+ def nodes_retrieved(nodes)
20
+ if nodes && nodes.compact! && nodes.any?
21
+ puts "Nodes available on '#{OPTIONS["pubsub.server"]}':"
22
+ nodes.each do |node|
23
+ puts " #{node.to_s}"
24
+ end
25
+ else
26
+ puts "No nodes are available on '#{OPTIONS["pubsub.server"]}'."
27
+ end
28
+ end
29
+ end
30
+
31
+ if OPTIONS["oauth"]
32
+ switchboard.plug!(OAuthPubSubJack)
33
+ else
34
+ switchboard.plug!(PubSubJack)
35
+ end
36
+ switchboard.run!
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,44 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Options < Switchboard::Command
5
+ description "Gets subscription options for a pubsub node"
6
+
7
+ def self.options(opts)
8
+ super(opts)
9
+ opts.on("--subscriber=jid", String, "Specifies the subscriber to retrieve options for.") { |v| OPTIONS["pubsub.subscriber"] = v }
10
+ end
11
+
12
+ def self.run!
13
+ switchboard = Switchboard::Core.new do
14
+ defer :options_retrieved do
15
+ begin
16
+ get_options_from(OPTIONS["pubsub.node"], OPTIONS["pubsub.subscriber"] || OPTIONS["jid"])
17
+ rescue Jabber::ServerError => e
18
+ puts e
19
+ end
20
+ end
21
+
22
+ def options_retrieved(options)
23
+ if options
24
+ puts "Options for subscription by '#{OPTIONS["pubsub.subscriber"] || OPTIONS["jid"]}' to node '#{options.node}':"
25
+ options.options.each do |k,v|
26
+ puts " " + [k, v] * ": "
27
+ end
28
+ else
29
+ puts "Could not load options for subscription by '#{OPTIONS["pubsub.subscriber"] || OPTIONS["jid"]}' to node '#{OPTIONS["pubsub.node"]}'."
30
+ end
31
+ end
32
+ end
33
+
34
+ if OPTIONS["oauth"]
35
+ switchboard.plug!(OAuthPubSubJack)
36
+ else
37
+ switchboard.plug!(PubSubJack)
38
+ end
39
+ switchboard.run!
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,47 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Publish < Switchboard::Command
5
+ description "Publish to a pubsub node"
6
+
7
+ def self.options(opts)
8
+ super(opts)
9
+ opts.on("--item-id=id", String, "Specifies the item id to use.") { |v| OPTIONS["pubsub.publish.id"] = v }
10
+ end
11
+
12
+ def self.run!
13
+ switchboard = Switchboard::Core.new do
14
+ defer :item_published do
15
+ begin
16
+ item = Jabber::PubSub::Item.new
17
+ item.text = STDIN.read
18
+ if OPTIONS["pubsub.publish.id"]
19
+ publish_item_with_id_to(OPTIONS["pubsub.node"], item, OPTIONS["pubsub.publish.id"])
20
+ else
21
+ publish_item_to(OPTIONS["pubsub.node"], item)
22
+ end
23
+ rescue Jabber::ServerError => e
24
+ puts e
25
+ end
26
+ end
27
+
28
+ def item_published(success)
29
+ if success
30
+ puts "Item was published."
31
+ else
32
+ puts "Item could not be published."
33
+ end
34
+ end
35
+ end
36
+
37
+ if OPTIONS["oauth"]
38
+ switchboard.plug!(OAuthPubSubJack)
39
+ else
40
+ switchboard.plug!(PubSubJack)
41
+ end
42
+ switchboard.run!
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -10,13 +10,12 @@ module Switchboard
10
10
  def self.options(opts)
11
11
  super(opts)
12
12
  opts.on("--node=node", String, "Specifies the PubSub node to use.") { |v| OPTIONS["pubsub.node"] = v }
13
- opts.on("--oauth", "Sign requests using OAuth.") { OPTIONS["oauth"] = true }
14
- opts.on("--oauth-consumer-key=consumer-key", String, "Specifies the OAuth consumer key to use.") { |v| OPTIONS["oauth.consumer_key"] = v }
15
- opts.on("--oauth-consumer-secret=consumer-secret", String, "Specifies the OAuth consumer secret to use.") { |v| OPTIONS["oauth.consumer_secret"] = v }
16
- opts.on("--oauth-token=token", String, "Specifies the OAuth token to use.") { |v| OPTIONS["oauth.token"] = v }
17
- opts.on("--oauth-token-secret=token-secret", String, "Specifies the OAuth token secret to use.") { |v| OPTIONS["oauth.token_secret"] = v }
18
- opts.on("--node=node", String, "Specifies the PubSub node to use.") { |v| OPTIONS["pubsub.node"] = v }
19
13
  opts.on("--server=server", String, "Specifies the PubSub server to use.") { |v| OPTIONS["pubsub.server"] = v }
14
+ opts.on("--oauth", "Sign requests using OAuth.") { OPTIONS["oauth"] = true }
15
+ opts.on("--oauth-consumer-key=key", String, "Specifies the OAuth consumer key to use.") { |v| OPTIONS["oauth.consumer_key"] = v }
16
+ opts.on("--oauth-consumer-secret=secret", String, "Specifies the OAuth consumer secret to use.") { |v| OPTIONS["oauth.consumer_secret"] = v }
17
+ opts.on("--oauth-token =oken", String, "Specifies the OAuth token to use.") { |v| OPTIONS["oauth.token"] = v }
18
+ opts.on("--oauth-token-secret=secret", String, "Specifies the OAuth token secret to use.") { |v| OPTIONS["oauth.token_secret"] = v }
20
19
  end
21
20
  end
22
21
  end
@@ -0,0 +1,36 @@
1
+ module Switchboard
2
+ module Commands
3
+ class PubSub
4
+ class Purge < Switchboard::Command
5
+ description "Purges a pubsub node"
6
+
7
+ def self.run!
8
+ switchboard = Switchboard::Core.new do
9
+ defer :node_purged do
10
+ begin
11
+ purge_items_from(OPTIONS["pubsub.node"])
12
+ rescue Jabber::ServerError => e
13
+ puts e
14
+ end
15
+ end
16
+
17
+ def node_purged(success)
18
+ if success
19
+ puts "Node '#{OPTIONS["pubsub.node"]}' was successfully purged."
20
+ else
21
+ puts "Could not purge node '#{OPTIONS["pubsub.node"]}'."
22
+ end
23
+ end
24
+ end
25
+
26
+ if OPTIONS["oauth"]
27
+ switchboard.plug!(OAuthPubSubJack)
28
+ else
29
+ switchboard.plug!(PubSubJack)
30
+ end
31
+ switchboard.run!
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -17,10 +17,10 @@ module Switchboard
17
17
 
18
18
  # define here or as hydrant.subscriptions_received
19
19
  def subscribed(subscription)
20
- if subscription.subscription == :subscribed
20
+ if subscription && subscription.subscription == :subscribed
21
21
  puts "Subscribe successful."
22
22
  else
23
- puts "Subscribe failed!".red
23
+ puts "Subscribe failed!"
24
24
  end
25
25
  end
26
26
  end
@@ -9,7 +9,7 @@ module Switchboard
9
9
  # this executes in the main loop, so it doesn't really matter that this runs in a different thread
10
10
  defer :subscriptions_received do
11
11
  begin
12
- subscriptions
12
+ subscriptions(settings["pubsub.node"])
13
13
  rescue Jabber::ServerError => e
14
14
  puts e
15
15
  end
@@ -19,7 +19,7 @@ module Switchboard
19
19
  def subscriptions_received(subscriptions)
20
20
  if subscriptions && subscriptions.any?
21
21
  puts "Subscriptions:"
22
- puts subscriptions.collect { |subscription| "#{subscription.jid} => #{subscription.node}" } * "\n"
22
+ puts subscriptions.collect { |subscription| [subscription.subid, "#{subscription.jid || settings["jid"]} => #{subscription.node} (#{subscription.state})"].compact * ": " } * "\n"
23
23
  else
24
24
  puts "No subscriptions."
25
25
  end
@@ -1,4 +1,15 @@
1
1
  require 'switchboard/commands/pubsub/pubsub'
2
+ require 'switchboard/commands/pubsub/affiliations'
3
+ require 'switchboard/commands/pubsub/config'
4
+ require 'switchboard/commands/pubsub/create'
5
+ require 'switchboard/commands/pubsub/delete'
6
+ require 'switchboard/commands/pubsub/info'
7
+ require 'switchboard/commands/pubsub/items'
8
+ require 'switchboard/commands/pubsub/listen'
9
+ require 'switchboard/commands/pubsub/nodes'
10
+ require 'switchboard/commands/pubsub/options'
11
+ require 'switchboard/commands/pubsub/publish'
12
+ require 'switchboard/commands/pubsub/purge'
2
13
  require 'switchboard/commands/pubsub/subscribe'
3
14
  require 'switchboard/commands/pubsub/subscriptions'
4
15
  require 'switchboard/commands/pubsub/unsubscribe'
@@ -4,6 +4,10 @@ module Switchboard
4
4
  description "Register a JID"
5
5
 
6
6
  class Registration < Switchboard::Core
7
+ def initialize(settings = Switchboard::Settings.new, spin = false)
8
+ super(settings, false)
9
+ end
10
+
7
11
  protected
8
12
 
9
13
  def auth!
@@ -16,7 +20,7 @@ module Switchboard
16
20
  # TODO consider using client.register_info.inspect
17
21
  begin
18
22
  puts "Registering #{settings["jid"]} with password '#{settings["password"]}'."
19
- puts client.register(settings["password"])
23
+ iq = client.register(settings["password"])
20
24
  rescue Jabber::ServerError => e
21
25
  puts "Could not register: #{e}"
22
26
  shutdown(false)
@@ -9,7 +9,8 @@ end
9
9
  # allow local library modifications/additions to be loaded
10
10
  $: << File.join(File.dirname(__FILE__))
11
11
 
12
- require 'switchboard/instance_exec'
12
+ require 'switchboard/ext/delegate'
13
+ require 'switchboard/ext/instance_exec'
13
14
  require 'xmpp4r/roster'
14
15
 
15
16
 
@@ -0,0 +1,21 @@
1
+ class Module
2
+ # Modified version from ActiveSupport to support :with (for additional arguments)
3
+ def delegate(*methods)
4
+ options = methods.pop
5
+ unless options.is_a?(Hash) && to = options[:to]
6
+ raise ArgumentError, "Delegation needs a target. Supply an options hash with a :to key as the last argument (e.g. delegate :hello, :to => :greeter)."
7
+ end
8
+
9
+ prefix = options[:prefix] && "#{options[:prefix] == true ? to : options[:prefix]}_"
10
+ with = options[:with] || []
11
+
12
+ methods.each do |method|
13
+ module_eval(<<-EOS, "(__DELEGATION__)", 1)
14
+ def #{prefix}#{method}(*args, &block)
15
+ args += [#{with * ", "}]
16
+ #{to}.__send__(#{method.inspect}, *args, &block)
17
+ end
18
+ EOS
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,39 @@
1
+ require 'rubygems'
2
+ begin
3
+ require 'oauth'
4
+ rescue LoadError => e
5
+ gem = e.message.split("--").last.strip
6
+ puts "The #{gem} gem is required."
7
+ end
8
+
9
+ require 'switchboard/helpers/pubsub'
10
+ require 'oauth/consumer'
11
+ require 'oauth/request_proxy/mock_request'
12
+ require 'xmpp4r/pubsub'
13
+ require 'xmpp4r/pubsub/helper/oauth_service_helper'
14
+
15
+ module Switchboard
16
+ module Helpers
17
+ module OAuthPubSubHelper
18
+ include PubSubHelper
19
+
20
+ attr_reader :oauth_consumer, :oauth_token
21
+
22
+ # TODO most/all of these need to be implemented in OAuthServiceHelper
23
+ delegate :create_node, :create_collection_node, :delete_node,
24
+ :get_config_from, :get_options_from, :get_items_from, :publish_item_to,
25
+ :publish_item_with_id_to, :purge_items_from, :set_config_for,
26
+ :subscribe_to, :unsubscribe_from, :to => :pubsub,
27
+ :with => [:oauth_consumer, :oauth_token]
28
+
29
+ def subscriptions(node = nil)
30
+ if node
31
+ # TODO this needs to be implemented in OAuthServiceHelper
32
+ pubsub.get_subscriptions_from(node, oauth_consumer, oauth_token)
33
+ else
34
+ pubsub.get_subscriptions_from_all_nodes(oauth_consumer, oauth_token)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ require 'xmpp4r/pubsub'
2
+ # TODO this is broken in XMPP4R 0.4.0
3
+ # require 'xmpp4r/pubsub/helper/nodebrowser'
4
+
5
+ module PubSubHelper
6
+ attr_reader :pubsub
7
+
8
+ delegate :create_node, :create_collection_node, :delete_node,
9
+ :get_config_from, :get_options_from, :get_items_from, :publish_item_to,
10
+ :publish_item_with_id_to, :purge_items_from, :set_config_for,
11
+ :subscribe_to, :unsubscribe_from, :to => :pubsub
12
+
13
+ def on_pubsub_event(&block)
14
+ register_hook(:pubsub_event, &block)
15
+ end
16
+
17
+ def subscriptions(node = nil)
18
+ # NOTE: node-specific subscriptions do not appear to work in ejabberd 2.0.2
19
+ if node
20
+ pubsub.get_subscriptions_from(node)
21
+ else
22
+ pubsub.get_subscriptions_from_all_nodes
23
+ end
24
+ end
25
+ end
@@ -1,15 +1,4 @@
1
- require 'rubygems'
2
- begin
3
- require 'oauth'
4
- rescue LoadError => e
5
- gem = e.message.split("--").last.strip
6
- puts "The #{gem} gem is required."
7
- end
8
-
9
- require 'oauth/consumer'
10
- require 'oauth/request_proxy/mock_request'
11
- require 'xmpp4r/pubsub'
12
- require 'xmpp4r/pubsub/helper/oauth_service_helper'
1
+ require 'switchboard/helpers/oauth_pubsub'
13
2
 
14
3
  # TODO subclass PubSubJack
15
4
  class OAuthPubSubJack
@@ -20,6 +9,8 @@ class OAuthPubSubJack
20
9
  return false
21
10
  end
22
11
 
12
+ switchboard.extend(Switchboard::Helpers::OAuthPubSubHelper)
13
+
23
14
  switchboard.on_startup do
24
15
  @pubsub = Jabber::PubSub::OAuthServiceHelper.new(client, settings["pubsub.server"])
25
16
 
@@ -30,38 +21,5 @@ class OAuthPubSubJack
30
21
  on(:pubsub_event, event)
31
22
  end
32
23
  end
33
-
34
- def switchboard.subscribe_to(node)
35
- pubsub.subscribe_to(node, oauth_consumer, oauth_token)
36
- end
37
-
38
- def switchboard.subscriptions
39
- pubsub.get_subscriptions_from_all_nodes(oauth_consumer, oauth_token)
40
- end
41
-
42
- def switchboard.unsubscribe_from(node)
43
- pubsub.unsubscribe_from(node, oauth_consumer, oauth_token)
44
- end
45
-
46
- # TODO add the ability to define accessors
47
- def switchboard.general_token
48
- @general_token
49
- end
50
-
51
- def switchboard.oauth_consumer
52
- @oauth_consumer
53
- end
54
-
55
- def switchboard.oauth_token
56
- @oauth_token
57
- end
58
-
59
- def switchboard.pubsub
60
- @pubsub
61
- end
62
-
63
- def switchboard.on_pubsub_event(&block)
64
- register_hook(:pubsub_event, &block)
65
- end
66
24
  end
67
25
  end
@@ -1,4 +1,4 @@
1
- require 'xmpp4r/pubsub'
1
+ require 'switchboard/helpers/pubsub'
2
2
 
3
3
  class PubSubJack
4
4
  def self.connect(switchboard, settings)
@@ -8,6 +8,8 @@ class PubSubJack
8
8
  return false
9
9
  end
10
10
 
11
+ switchboard.extend(Switchboard::Helpers::PubSubHelper)
12
+
11
13
  switchboard.on_startup do
12
14
  @pubsub = Jabber::PubSub::ServiceHelper.new(client, settings["pubsub.server"])
13
15
 
@@ -15,38 +17,5 @@ class PubSubJack
15
17
  on(:pubsub_event, event)
16
18
  end
17
19
  end
18
-
19
- def switchboard.subscribe_to(node)
20
- pubsub.subscribe_to(node)
21
- end
22
-
23
- def switchboard.subscriptions
24
- pubsub.get_subscriptions_from_all_nodes
25
- end
26
-
27
- def switchboard.unsubscribe_from(node)
28
- pubsub.unsubscribe_from(node)
29
- end
30
-
31
- # TODO add the ability to define accessors
32
- def switchboard.general_token
33
- @general_token
34
- end
35
-
36
- def switchboard.oauth_consumer
37
- @oauth_consumer
38
- end
39
-
40
- def switchboard.oauth_token
41
- @oauth_token
42
- end
43
-
44
- def switchboard.pubsub
45
- @pubsub
46
- end
47
-
48
- def switchboard.on_pubsub_event(&block)
49
- register_hook(:pubsub_event, &block)
50
- end
51
20
  end
52
21
  end
@@ -1,3 +1,3 @@
1
1
  module Switchboard
2
- VERSION = [0, 0, 3]
2
+ VERSION = [0, 0, 4]
3
3
  end
data/switchboard.gemspec CHANGED
@@ -1,12 +1,12 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "switchboard"
3
- s.version = "0.0.3"
3
+ s.version = "0.0.4"
4
4
  s.summary = "XMPP toolkit."
5
5
  s.description = "A toolkit for assembling XMPP clients and interacting with XMPP servers."
6
6
  s.authors = ["Seth Fitzsimmons"]
7
7
  s.email = ["seth@mojodna.net"]
8
8
 
9
- s.files = ["bin/switchboard", "examples/election_results.rb", "lib/switchboard/colors.rb", "lib/switchboard/commands/command.rb", "lib/switchboard/commands/config/config.rb", "lib/switchboard/commands/config.rb", "lib/switchboard/commands/default.rb", "lib/switchboard/commands/help/help.rb", "lib/switchboard/commands/help.rb", "lib/switchboard/commands/pubsub/pubsub.rb", "lib/switchboard/commands/pubsub/subscribe.rb", "lib/switchboard/commands/pubsub/subscriptions.rb", "lib/switchboard/commands/pubsub/unsubscribe.rb", "lib/switchboard/commands/pubsub.rb", "lib/switchboard/commands/register.rb", "lib/switchboard/commands/roster/add.rb", "lib/switchboard/commands/roster/list.rb", "lib/switchboard/commands/roster/remove.rb", "lib/switchboard/commands/roster/roster.rb", "lib/switchboard/commands/roster.rb", "lib/switchboard/commands/unregister.rb", "lib/switchboard/commands.rb", "lib/switchboard/core.rb", "lib/switchboard/instance_exec.rb", "lib/switchboard/jacks/auto_accept.rb", "lib/switchboard/jacks/debug.rb", "lib/switchboard/jacks/notify.rb", "lib/switchboard/jacks/oauth_pubsub.rb", "lib/switchboard/jacks/pubsub.rb", "lib/switchboard/jacks/roster_debug.rb", "lib/switchboard/jacks.rb", "lib/switchboard/oauth/request_proxy/mock_request.rb", "lib/switchboard/settings.rb", "lib/switchboard/switchboard.rb", "lib/switchboard/version.rb", "lib/switchboard/xmpp4r/pubsub/helper/oauth_service_helper.rb", "lib/switchboard.rb", "README.markdown", "switchboard.gemspec"]
9
+ s.files = ["bin/switchboard", "examples/election_results.rb", "lib/switchboard/colors.rb", "lib/switchboard/commands/command.rb", "lib/switchboard/commands/config/config.rb", "lib/switchboard/commands/config.rb", "lib/switchboard/commands/default.rb", "lib/switchboard/commands/help/help.rb", "lib/switchboard/commands/help.rb", "lib/switchboard/commands/pubsub/affiliations.rb", "lib/switchboard/commands/pubsub/config.rb", "lib/switchboard/commands/pubsub/create.rb", "lib/switchboard/commands/pubsub/delete.rb", "lib/switchboard/commands/pubsub/info.rb", "lib/switchboard/commands/pubsub/items.rb", "lib/switchboard/commands/pubsub/listen.rb", "lib/switchboard/commands/pubsub/nodes.rb", "lib/switchboard/commands/pubsub/options.rb", "lib/switchboard/commands/pubsub/publish.rb", "lib/switchboard/commands/pubsub/pubsub.rb", "lib/switchboard/commands/pubsub/purge.rb", "lib/switchboard/commands/pubsub/subscribe.rb", "lib/switchboard/commands/pubsub/subscriptions.rb", "lib/switchboard/commands/pubsub/unsubscribe.rb", "lib/switchboard/commands/pubsub.rb", "lib/switchboard/commands/register.rb", "lib/switchboard/commands/roster/add.rb", "lib/switchboard/commands/roster/list.rb", "lib/switchboard/commands/roster/remove.rb", "lib/switchboard/commands/roster/roster.rb", "lib/switchboard/commands/roster.rb", "lib/switchboard/commands/unregister.rb", "lib/switchboard/commands.rb", "lib/switchboard/core.rb", "lib/switchboard/ext/delegate.rb", "lib/switchboard/ext/instance_exec.rb", "lib/switchboard/helpers/oauth_pubsub.rb", "lib/switchboard/helpers/pubsub.rb", "lib/switchboard/jacks/auto_accept.rb", "lib/switchboard/jacks/debug.rb", "lib/switchboard/jacks/notify.rb", "lib/switchboard/jacks/oauth_pubsub.rb", "lib/switchboard/jacks/pubsub.rb", "lib/switchboard/jacks/roster_debug.rb", "lib/switchboard/jacks.rb", "lib/switchboard/oauth/request_proxy/mock_request.rb", "lib/switchboard/settings.rb", "lib/switchboard/switchboard.rb", "lib/switchboard/version.rb", "lib/switchboard/xmpp4r/pubsub/helper/oauth_service_helper.rb", "lib/switchboard.rb", "Rakefile", "README.markdown", "switchboard.gemspec"]
10
10
  s.executables = ["switchboard"]
11
11
  s.require_paths = ["lib"]
12
12
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mojodna-switchboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Fitzsimmons
@@ -40,7 +40,18 @@ files:
40
40
  - lib/switchboard/commands/default.rb
41
41
  - lib/switchboard/commands/help/help.rb
42
42
  - lib/switchboard/commands/help.rb
43
+ - lib/switchboard/commands/pubsub/affiliations.rb
44
+ - lib/switchboard/commands/pubsub/config.rb
45
+ - lib/switchboard/commands/pubsub/create.rb
46
+ - lib/switchboard/commands/pubsub/delete.rb
47
+ - lib/switchboard/commands/pubsub/info.rb
48
+ - lib/switchboard/commands/pubsub/items.rb
49
+ - lib/switchboard/commands/pubsub/listen.rb
50
+ - lib/switchboard/commands/pubsub/nodes.rb
51
+ - lib/switchboard/commands/pubsub/options.rb
52
+ - lib/switchboard/commands/pubsub/publish.rb
43
53
  - lib/switchboard/commands/pubsub/pubsub.rb
54
+ - lib/switchboard/commands/pubsub/purge.rb
44
55
  - lib/switchboard/commands/pubsub/subscribe.rb
45
56
  - lib/switchboard/commands/pubsub/subscriptions.rb
46
57
  - lib/switchboard/commands/pubsub/unsubscribe.rb
@@ -54,7 +65,10 @@ files:
54
65
  - lib/switchboard/commands/unregister.rb
55
66
  - lib/switchboard/commands.rb
56
67
  - lib/switchboard/core.rb
57
- - lib/switchboard/instance_exec.rb
68
+ - lib/switchboard/ext/delegate.rb
69
+ - lib/switchboard/ext/instance_exec.rb
70
+ - lib/switchboard/helpers/oauth_pubsub.rb
71
+ - lib/switchboard/helpers/pubsub.rb
58
72
  - lib/switchboard/jacks/auto_accept.rb
59
73
  - lib/switchboard/jacks/debug.rb
60
74
  - lib/switchboard/jacks/notify.rb
@@ -68,6 +82,7 @@ files:
68
82
  - lib/switchboard/version.rb
69
83
  - lib/switchboard/xmpp4r/pubsub/helper/oauth_service_helper.rb
70
84
  - lib/switchboard.rb
85
+ - Rakefile
71
86
  - README.markdown
72
87
  - switchboard.gemspec
73
88
  has_rdoc: false