mojodna-switchboard 0.0.3 → 0.0.4

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/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