mojodna-switchboard 0.0.6 → 0.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/README.markdown +6 -0
- data/Rakefile +1 -3
- data/lib/switchboard/client.rb +4 -24
- data/lib/switchboard/commands/pep/location.rb +96 -0
- data/lib/switchboard/commands/pep/tune.rb +9 -7
- data/lib/switchboard/commands/pep.rb +1 -0
- data/lib/switchboard/commands/pubsub/affiliations.rb +1 -1
- data/lib/switchboard/commands/pubsub/config.rb +1 -1
- data/lib/switchboard/commands/pubsub/create.rb +1 -1
- data/lib/switchboard/commands/pubsub/delete.rb +1 -1
- data/lib/switchboard/commands/pubsub/info.rb +1 -1
- data/lib/switchboard/commands/pubsub/items.rb +1 -1
- data/lib/switchboard/commands/pubsub/nodes.rb +1 -1
- data/lib/switchboard/commands/pubsub/options.rb +1 -1
- data/lib/switchboard/commands/pubsub/publish.rb +1 -1
- data/lib/switchboard/commands/pubsub/pubsub.rb +7 -5
- data/lib/switchboard/commands/pubsub/purge.rb +1 -1
- data/lib/switchboard/commands/pubsub/subscribe.rb +1 -1
- data/lib/switchboard/commands/pubsub/subscriptions.rb +1 -1
- data/lib/switchboard/commands/pubsub/unsubscribe.rb +1 -1
- data/lib/switchboard/component.rb +36 -0
- data/lib/switchboard/core.rb +39 -39
- data/lib/switchboard/helpers/pubsub.rb +1 -3
- data/lib/switchboard/jacks/oauth_pubsub.rb +2 -3
- data/lib/switchboard/switchboard.rb +1 -0
- data/lib/switchboard/version.rb +1 -1
- data/lib/switchboard/xmpp4r/location/helper/helper.rb +56 -0
- data/lib/switchboard/xmpp4r/location/location.rb +179 -0
- data/lib/switchboard/xmpp4r/location.rb +2 -0
- data/switchboard.gemspec +3 -5
- metadata +6 -19
data/README.markdown
CHANGED
@@ -9,6 +9,12 @@ Install it:
|
|
9
9
|
|
10
10
|
$ sudo gem install mojodna-switchboard -s http://gems.github.com
|
11
11
|
|
12
|
+
Install optional dependencies for additional functionality:
|
13
|
+
|
14
|
+
$ sudo gem install oauth # (for OAuth PubSub support)
|
15
|
+
$ sudo gem install fire-hydrant # (for User Location support)
|
16
|
+
$ sudo gem install rb-appscript # (for User Tune support)
|
17
|
+
|
12
18
|
Configure it:
|
13
19
|
|
14
20
|
$ switchboard config jid jid@example.com
|
data/Rakefile
CHANGED
@@ -3,6 +3,7 @@ require File.join("lib", "switchboard", "version")
|
|
3
3
|
desc "Generate the gemspec"
|
4
4
|
task :gemspec do
|
5
5
|
gemspec =<<-EOF
|
6
|
+
# this file is automatically generated
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "switchboard"
|
8
9
|
s.version = "#{Switchboard::VERSION * "."}"
|
@@ -16,9 +17,6 @@ Gem::Specification.new do |s|
|
|
16
17
|
s.require_paths = ["lib"]
|
17
18
|
|
18
19
|
s.add_dependency("xmpp4r")
|
19
|
-
s.add_dependency("oauth")
|
20
|
-
s.add_dependency("rb-appscript")
|
21
|
-
|
22
20
|
end
|
23
21
|
EOF
|
24
22
|
|
data/lib/switchboard/client.rb
CHANGED
@@ -24,29 +24,9 @@ module Switchboard
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
def on_roster_query(&block)
|
32
|
-
register_hook(:roster_query, &block)
|
33
|
-
end
|
34
|
-
|
35
|
-
def on_roster_subscription(&block)
|
36
|
-
register_hook(:roster_subscription, &block)
|
37
|
-
end
|
38
|
-
|
39
|
-
def on_roster_subscription_request(&block)
|
40
|
-
register_hook(:roster_subscription_request, &block)
|
41
|
-
end
|
42
|
-
|
43
|
-
def on_roster_loaded(&block)
|
44
|
-
register_hook(:roster_loaded, &block)
|
45
|
-
end
|
46
|
-
|
47
|
-
def on_roster_update(&block)
|
48
|
-
register_hook(:roster_update, &block)
|
49
|
-
end
|
27
|
+
hook \
|
28
|
+
:roster_presence, :roster_query, :roster_subscription,
|
29
|
+
:roster_subscription_request, :roster_loaded, :roster_update
|
50
30
|
|
51
31
|
protected
|
52
32
|
|
@@ -66,7 +46,7 @@ module Switchboard
|
|
66
46
|
|
67
47
|
def disconnect!
|
68
48
|
presence(:unavailable)
|
69
|
-
|
49
|
+
super
|
70
50
|
end
|
71
51
|
|
72
52
|
def presence(status = nil, to = nil)
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'xmpp4r/location'
|
3
|
+
|
4
|
+
module Switchboard
|
5
|
+
module Commands
|
6
|
+
class PEP
|
7
|
+
class Location < Switchboard::Command
|
8
|
+
description "Broadcasting UserLocation (XEP-0080)"
|
9
|
+
|
10
|
+
def self.run!
|
11
|
+
begin
|
12
|
+
require 'fire_hydrant'
|
13
|
+
rescue LoadError => e
|
14
|
+
gem = e.message.split("--").last.strip
|
15
|
+
puts "The #{gem} gem is required for this command to work."
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
|
19
|
+
switchboard = Switchboard::Client.new
|
20
|
+
switchboard.plug!(AutoAcceptJack, FireEagleJack)
|
21
|
+
|
22
|
+
switchboard.on_startup do
|
23
|
+
@location_helper = Jabber::UserLocation::Helper.new(client, nil)
|
24
|
+
end
|
25
|
+
|
26
|
+
switchboard.on_location_update do |user|
|
27
|
+
# for some reason the Fire Eagle gem doesn't work when I access #name directly
|
28
|
+
name = user.locations[0].instance_eval { @doc.at("//name").innerText }
|
29
|
+
timestamp = Time.parse(user.locations[0].instance_eval { @doc.at("//located-at").innerText })
|
30
|
+
|
31
|
+
area, postalcode, locality, region, country = nil
|
32
|
+
|
33
|
+
user.locations.each do |loc|
|
34
|
+
level = loc.instance_eval { @doc.at("//level-name").innerText }
|
35
|
+
normal_name = loc.instance_eval { @doc.at("//normal-name").innerText }
|
36
|
+
case level
|
37
|
+
when "exact"
|
38
|
+
street = normal_name
|
39
|
+
when "postal"
|
40
|
+
postalcode = normal_name
|
41
|
+
when "neighborhood"
|
42
|
+
area = normal_name
|
43
|
+
when "city"
|
44
|
+
locality = normal_name
|
45
|
+
when "state"
|
46
|
+
region = normal_name
|
47
|
+
when "country"
|
48
|
+
country = normal_name
|
49
|
+
end
|
50
|
+
puts "level: #{level}"
|
51
|
+
end
|
52
|
+
|
53
|
+
puts "Current location: #{name}."
|
54
|
+
|
55
|
+
geom = user.locations[0].geom
|
56
|
+
if geom.is_a?(GeoRuby::SimpleFeatures::Envelope)
|
57
|
+
pt = geom.center
|
58
|
+
accuracy = geom.upper_corner.spherical_distance(geom.lower_corner) / 2
|
59
|
+
else
|
60
|
+
pt = geom
|
61
|
+
accuracy = 0
|
62
|
+
end
|
63
|
+
|
64
|
+
location = Jabber::UserLocation::Location.new \
|
65
|
+
"accuracy" => accuracy,
|
66
|
+
"area" => area,
|
67
|
+
"country" => country,
|
68
|
+
"description" => name,
|
69
|
+
"lat" => pt.lat,
|
70
|
+
"locality" => locality,
|
71
|
+
"lon" => pt.lon,
|
72
|
+
"postalcode" => postalcode,
|
73
|
+
"region" => region,
|
74
|
+
"street" => street,
|
75
|
+
"timestamp" => timestamp
|
76
|
+
|
77
|
+
# parsing thread is still running, so the send needs to be deferred
|
78
|
+
defer :location_sent do
|
79
|
+
@location_helper.current_location(location)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
switchboard.on_shutdown do
|
84
|
+
begin
|
85
|
+
@location_helper.stop_publishing
|
86
|
+
rescue Jabber::ServerError => e
|
87
|
+
puts e
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
switchboard.run!
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -1,10 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'appscript'
|
3
|
-
rescue LoadError => e
|
4
|
-
gem = e.message.split("--").last.strip
|
5
|
-
puts "The #{gem} gem is required."
|
6
|
-
exit 1
|
7
|
-
end
|
1
|
+
require 'rubygems'
|
8
2
|
require 'xmpp4r/tune'
|
9
3
|
|
10
4
|
module Switchboard
|
@@ -14,6 +8,14 @@ module Switchboard
|
|
14
8
|
description "Broadcasting UserTune (XEP-0118)"
|
15
9
|
|
16
10
|
def self.run!
|
11
|
+
begin
|
12
|
+
require 'appscript'
|
13
|
+
rescue LoadError => e
|
14
|
+
gem = e.message.split("--").last.strip
|
15
|
+
puts "The #{gem} gem is required for this command to work."
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
|
17
19
|
switchboard = Switchboard::Client.new do
|
18
20
|
@tune_helper = Jabber::UserTune::Helper.new(client, nil)
|
19
21
|
|
@@ -11,11 +11,13 @@ module Switchboard
|
|
11
11
|
super(opts)
|
12
12
|
opts.on("--node=node", String, "Specifies the PubSub node to use.") { |v| OPTIONS["pubsub.node"] = v }
|
13
13
|
opts.on("--server=server", String, "Specifies the PubSub server to use.") { |v| OPTIONS["pubsub.server"] = v }
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
if defined?(OAuth)
|
15
|
+
opts.on("--oauth", "Sign requests using OAuth.") { OPTIONS["oauth"] = true }
|
16
|
+
opts.on("--oauth-consumer-key=key", String, "Specifies the OAuth consumer key to use.") { |v| OPTIONS["oauth.consumer_key"] = v }
|
17
|
+
opts.on("--oauth-consumer-secret=secret", String, "Specifies the OAuth consumer secret to use.") { |v| OPTIONS["oauth.consumer_secret"] = v }
|
18
|
+
opts.on("--oauth-token =oken", String, "Specifies the OAuth token to use.") { |v| OPTIONS["oauth.token"] = v }
|
19
|
+
opts.on("--oauth-token-secret=secret", String, "Specifies the OAuth token secret to use.") { |v| OPTIONS["oauth.token_secret"] = v }
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Switchboard
|
2
|
+
class Component < Core
|
3
|
+
attr_reader :component
|
4
|
+
|
5
|
+
def initialize(settings = Switchboard::Settings.new, spin = true)
|
6
|
+
super(settings, spin)
|
7
|
+
|
8
|
+
@component = Jabber::Component.new(settings["component.domain"])
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def auth!
|
14
|
+
component.auth(settings["component.secret"])
|
15
|
+
rescue Jabber::AuthenticationFailure
|
16
|
+
puts "Component authentication failed. Check your secret."
|
17
|
+
shutdown(false)
|
18
|
+
exit 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def connect!
|
22
|
+
component.connect(settings["component.host"], settings["component.port"])
|
23
|
+
auth!
|
24
|
+
puts "Component connected." if debug?
|
25
|
+
rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT
|
26
|
+
puts "Couldn't connect to Jabber server at #{settings["component.host"]}:#{settings["component.host"]}.
|
27
|
+
That may mean the Jabber server isn't running or listening on that port,
|
28
|
+
or there might be firewall issues. Exiting."
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
|
32
|
+
def stream
|
33
|
+
component
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/switchboard/core.rb
CHANGED
@@ -20,6 +20,21 @@ module Switchboard
|
|
20
20
|
|
21
21
|
attr_reader :jacks, :settings
|
22
22
|
|
23
|
+
# Register a hook
|
24
|
+
def self.hook(*events)
|
25
|
+
events.each do |event|
|
26
|
+
module_eval(<<-EOS, __FILE__, __LINE__)
|
27
|
+
def on_#{event}(method = nil, &block)
|
28
|
+
if block_given?
|
29
|
+
register_hook(:#{event}, &block)
|
30
|
+
elsif method
|
31
|
+
register_hook(:#{event}, method)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
EOS
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
23
38
|
def initialize(settings = Switchboard::Settings.new, spin = true, &block)
|
24
39
|
# register a handler for SIGINTs
|
25
40
|
trap(:INT) do
|
@@ -87,6 +102,10 @@ module Switchboard
|
|
87
102
|
end
|
88
103
|
end
|
89
104
|
|
105
|
+
def hook(*events)
|
106
|
+
self.class.hook(*events)
|
107
|
+
end
|
108
|
+
|
90
109
|
# Connect a jack to the switchboard
|
91
110
|
def plug!(*jacks)
|
92
111
|
@jacks ||= []
|
@@ -101,39 +120,7 @@ module Switchboard
|
|
101
120
|
end
|
102
121
|
end
|
103
122
|
|
104
|
-
|
105
|
-
def on_exception(&block)
|
106
|
-
register_hook(:exception, &block)
|
107
|
-
end
|
108
|
-
|
109
|
-
# Register a hook to run when iq stanzas are received.
|
110
|
-
def on_iq(&block)
|
111
|
-
register_hook(:iq, &block)
|
112
|
-
end
|
113
|
-
|
114
|
-
# Register a hook to run when message stanzas are received.
|
115
|
-
def on_message(&block)
|
116
|
-
register_hook(:message, &block)
|
117
|
-
end
|
118
|
-
|
119
|
-
# Register a hook to run when presence stanzas are received.
|
120
|
-
def on_presence(&block)
|
121
|
-
register_hook(:presence, &block)
|
122
|
-
end
|
123
|
-
|
124
|
-
# Register a startup hook.
|
125
|
-
def on_startup(&block)
|
126
|
-
register_hook(:startup, &block)
|
127
|
-
end
|
128
|
-
|
129
|
-
def on_stream_connected(&block)
|
130
|
-
register_hook(:stream_connected, &block)
|
131
|
-
end
|
132
|
-
|
133
|
-
# Register a shutdown hook.
|
134
|
-
def on_shutdown(&block)
|
135
|
-
register_hook(:shutdown, &block)
|
136
|
-
end
|
123
|
+
hook(:exception, :iq, :message, :presence, :startup, :stream_connected, :shutdown)
|
137
124
|
|
138
125
|
protected
|
139
126
|
|
@@ -150,21 +137,29 @@ module Switchboard
|
|
150
137
|
end
|
151
138
|
|
152
139
|
def disconnect!
|
153
|
-
|
140
|
+
stream.close
|
154
141
|
end
|
155
142
|
|
156
|
-
def register_hook(name, &block)
|
143
|
+
def register_hook(name, method = nil, &block)
|
157
144
|
@hooks ||= {}
|
158
|
-
|
145
|
+
name = name.to_sym
|
146
|
+
@hooks[name] ||= []
|
159
147
|
|
160
148
|
puts "Registering #{name} hook" if debug?
|
161
|
-
|
149
|
+
if block_given?
|
150
|
+
@hooks[name] << block
|
151
|
+
else
|
152
|
+
@hooks[name] << lambda do |*args|
|
153
|
+
send(method.to_sym, *args)
|
154
|
+
end
|
155
|
+
end
|
162
156
|
end
|
163
157
|
|
164
158
|
def on(name, *args)
|
165
159
|
@hooks ||= {}
|
166
160
|
@hooks[name.to_sym] ||= []
|
167
161
|
@hooks[name.to_sym].each do |hook|
|
162
|
+
puts "Executing hook '#{name}'" if debug?
|
168
163
|
execute_hook(hook, *args)
|
169
164
|
end
|
170
165
|
end
|
@@ -192,7 +187,11 @@ module Switchboard
|
|
192
187
|
on(:exception, e, stream, where)
|
193
188
|
|
194
189
|
case where
|
195
|
-
when :
|
190
|
+
when :disconnected
|
191
|
+
puts "Jabber service disconnected. Shutting down."
|
192
|
+
exit 1
|
193
|
+
when :exit
|
194
|
+
puts "Shutting down."
|
196
195
|
else
|
197
196
|
puts "Caught #{e.inspect} on #{stream} at #{where}. You might want to consider handling this."
|
198
197
|
raise e
|
@@ -215,10 +214,11 @@ module Switchboard
|
|
215
214
|
def startup
|
216
215
|
begin
|
217
216
|
timeout(30) do
|
217
|
+
register_default_callbacks
|
218
|
+
|
218
219
|
connect!
|
219
220
|
@connected = true
|
220
221
|
|
221
|
-
register_default_callbacks
|
222
222
|
on(:stream_connected)
|
223
223
|
end
|
224
224
|
rescue Timeout::Error
|
@@ -12,9 +12,7 @@ module Switchboard
|
|
12
12
|
:publish_item_with_id_to, :purge_items_from, :set_config_for,
|
13
13
|
:subscribe_to, :unsubscribe_from, :to => :pubsub
|
14
14
|
|
15
|
-
|
16
|
-
register_hook(:pubsub_event, &block)
|
17
|
-
end
|
15
|
+
Switchboard::Core.hook(:pubsub_event)
|
18
16
|
|
19
17
|
def subscriptions(node = nil)
|
20
18
|
# NOTE: node-specific subscriptions do not appear to work in ejabberd 2.0.2
|
@@ -1,8 +1,7 @@
|
|
1
|
-
require 'switchboard/helpers/oauth_pubsub'
|
2
|
-
|
3
|
-
# TODO subclass PubSubJack
|
4
1
|
class OAuthPubSubJack
|
5
2
|
def self.connect(switchboard, settings)
|
3
|
+
require 'switchboard/helpers/oauth_pubsub'
|
4
|
+
|
6
5
|
# TODO generalize this pattern for required settings
|
7
6
|
unless settings["pubsub.server"]
|
8
7
|
puts "A pubsub server must be specified."
|
data/lib/switchboard/version.rb
CHANGED
@@ -0,0 +1,56 @@
|
|
1
|
+
# =XMPP4R - XMPP Library for Ruby
|
2
|
+
# License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
|
3
|
+
# Website::http://home.gna.org/xmpp4r/
|
4
|
+
|
5
|
+
require 'xmpp4r'
|
6
|
+
require 'xmpp4r/pubsub'
|
7
|
+
require 'xmpp4r/location/location'
|
8
|
+
|
9
|
+
module Jabber
|
10
|
+
module UserLocation
|
11
|
+
##
|
12
|
+
# A Helper for XEP-0080 User Location
|
13
|
+
#
|
14
|
+
# Use this helper to send a user's location, or receive them from a
|
15
|
+
# specified jid. Described at http://www.xmpp.org/extensions/xep-0080.html
|
16
|
+
#
|
17
|
+
# For example:
|
18
|
+
# <pre>
|
19
|
+
# h = UserLocation::Helper( @client, 'radio1@hug.hellomatty.com' )
|
20
|
+
# h.add_userlocation_callback do |location|
|
21
|
+
# puts "Now in: #{location.locality}"
|
22
|
+
# end
|
23
|
+
# </pre>
|
24
|
+
class Helper < PubSub::ServiceHelper
|
25
|
+
##
|
26
|
+
# Send out the current location.
|
27
|
+
#
|
28
|
+
# location:: [Jabber::UserLocation::Location] current_location
|
29
|
+
def current_location(location)
|
30
|
+
item = Jabber::PubSub::Item.new()
|
31
|
+
item.add(location)
|
32
|
+
|
33
|
+
publish_item_to(NS_USERLOCATION, item)
|
34
|
+
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Use this method to indicate that you wish to stop publishing
|
38
|
+
# a location.
|
39
|
+
def stop_publishing
|
40
|
+
current_location(Jabber::UserLocation::Location.new())
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Add a callback that will be invoked when a location is received
|
45
|
+
# from the jid specified when you constructed the Helper.
|
46
|
+
def add_userlocation_callback(prio = 200, ref = nil, &block)
|
47
|
+
add_event_callback(prio, ref) do |event|
|
48
|
+
location = event.first_element('items/item/location')
|
49
|
+
if location
|
50
|
+
block.call(location)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
# =XMPP4R - XMPP Library for Ruby
|
2
|
+
# License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
|
3
|
+
# Website::http://home.gna.org/xmpp4r/
|
4
|
+
|
5
|
+
require 'time'
|
6
|
+
require 'xmpp4r/xmppelement'
|
7
|
+
require 'rexml/element'
|
8
|
+
|
9
|
+
module Jabber
|
10
|
+
module UserLocation
|
11
|
+
NS_USERLOCATION = 'http://jabber.org/protocol/geoloc'
|
12
|
+
ALLOWABLE_ATTRIBUTES = %w(accuracy alt area bearing building country
|
13
|
+
datum description floor lat locality lon postalcode region room
|
14
|
+
speed street text timestamp uri)
|
15
|
+
|
16
|
+
##
|
17
|
+
# The <geoloc> XMPP element, as defined in XEP-0080 User Location
|
18
|
+
#
|
19
|
+
# See http://xmpp.org/extensions/xep-0080.html - this element
|
20
|
+
# encapsulates data about a user's current location. These are
|
21
|
+
# expressed as child elements such as <locality>, <lat>, etc.
|
22
|
+
# which are also managed by this class.
|
23
|
+
#
|
24
|
+
# If the element has no children then it indicates that the user
|
25
|
+
# has stopped publishing their location.
|
26
|
+
class Location < XMPPElement
|
27
|
+
name_xmlns 'geoloc', NS_USERLOCATION
|
28
|
+
force_xmlns true
|
29
|
+
|
30
|
+
##
|
31
|
+
# Construct a new <location> element.
|
32
|
+
#
|
33
|
+
# Supply no arguments to make an empty element to indicate that
|
34
|
+
# location is no longer being published.
|
35
|
+
#
|
36
|
+
# attributes:: [Hash] location attributes
|
37
|
+
def initialize(attributes = {})
|
38
|
+
super()
|
39
|
+
|
40
|
+
# validate attributes
|
41
|
+
attributes = attributes.select do |k,v|
|
42
|
+
ALLOWABLE_ATTRIBUTES.include?(k) && !v.nil?
|
43
|
+
end
|
44
|
+
|
45
|
+
attributes.each do |k,v|
|
46
|
+
v = x.xmlschema if v.is_a?(Time)
|
47
|
+
add_element(REXML::Element.new(k)).text = v.to_s
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
##
|
53
|
+
# Returns true if a location is currently being published, otherwise false.
|
54
|
+
def published?
|
55
|
+
(elements.size > 0)
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Get the accuracy attribute of this location.
|
60
|
+
def accuracy
|
61
|
+
first_element('accuracy').text if first_element('accuracy')
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# Get the alt attribute of this location.
|
66
|
+
def alt
|
67
|
+
first_element('alt').text if first_element('alt')
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Get the area attribute of this location.
|
72
|
+
def area
|
73
|
+
first_element('area').text if first_element('area')
|
74
|
+
end
|
75
|
+
|
76
|
+
##
|
77
|
+
# Get the bearing attribute of this location.
|
78
|
+
def bearing
|
79
|
+
first_element('bearing').text if first_element('bearing')
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# Get the building attribute of this location.
|
84
|
+
def building
|
85
|
+
first_element('building').text if first_element('building')
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Get the country attribute of this location.
|
90
|
+
def country
|
91
|
+
first_element('country').text if first_element('country')
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# Get the datum attribute of this location.
|
96
|
+
def datum
|
97
|
+
first_element('datum').text if first_element('datum')
|
98
|
+
end
|
99
|
+
|
100
|
+
##
|
101
|
+
# Get the description attribute of this location.
|
102
|
+
def description
|
103
|
+
first_element('description').text if first_element('description')
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# Get the floor attribute of this location.
|
108
|
+
def floor
|
109
|
+
first_element('floor').text if first_element('floor')
|
110
|
+
end
|
111
|
+
|
112
|
+
##
|
113
|
+
# Get the lat attribute of this location.
|
114
|
+
def lat
|
115
|
+
first_element('lat').text if first_element('lat')
|
116
|
+
end
|
117
|
+
|
118
|
+
##
|
119
|
+
# Get the locality attribute of this location.
|
120
|
+
def locality
|
121
|
+
first_element('locality').text if first_element('locality')
|
122
|
+
end
|
123
|
+
|
124
|
+
##
|
125
|
+
# Get the lon attribute of this location.
|
126
|
+
def lon
|
127
|
+
first_element('lon').text if first_element('lon')
|
128
|
+
end
|
129
|
+
|
130
|
+
##
|
131
|
+
# Get the postalcode attribute of this location.
|
132
|
+
def postalcode
|
133
|
+
first_element('postalcode').text if first_element('postalcode')
|
134
|
+
end
|
135
|
+
|
136
|
+
##
|
137
|
+
# Get the region attribute of this location.
|
138
|
+
def region
|
139
|
+
first_element('region').text if first_element('region')
|
140
|
+
end
|
141
|
+
|
142
|
+
##
|
143
|
+
# Get the room attribute of this location.
|
144
|
+
def room
|
145
|
+
first_element('room').text if first_element('room')
|
146
|
+
end
|
147
|
+
|
148
|
+
##
|
149
|
+
# Get the speed attribute of this location.
|
150
|
+
def speed
|
151
|
+
first_element('speed').text if first_element('speed')
|
152
|
+
end
|
153
|
+
|
154
|
+
##
|
155
|
+
# Get the street attribute of this location.
|
156
|
+
def street
|
157
|
+
first_element('street').text if first_element('street')
|
158
|
+
end
|
159
|
+
|
160
|
+
##
|
161
|
+
# Get the text attribute of this location.
|
162
|
+
def text
|
163
|
+
first_element('text').text if first_element('text')
|
164
|
+
end
|
165
|
+
|
166
|
+
##
|
167
|
+
# Get the timestamp attribute of this location.
|
168
|
+
def timestamp
|
169
|
+
first_element('timestamp').text if first_element('timestamp')
|
170
|
+
end
|
171
|
+
|
172
|
+
##
|
173
|
+
# Get the uri attribute of this location.
|
174
|
+
def uri
|
175
|
+
first_element('uri').text if first_element('uri')
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
data/switchboard.gemspec
CHANGED
@@ -1,17 +1,15 @@
|
|
1
|
+
# this file is automatically generated
|
1
2
|
Gem::Specification.new do |s|
|
2
3
|
s.name = "switchboard"
|
3
|
-
s.version = "0.0.
|
4
|
+
s.version = "0.0.7"
|
4
5
|
s.summary = "XMPP toolkit."
|
5
6
|
s.description = "A toolkit for assembling XMPP clients and interacting with XMPP servers."
|
6
7
|
s.authors = ["Seth Fitzsimmons"]
|
7
8
|
s.email = ["seth@mojodna.net"]
|
8
9
|
|
9
|
-
s.files = ["bin/switchboard", "examples/election_results.rb", "lib/switchboard/client.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/pep/pep.rb", "lib/switchboard/commands/pep/tune.rb", "lib/switchboard/commands/pep.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
|
+
s.files = ["bin/switchboard", "examples/election_results.rb", "lib/switchboard/client.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/pep/location.rb", "lib/switchboard/commands/pep/pep.rb", "lib/switchboard/commands/pep/tune.rb", "lib/switchboard/commands/pep.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/component.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/location/helper/helper.rb", "lib/switchboard/xmpp4r/location/location.rb", "lib/switchboard/xmpp4r/location.rb", "lib/switchboard/xmpp4r/pubsub/helper/oauth_service_helper.rb", "lib/switchboard.rb", "Rakefile", "README.markdown", "switchboard.gemspec"]
|
10
11
|
s.executables = ["switchboard"]
|
11
12
|
s.require_paths = ["lib"]
|
12
13
|
|
13
14
|
s.add_dependency("xmpp4r")
|
14
|
-
s.add_dependency("oauth")
|
15
|
-
s.add_dependency("rb-appscript")
|
16
|
-
|
17
15
|
end
|
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.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seth Fitzsimmons
|
@@ -21,24 +21,6 @@ dependencies:
|
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: "0"
|
23
23
|
version:
|
24
|
-
- !ruby/object:Gem::Dependency
|
25
|
-
name: oauth
|
26
|
-
version_requirement:
|
27
|
-
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
requirements:
|
29
|
-
- - ">="
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
version: "0"
|
32
|
-
version:
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: rb-appscript
|
35
|
-
version_requirement:
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: "0"
|
41
|
-
version:
|
42
24
|
description: A toolkit for assembling XMPP clients and interacting with XMPP servers.
|
43
25
|
email:
|
44
26
|
- seth@mojodna.net
|
@@ -59,6 +41,7 @@ files:
|
|
59
41
|
- lib/switchboard/commands/default.rb
|
60
42
|
- lib/switchboard/commands/help/help.rb
|
61
43
|
- lib/switchboard/commands/help.rb
|
44
|
+
- lib/switchboard/commands/pep/location.rb
|
62
45
|
- lib/switchboard/commands/pep/pep.rb
|
63
46
|
- lib/switchboard/commands/pep/tune.rb
|
64
47
|
- lib/switchboard/commands/pep.rb
|
@@ -86,6 +69,7 @@ files:
|
|
86
69
|
- lib/switchboard/commands/roster.rb
|
87
70
|
- lib/switchboard/commands/unregister.rb
|
88
71
|
- lib/switchboard/commands.rb
|
72
|
+
- lib/switchboard/component.rb
|
89
73
|
- lib/switchboard/core.rb
|
90
74
|
- lib/switchboard/ext/delegate.rb
|
91
75
|
- lib/switchboard/ext/instance_exec.rb
|
@@ -102,6 +86,9 @@ files:
|
|
102
86
|
- lib/switchboard/settings.rb
|
103
87
|
- lib/switchboard/switchboard.rb
|
104
88
|
- lib/switchboard/version.rb
|
89
|
+
- lib/switchboard/xmpp4r/location/helper/helper.rb
|
90
|
+
- lib/switchboard/xmpp4r/location/location.rb
|
91
|
+
- lib/switchboard/xmpp4r/location.rb
|
105
92
|
- lib/switchboard/xmpp4r/pubsub/helper/oauth_service_helper.rb
|
106
93
|
- lib/switchboard.rb
|
107
94
|
- Rakefile
|