mojodna-fire-hydrant 0.0.1

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 ADDED
@@ -0,0 +1,82 @@
1
+ # Fire Hydrant
2
+
3
+ Fire Hydrant is a set of tools for consuming [Fire
4
+ Eagle](http://fireeagle.yahoo.net/ "Fire Eagle")'s XMPP
5
+ [PubSub](http://xmpp.org/extensions/xep-0060.html "XEP-0060: Publish-Subscribe") feed.
6
+
7
+ ## Getting Started
8
+
9
+ Install it:
10
+
11
+ $ sudo gem install mojodna-fire-hydrant-s http://gems.github.com
12
+
13
+ Configure it:
14
+
15
+ $ cp fire_hydrant.yml.sample fire_hydrant.yml
16
+ $ vi fire_hydrant.yml
17
+
18
+ _Switchboard settings are not presently used._
19
+
20
+ Configure switchboard:
21
+
22
+ $ switchboard config jid jid@example.com
23
+ $ switchboard config password pa55word
24
+ $ switchboard config oauth.consumer_key asdf
25
+ $ switchboard config oauth.consumer_secret qwerty
26
+ $ switchboard config oauth.token asdf
27
+ $ switchboard config oauth.token_secret qwerty
28
+ $ switchboard config oauth.general_token asdf
29
+ $ switchboard config oauth.general_token_secret qwerty
30
+ $ switchboard config pubsub.server fireeagle.com
31
+
32
+ Subscribe to location updates corresponding to the configured token:
33
+
34
+ $ switchboard pubsub subscribe
35
+
36
+ Check subscriptions:
37
+
38
+ $ switchboard pubsub subscriptions
39
+
40
+ Run it:
41
+
42
+ $ examples/fire_eagle_consumer.rb
43
+
44
+ If you'd like to unsubscribe:
45
+
46
+ $ switchboard pubsub unsubscribe
47
+
48
+ ## Notes and Gotchas
49
+
50
+ Subscribing to / unsubscribing from nodes is an awkward process at the moment,
51
+ as switchboard must be re-configured with each OAuth token/secret pair that
52
+ you wish to subscribe to.
53
+
54
+ If you need to authorize your application to receive updates, you can add your
55
+ OAuth consumer key to _fire\_hydrant.yml_ and run:
56
+
57
+ $ examples/authorize.rb
58
+
59
+ You can then add the token and secret to your switchboard configuration in
60
+ order to subscribe.
61
+
62
+ Google Talk accounts do not appear to work, but Jabber.org accounts seem to
63
+ work fine. (If you plan to use this in production, you should be running your
64
+ own XMPP server and should **not** use Jabber.org.)
65
+
66
+ ## Getting Help
67
+
68
+ Your best bet for help is to post a message to the Fire Eagle Yahoo! Group:
69
+ [http://tech.groups.yahoo.com/group/fireeagle/](http://tech.groups.yahoo.com/group/fireeagle/ "Fire Eagle Yahoo! Group")
70
+
71
+ ## Google Earth Integration
72
+
73
+ If you're on a Mac, install [Google Earth](http://earth.google.com/ "Google Earth") and
74
+ [rb-appscript](http://appscript.sourceforge.net/rb-appscript/index.html "Ruby Appscript"):
75
+
76
+ $ sudo gem install rb-appscript
77
+
78
+ Start Google Earth and run:
79
+
80
+ $ examples/fire_eagle_visualizer.rb
81
+
82
+ To see your users' locations in real-time as they change.
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'yaml'
4
+ require 'rubygems'
5
+ # work-around for a bug in oauth 0.2.4
6
+ require 'oauth/helper'
7
+ require 'fireeagle'
8
+
9
+ # read the configuration
10
+ config = YAML.load(open("fire_hydrant.yml").read)
11
+
12
+ if config.has_key?("oauth.token") && config.has_key?("oauth.token_secret")
13
+ puts "Application has already been authorized."
14
+ exit
15
+ end
16
+
17
+ # initialize a Fire Eagle client
18
+ client = FireEagle::Client.new \
19
+ :consumer_key => config["oauth.consumer_key"],
20
+ :consumer_secret => config["oauth.consumer_secret"]
21
+
22
+ ## Step 1 - Get a request token
23
+
24
+ client.get_request_token
25
+
26
+ ## Step 2 - Ask the user to authorize the application, using that request token
27
+
28
+ puts "Please authorize this application:"
29
+ puts " #{client.authorization_url}"
30
+ print "<waiting>"
31
+ gets
32
+
33
+ ## Step 3 - Convert the request token into an access token
34
+
35
+ client.convert_to_access_token
36
+
37
+ puts "Your OAuth token is: #{client.access_token.token}"
38
+ puts "Your OAuth token secret is: #{client.access_token.secret}"
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ require 'fire_hydrant'
3
+ require 'yaml'
4
+
5
+ hydrant = FireHydrant.new(YAML.load(File.read("fire_hydrant.yml")))
6
+
7
+ hydrant.on_location_update do |user|
8
+ # for some reason the Fire Eagle gem doesn't work when I access #name directly
9
+ name = user.locations[0].instance_eval { @doc.at("//name").innerText }
10
+ puts "#{user.token} has moved to #{name}."
11
+ end
12
+
13
+ hydrant.run!
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ begin
4
+ require 'appscript'
5
+ rescue LoadError => e
6
+ gem = e.message.split("--").last.strip
7
+ puts "The #{gem} gem is required."
8
+ end
9
+
10
+ require 'fire_hydrant'
11
+
12
+ earth = Appscript.app("Google Earth")
13
+
14
+ # override the resource as "visualizer"
15
+ hydrant = FireHydrant.new(YAML.load(File.read("fire_hydrant.yml")).merge("resource" => "visualizer"), true)
16
+
17
+ hydrant.on_location_update do |user|
18
+ # for some reason the Fire Eagle gem doesn't work when I access #name directly
19
+ name = user.locations[0].instance_eval { @doc.at("//name").innerText }
20
+ puts "#{user.token} has moved to #{name}."
21
+
22
+ geom = user.locations[0].geom
23
+ begin
24
+ pt = geom.is_a?(GeoRuby::SimpleFeatures::Envelope) ? geom.center : geom
25
+ earth.SetViewInfo({:latitude => pt.y, :longitude => pt.x, :distance => (rand * 25000) + 5000, :azimuth => rand * 360, :tilt => (rand * 75)}, {:speed => 1})
26
+ rescue # rescue from Appscript errrors
27
+ end
28
+
29
+ hydrant.run!
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "fire-hydrant"
3
+ s.version = "0.0.1"
4
+ s.summary = "Fire Eagle XMPP PubSub tools"
5
+ s.description = "Tools for consuming Fire Eagle's XMPP PubSub feed."
6
+ s.authors = ["Seth Fitzsimmons"]
7
+ s.email = ["seth@mojodna.net"]
8
+
9
+ s.files = ["examples", "examples/authorize.rb", "examples/fire_eagle_consumer.rb", "examples/fire_eagle_visualizer.rb", "fire-hydrant.gemspec", "fire_hydrant.yml", "fire_hydrant.yml.development", "fire_hydrant.yml.production", "fire_hydrant.yml.sample", "lib", "lib/fire_hydrant", "lib/fire_hydrant/fire_hydrant.rb", "lib/fire_hydrant/jacks", "lib/fire_hydrant/jacks/fire_eagle_jack.rb", "lib/fire_hydrant/jacks.rb", "lib/fire_hydrant.rb", "README.markdown"]
10
+ s.require_paths = ["lib"]
11
+
12
+ s.add_dependency("fireeagle")
13
+ s.add_dependency("mojodna-switchboard")
14
+ end
@@ -0,0 +1,7 @@
1
+ jid: client@xmpp-server
2
+ password: password
3
+ pubsub.server: fireeagle.com
4
+
5
+ # for authorization
6
+ oauth.consumer_key: asdf
7
+ oauth.consumer_secret: qwerty
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ begin
3
+ require 'fireeagle'
4
+ require 'switchboard'
5
+ rescue LoadError => e
6
+ gem = e.message.split("--").last.strip
7
+ puts "The #{gem} gem is required."
8
+ end
9
+
10
+ class FireHydrant < Switchboard::Core
11
+ DEFAULTS = {
12
+ "resource" => "fire_hydrant"
13
+ }
14
+
15
+ def initialize(settings = {})
16
+ super(DEFAULTS.merge(settings), true)
17
+ plug!(FireEagleJack)
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ class FireEagleJack
2
+ def self.connect(switchboard, settings)
3
+ switchboard.plug!(AutoAcceptJack, NotifyJack, PubSubJack)
4
+
5
+ switchboard.on_pubsub_event do |event|
6
+ event.payload.each do |payload|
7
+ payload.elements.each do |item|
8
+ rsp = item.first_element("rsp")
9
+ response = FireEagle::Response.new(rsp.to_s)
10
+ user = response.users[0]
11
+ on(:location_update, user)
12
+ end
13
+ end
14
+ end
15
+
16
+ def switchboard.on_location_update(&block)
17
+ register_hook(:location_update, &block)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ require 'fire_hydrant/jacks/fire_eagle_jack'
@@ -0,0 +1,2 @@
1
+ require 'fire_hydrant/fire_hydrant'
2
+ require 'fire_hydrant/jacks'
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mojodna-fire-hydrant
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Seth Fitzsimmons
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-10-27 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: fireeagle
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: mojodna-switchboard
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: "0"
32
+ version:
33
+ description: Tools for consuming Fire Eagle's XMPP PubSub feed.
34
+ email:
35
+ - seth@mojodna.net
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files: []
41
+
42
+ files:
43
+ - examples
44
+ - examples/authorize.rb
45
+ - examples/fire_eagle_consumer.rb
46
+ - examples/fire_eagle_visualizer.rb
47
+ - fire-hydrant.gemspec
48
+ - fire_hydrant.yml
49
+ - fire_hydrant.yml.development
50
+ - fire_hydrant.yml.production
51
+ - fire_hydrant.yml.sample
52
+ - lib
53
+ - lib/fire_hydrant
54
+ - lib/fire_hydrant/fire_hydrant.rb
55
+ - lib/fire_hydrant/jacks
56
+ - lib/fire_hydrant/jacks/fire_eagle_jack.rb
57
+ - lib/fire_hydrant/jacks.rb
58
+ - lib/fire_hydrant.rb
59
+ - README.markdown
60
+ has_rdoc: false
61
+ homepage:
62
+ post_install_message:
63
+ rdoc_options: []
64
+
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ version:
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ version:
79
+ requirements: []
80
+
81
+ rubyforge_project:
82
+ rubygems_version: 1.2.0
83
+ signing_key:
84
+ specification_version: 2
85
+ summary: Fire Eagle XMPP PubSub tools
86
+ test_files: []
87
+