mojodna-fireeagle 0.8.0.0 → 0.8.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/Manifest.txt +14 -1
- data/config/hoe.rb +1 -1
- data/lib/fireeagle.rb +11 -11
- data/lib/fireeagle/client.rb +5 -5
- data/lib/fireeagle/error.rb +9 -0
- data/lib/fireeagle/location.rb +38 -68
- data/lib/fireeagle/location_hierarchy.rb +10 -0
- data/lib/fireeagle/locations.rb +36 -0
- data/lib/fireeagle/response.rb +21 -19
- data/lib/fireeagle/user.rb +9 -26
- data/lib/fireeagle/version.rb +1 -1
- data/spec/fireeagle_response_spec.rb +4 -4
- data/spec/fireeagle_spec.rb +0 -4
- data/spec/{fireeagle_location_spec.rb → location_spec.rb} +29 -17
- data/spec/locations_spec.rb +43 -0
- data/spec/responses/error.xml +4 -0
- data/spec/responses/exact_location_chunk.xml +3 -0
- data/spec/responses/location_chunk.xml +11 -0
- data/spec/responses/location_chunk_with_query.xml +9 -0
- data/spec/responses/locations_chunk.xml +38 -0
- data/spec/responses/lookup.xml +42 -0
- data/spec/responses/recent.xml +8 -0
- data/spec/responses/user.xml +40 -0
- data/spec/responses/within.xml +7 -0
- data/spec/spec_helper.rb +14 -258
- metadata +28 -6
data/Manifest.txt
CHANGED
|
@@ -7,14 +7,27 @@ README.txt
|
|
|
7
7
|
Rakefile
|
|
8
8
|
lib/fireeagle.rb
|
|
9
9
|
lib/fireeagle/client.rb
|
|
10
|
+
lib/fireeagle/error.rb
|
|
10
11
|
lib/fireeagle/location.rb
|
|
12
|
+
lib/fireeagle/location_hierarchy.rb
|
|
13
|
+
lib/fireeagle/locations.rb
|
|
11
14
|
lib/fireeagle/response.rb
|
|
12
15
|
lib/fireeagle/user.rb
|
|
13
16
|
lib/fireeagle/version.rb
|
|
14
17
|
setup.rb
|
|
15
|
-
spec/fireeagle_location_spec.rb
|
|
16
18
|
spec/fireeagle_response_spec.rb
|
|
17
19
|
spec/fireeagle_spec.rb
|
|
20
|
+
spec/location_spec.rb
|
|
21
|
+
spec/locations_spec.rb
|
|
22
|
+
spec/responses/error.xml
|
|
23
|
+
spec/responses/exact_location_chunk.xml
|
|
24
|
+
spec/responses/location_chunk.xml
|
|
25
|
+
spec/responses/location_chunk_with_query.xml
|
|
26
|
+
spec/responses/locations_chunk.xml
|
|
27
|
+
spec/responses/lookup.xml
|
|
28
|
+
spec/responses/recent.xml
|
|
29
|
+
spec/responses/user.xml
|
|
30
|
+
spec/responses/within.xml
|
|
18
31
|
spec/spec.opts
|
|
19
32
|
spec/spec_helper.rb
|
|
20
33
|
tasks/environment.rake
|
data/config/hoe.rb
CHANGED
|
@@ -58,7 +58,7 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
|
|
58
58
|
|
|
59
59
|
# == Optional
|
|
60
60
|
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
|
61
|
-
p.extra_deps = [ ['oauth', '>= 0.
|
|
61
|
+
p.extra_deps = [ ['oauth', '>= 0.3.1'], ['happymapper', '>= 0.2.1'], ['GeoRuby', '>= 1.3.2'] ] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
|
|
62
62
|
|
|
63
63
|
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
|
64
64
|
|
data/lib/fireeagle.rb
CHANGED
|
@@ -5,8 +5,16 @@ gem 'oauth', ">= 0.2.4"
|
|
|
5
5
|
require 'oauth/helper'
|
|
6
6
|
require 'oauth/client/helper'
|
|
7
7
|
require 'oauth/request_proxy/net_http'
|
|
8
|
-
require 'hpricot'
|
|
9
8
|
require 'geo_ruby'
|
|
9
|
+
require 'happymapper'
|
|
10
|
+
|
|
11
|
+
require File.dirname(__FILE__) + '/fireeagle/client'
|
|
12
|
+
require File.dirname(__FILE__) + '/fireeagle/location'
|
|
13
|
+
require File.dirname(__FILE__) + '/fireeagle/locations'
|
|
14
|
+
require File.dirname(__FILE__) + '/fireeagle/location_hierarchy'
|
|
15
|
+
require File.dirname(__FILE__) + '/fireeagle/user'
|
|
16
|
+
require File.dirname(__FILE__) + '/fireeagle/error'
|
|
17
|
+
require File.dirname(__FILE__) + '/fireeagle/response'
|
|
10
18
|
|
|
11
19
|
module FireEagle
|
|
12
20
|
API_SERVER = "https://fireeagle.yahooapis.com"
|
|
@@ -25,13 +33,10 @@ module FireEagle
|
|
|
25
33
|
# not yet supported
|
|
26
34
|
#,:geom, :upcoming_venue_id, :yahoo_local_id, :plazes_id
|
|
27
35
|
|
|
28
|
-
class
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
class ArgumentError < Error #:nodoc:
|
|
36
|
+
class ArgumentError < StandardError #:nodoc:
|
|
32
37
|
end
|
|
33
38
|
|
|
34
|
-
class FireEagleException <
|
|
39
|
+
class FireEagleException < StandardError #:nodoc:
|
|
35
40
|
end
|
|
36
41
|
end
|
|
37
42
|
|
|
@@ -59,8 +64,3 @@ class OAuth::Consumer
|
|
|
59
64
|
end
|
|
60
65
|
alias_method :create_http, :create_http_without_verify
|
|
61
66
|
end
|
|
62
|
-
|
|
63
|
-
require File.dirname(__FILE__) + '/fireeagle/client'
|
|
64
|
-
require File.dirname(__FILE__) + '/fireeagle/location'
|
|
65
|
-
require File.dirname(__FILE__) + '/fireeagle/user'
|
|
66
|
-
require File.dirname(__FILE__) + '/fireeagle/response'
|
data/lib/fireeagle/client.rb
CHANGED
|
@@ -155,7 +155,7 @@ module FireEagle
|
|
|
155
155
|
def lookup(params)
|
|
156
156
|
raise FireEagle::ArgumentError, "OAuth Access Token Required" unless @access_token
|
|
157
157
|
response = get(FireEagle::LOOKUP_API_PATH, :params => params)
|
|
158
|
-
FireEagle::Response.
|
|
158
|
+
FireEagle::Response.parse(response.body).locations
|
|
159
159
|
end
|
|
160
160
|
|
|
161
161
|
# Sets a User's current Location using using a Place ID hash or a set of Location parameters. If the User
|
|
@@ -187,14 +187,14 @@ module FireEagle
|
|
|
187
187
|
raise FireEagle::ArgumentError, "OAuth Access Token Required" unless @access_token
|
|
188
188
|
location = sanitize_location_hash(location)
|
|
189
189
|
response = post(FireEagle::UPDATE_API_PATH, :params => location)
|
|
190
|
-
FireEagle::Response.
|
|
190
|
+
FireEagle::Response.parse(response.body)
|
|
191
191
|
end
|
|
192
192
|
|
|
193
193
|
# Returns the Location of a User.
|
|
194
194
|
def user
|
|
195
195
|
raise FireEagle::ArgumentError, "OAuth Access Token Required" unless @access_token
|
|
196
196
|
response = get(FireEagle::USER_API_PATH)
|
|
197
|
-
FireEagle::Response.
|
|
197
|
+
FireEagle::Response.parse(response.body).users.first
|
|
198
198
|
end
|
|
199
199
|
alias_method :location, :user
|
|
200
200
|
|
|
@@ -210,7 +210,7 @@ module FireEagle
|
|
|
210
210
|
raise FireEagle::ArgumentError, "OAuth Access Token Required" unless @access_token
|
|
211
211
|
params = { :count => count, :start => start, :time => time }
|
|
212
212
|
response = get(FireEagle::RECENT_API_PATH, :params => params)
|
|
213
|
-
FireEagle::Response.
|
|
213
|
+
FireEagle::Response.parse(response.body).users
|
|
214
214
|
end
|
|
215
215
|
|
|
216
216
|
# Takes a Place ID or a Location and returns a list of users of your application who are within the bounding box of that Location.
|
|
@@ -238,7 +238,7 @@ module FireEagle
|
|
|
238
238
|
location = sanitize_location_hash(location)
|
|
239
239
|
params = { :count => count, :start => start }.merge(location)
|
|
240
240
|
response = get(FireEagle::WITHIN_API_PATH, :params => params)
|
|
241
|
-
FireEagle::Response.
|
|
241
|
+
FireEagle::Response.parse(response.body).users
|
|
242
242
|
end
|
|
243
243
|
|
|
244
244
|
protected
|
data/lib/fireeagle/location.rb
CHANGED
|
@@ -1,85 +1,55 @@
|
|
|
1
|
-
#Describes a location
|
|
2
1
|
module FireEagle
|
|
3
|
-
class
|
|
4
|
-
|
|
5
|
-
#Initialize a Location from an XML response
|
|
6
|
-
def initialize(doc)
|
|
7
|
-
doc = Hpricot(doc) unless doc.is_a?(Hpricot::Doc || Hpricot::Elem)
|
|
8
|
-
@doc = doc
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def label
|
|
12
|
-
@label ||= @doc.at("/location/label").innerText rescue nil
|
|
13
|
-
end
|
|
2
|
+
class StringWithExactMatch < String
|
|
3
|
+
attr_writer :exact_match
|
|
14
4
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
#Name of the level of granularity for this Location
|
|
21
|
-
def level_name
|
|
22
|
-
@level_name ||= @doc.at("/location/level-name").innerText rescue nil
|
|
23
|
-
end
|
|
5
|
+
def initialize(value = "")
|
|
6
|
+
node = XML::Parser.string(value).parse.root
|
|
7
|
+
str = super(node.content)
|
|
8
|
+
str.exact_match = node.attributes.to_h["exact-match"] == "true"
|
|
9
|
+
node = nil
|
|
24
10
|
|
|
25
|
-
|
|
26
|
-
def name
|
|
27
|
-
@name ||= @doc.at("/location/name").innerText rescue nil
|
|
11
|
+
str
|
|
28
12
|
end
|
|
29
|
-
alias_method :to_s, :name
|
|
30
13
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
@place_id ||= @doc.at("/location/place-id").innerText rescue nil
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
#Numeric unique identifier for this place.
|
|
37
|
-
def woeid
|
|
38
|
-
@woeid ||= @doc.at("/location/woeid").innerText rescue nil
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
#The Time at which the User last updated in this Location
|
|
42
|
-
def located_at
|
|
43
|
-
@located_at ||= Time.parse(@doc.at("/location/located-at").innerText) rescue nil
|
|
14
|
+
def exact_match?
|
|
15
|
+
@exact_match
|
|
44
16
|
end
|
|
17
|
+
end
|
|
45
18
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
19
|
+
# Represents a location
|
|
20
|
+
class Location
|
|
21
|
+
include HappyMapper
|
|
22
|
+
|
|
23
|
+
tag "location"
|
|
24
|
+
attribute :best_guess, Boolean, :tag => "best-guess"
|
|
25
|
+
element :label, String
|
|
26
|
+
element :level, Integer
|
|
27
|
+
element :level_name, String, :tag => "level-name"
|
|
28
|
+
element :located_at, Time, :tag => "located-at"
|
|
29
|
+
element :name, String
|
|
30
|
+
element :normal_name, String, :tag => "normal-name"
|
|
31
|
+
element :place_id, StringWithExactMatch, :tag => "place-id", :parser => :new, :raw => true
|
|
32
|
+
element :query, String
|
|
33
|
+
element :woeid, StringWithExactMatch, :parser => :new, :raw => true
|
|
34
|
+
|
|
35
|
+
element :_box, GeoRuby::SimpleFeatures::Geometry, :tag => "box",
|
|
36
|
+
:namespace => "georss", :parser => :from_georss, :raw => true
|
|
37
|
+
element :_point, GeoRuby::SimpleFeatures::Geometry, :tag => "point",
|
|
38
|
+
:namespace => "georss", :parser => :from_georss, :raw => true
|
|
51
39
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
# comes to intersections etc.
|
|
55
|
-
#
|
|
56
|
-
# Turns something like this:
|
|
57
|
-
#
|
|
58
|
-
# <query> "q=333%20W%20Harbor%20Dr,%20San%20Diego,%20CA" </query>
|
|
59
|
-
#
|
|
60
|
-
# into
|
|
61
|
-
#
|
|
62
|
-
# 333 W Harbor Dr, San Diego, CA
|
|
63
|
-
def query
|
|
64
|
-
@query ||= CGI::unescape((@doc.at("/location/query").innerText).gsub('"', '').split('=')[1]).strip rescue nil
|
|
40
|
+
def best_guess?
|
|
41
|
+
best_guess == true
|
|
65
42
|
end
|
|
66
43
|
|
|
67
44
|
# The GeoRuby[http://georuby.rubyforge.org/] representation of this location
|
|
68
45
|
def geom
|
|
69
|
-
|
|
70
|
-
@geo ||= GeoRuby::SimpleFeatures::Geometry.from_georss(@doc.at("/location//georss:box").to_s)
|
|
71
|
-
elsif @doc.at("/location//georss:point")
|
|
72
|
-
@geo ||= GeoRuby::SimpleFeatures::Geometry.from_georss(@doc.at("/location//georss:point").to_s)
|
|
73
|
-
else
|
|
74
|
-
return nil
|
|
75
|
-
end
|
|
46
|
+
_point || _box
|
|
76
47
|
end
|
|
48
|
+
|
|
77
49
|
alias_method :geo, :geom
|
|
78
|
-
|
|
79
|
-
#Is this Location FireEagle's best guess?
|
|
80
|
-
def best_guess?
|
|
81
|
-
@best_guess ||= @doc.at("/location").attributes["best-guess"] == "true" rescue false
|
|
82
|
-
end
|
|
83
50
|
|
|
51
|
+
def to_s
|
|
52
|
+
name
|
|
53
|
+
end
|
|
84
54
|
end
|
|
85
55
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module FireEagle
|
|
2
|
+
class Locations
|
|
3
|
+
include Enumerable
|
|
4
|
+
include HappyMapper
|
|
5
|
+
|
|
6
|
+
tag "locations"
|
|
7
|
+
attribute :count, Integer
|
|
8
|
+
attribute :start, Integer
|
|
9
|
+
attribute :total, Integer
|
|
10
|
+
has_many :locations, Location, :single => false
|
|
11
|
+
|
|
12
|
+
def [](*args)
|
|
13
|
+
locations[*args]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
alias_method :slice, :[]
|
|
17
|
+
|
|
18
|
+
def each(&block)
|
|
19
|
+
locations.each(&block)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def first
|
|
23
|
+
locations.first
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def last
|
|
27
|
+
locations.last
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def length
|
|
31
|
+
locations.length
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
alias_method :size, :length
|
|
35
|
+
end
|
|
36
|
+
end
|
data/lib/fireeagle/response.rb
CHANGED
|
@@ -1,31 +1,33 @@
|
|
|
1
1
|
module FireEagle
|
|
2
2
|
class Response
|
|
3
|
+
include HappyMapper
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
tag "rsp"
|
|
6
|
+
attribute :status, String, :tag => "stat"
|
|
7
|
+
element :querystring, String
|
|
8
|
+
has_one :error, Error
|
|
9
|
+
has_one :locations, Locations
|
|
10
|
+
has_many :users, User
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
def self.parse(xml, opts = {})
|
|
13
|
+
rsp = super(xml, opts)
|
|
14
|
+
|
|
15
|
+
raise FireEagleException, rsp.error.message if rsp.fail?
|
|
16
|
+
|
|
17
|
+
rsp
|
|
14
18
|
end
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@users ||= @doc.search("/rsp//user").map do |user|
|
|
19
|
-
FireEagle::User.new(user.to_s)
|
|
20
|
-
end
|
|
20
|
+
def fail?
|
|
21
|
+
status == "fail"
|
|
21
22
|
end
|
|
22
23
|
|
|
23
|
-
#
|
|
24
|
-
def
|
|
25
|
-
|
|
26
|
-
FireEagle::Location.new(location.to_s)
|
|
27
|
-
end
|
|
24
|
+
# does the response indicate success?
|
|
25
|
+
def success?
|
|
26
|
+
status == "ok"
|
|
28
27
|
end
|
|
29
28
|
|
|
29
|
+
def user
|
|
30
|
+
users[0]
|
|
31
|
+
end
|
|
30
32
|
end
|
|
31
33
|
end
|
data/lib/fireeagle/user.rb
CHANGED
|
@@ -1,37 +1,20 @@
|
|
|
1
1
|
module FireEagle
|
|
2
2
|
class User
|
|
3
|
-
|
|
4
|
-
def initialize(doc)
|
|
5
|
-
doc = Hpricot(doc) unless doc.is_a?(Hpricot::Doc || Hpricot::Elem)
|
|
6
|
-
@doc = doc
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
#The User-specific token for this Client.
|
|
10
|
-
def token
|
|
11
|
-
@token ||= @doc.at("/user").attributes["token"] rescue nil
|
|
12
|
-
end
|
|
3
|
+
include HappyMapper
|
|
13
4
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
5
|
+
tag "user"
|
|
6
|
+
attribute :located_at, Time, :tag => "located-at"
|
|
7
|
+
attribute :readable, Boolean
|
|
8
|
+
attribute :token, String
|
|
9
|
+
attribute :writable, Boolean
|
|
10
|
+
has_one :location_hierarchy, LocationHierarchy, :tag => "location-hierarchy"
|
|
18
11
|
|
|
19
|
-
#FireEagle's "best guess" form this User's Location. This best guess is derived as the most accurate
|
|
20
|
-
#level of the hierarchy with a timestamp in the last half an hour <b>or</b> as the most accurate
|
|
21
|
-
#level of the hierarchy with the most recent timestamp.
|
|
22
12
|
def best_guess
|
|
23
|
-
@best_guess ||= locations.select { |
|
|
13
|
+
@best_guess ||= locations.select { |loc| loc.best_guess? }.first
|
|
24
14
|
end
|
|
25
15
|
|
|
26
|
-
#An Array containing all Location granularity that the Client has been allowed to
|
|
27
|
-
#see for the User. The Location elements returned are arranged in hierarchy order consisting of:
|
|
28
|
-
#Country, State, County, Large Cities, Neighbourhoods/Local Area, Postal Code and exact location.
|
|
29
|
-
#The Application should therefore be prepared to receive a response that may consist of (1) only
|
|
30
|
-
#country, or (2) country & state or (3) country, state & county and so forth.
|
|
31
16
|
def locations
|
|
32
|
-
|
|
33
|
-
FireEagle::Location.new(location.to_s)
|
|
34
|
-
end
|
|
17
|
+
location_hierarchy && location_hierarchy.locations
|
|
35
18
|
end
|
|
36
19
|
end
|
|
37
20
|
end
|
data/lib/fireeagle/version.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
|
2
2
|
|
|
3
|
-
describe
|
|
3
|
+
describe FireEagle::Response do
|
|
4
4
|
|
|
5
5
|
describe "user / location parsing" do
|
|
6
6
|
|
|
7
7
|
before(:each) do
|
|
8
|
-
@response = FireEagle::Response.
|
|
8
|
+
@response = FireEagle::Response.parse(XML_LOCATION_RESPONSE)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
it "should indicate success" do
|
|
@@ -33,7 +33,7 @@ describe "FireEagle Response" do
|
|
|
33
33
|
describe "location parsing" do
|
|
34
34
|
|
|
35
35
|
before(:each) do
|
|
36
|
-
@response = FireEagle::Response.
|
|
36
|
+
@response = FireEagle::Response.parse(XML_LOOKUP_RESPONSE)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
it "should indicate success" do
|
|
@@ -57,7 +57,7 @@ describe "FireEagle Response" do
|
|
|
57
57
|
describe "error handling" do
|
|
58
58
|
|
|
59
59
|
it "should raise an exception when returned xml with a status of fail" do
|
|
60
|
-
lambda { FireEagle::Response.
|
|
60
|
+
lambda { FireEagle::Response.parse(XML_ERROR_RESPONSE) }.should raise_error(FireEagle::FireEagleException, "Something bad happened")
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
end
|
data/spec/fireeagle_spec.rb
CHANGED
|
@@ -171,10 +171,6 @@ describe "FireEagle" do
|
|
|
171
171
|
it "should return an array of Users" do
|
|
172
172
|
@client.within(:woe => "12796255").should have(2).users
|
|
173
173
|
end
|
|
174
|
-
|
|
175
|
-
it "should return an array of Locations for each" do
|
|
176
|
-
@client.within(:woe => "12796255").first.should have(5).locations
|
|
177
|
-
end
|
|
178
174
|
end
|
|
179
175
|
|
|
180
176
|
describe "recent method" do
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
|
2
2
|
|
|
3
|
-
describe
|
|
3
|
+
describe FireEagle::Location do
|
|
4
4
|
|
|
5
5
|
before(:each) do
|
|
6
|
-
location =
|
|
7
|
-
@
|
|
8
|
-
location_with_query = Hpricot.XML(XML_QUERY_LOCATION_CHUNK)
|
|
9
|
-
@location_with_query = FireEagle::Location.new(location_with_query)
|
|
6
|
+
@location = FireEagle::Location.parse(responses(:location_chunk))
|
|
7
|
+
@location_with_query = FireEagle::Location.parse(responses(:location_chunk_with_query))
|
|
10
8
|
end
|
|
11
9
|
|
|
12
10
|
it "should know if this is a best guess" do
|
|
@@ -25,42 +23,56 @@ describe "FireEagle Location" do
|
|
|
25
23
|
@location.name.should == 'Davis, CA'
|
|
26
24
|
end
|
|
27
25
|
|
|
28
|
-
it "should represent the
|
|
26
|
+
it "should represent the raw name" do
|
|
27
|
+
@location.normal_name.should == "Davis"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should represent the location's place id" do
|
|
29
31
|
@location.place_id.should == 'u4L9ZOObApTdx1q3'
|
|
30
32
|
end
|
|
31
33
|
|
|
34
|
+
it "should represent whether the location's place id is an exact match" do
|
|
35
|
+
@location.place_id.should be_an_exact_match
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should represent the location's WOEID" do
|
|
39
|
+
@location.woeid.should == "2389646"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should represent whether the location's WOEID is an exact match" do
|
|
43
|
+
@location.woeid.should be_an_exact_match
|
|
44
|
+
end
|
|
45
|
+
|
|
32
46
|
it "should represent the location's timestamp" do
|
|
33
47
|
@location.located_at.should == Time.parse("2008-01-22T14:23:11-08:00")
|
|
34
48
|
end
|
|
35
49
|
|
|
50
|
+
it "should represent the label" do
|
|
51
|
+
@location.label.should == "Home of UC Davis"
|
|
52
|
+
end
|
|
53
|
+
|
|
36
54
|
it "should use the name for #to_s" do
|
|
37
55
|
@location.to_s.should == @location.name
|
|
38
56
|
end
|
|
39
57
|
|
|
40
|
-
it "should
|
|
41
|
-
@location_with_query.query.should == "333
|
|
58
|
+
it "should represent the querystring" do
|
|
59
|
+
@location_with_query.query.should == "q=333%20W%20Harbor%20Dr,%20San%20Diego,%20CA"
|
|
42
60
|
end
|
|
43
61
|
|
|
44
62
|
describe "GeoRuby support" do
|
|
45
|
-
|
|
46
63
|
it "should represent a bounding box as a GeoRuby Envelope" do
|
|
47
|
-
location =
|
|
48
|
-
@location = FireEagle::Location.new(location)
|
|
64
|
+
@location = FireEagle::Location.parse(responses(:location_chunk))
|
|
49
65
|
@location.geom.should be_an_instance_of(GeoRuby::SimpleFeatures::Envelope)
|
|
50
66
|
end
|
|
51
67
|
|
|
52
68
|
it "should represent an exact point as a GeoRuby Point" do
|
|
53
|
-
location =
|
|
54
|
-
@location = FireEagle::Location.new(location)
|
|
69
|
+
@location = FireEagle::Location.parse(responses(:exact_location_chunk))
|
|
55
70
|
@location.geom.should be_an_instance_of(GeoRuby::SimpleFeatures::Point)
|
|
56
71
|
end
|
|
57
72
|
|
|
58
73
|
it "should be aliased as 'geo'" do
|
|
59
|
-
location =
|
|
60
|
-
@location = FireEagle::Location.new(location)
|
|
74
|
+
@location = FireEagle::Location.parse(responses(:exact_location_chunk))
|
|
61
75
|
@location.geo.should be_an_instance_of(GeoRuby::SimpleFeatures::Point)
|
|
62
76
|
end
|
|
63
|
-
|
|
64
77
|
end
|
|
65
|
-
|
|
66
78
|
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
|
2
|
+
|
|
3
|
+
describe FireEagle::Locations do
|
|
4
|
+
before :each do
|
|
5
|
+
@instance = FireEagle::Locations.parse(responses(:locations_chunk))
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should be Enumerable" do
|
|
9
|
+
@instance.should be_a_kind_of(Enumerable)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should have a length" do
|
|
13
|
+
@instance.length.should == 9
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should have a size" do
|
|
17
|
+
@instance.size.should == 9
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should be indexable" do
|
|
21
|
+
@instance[0].should_not be_nil
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should be indexable by Range" do
|
|
25
|
+
@instance[0..2].length.should == 3
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should be indexable by 'start' and 'length'" do
|
|
29
|
+
@instance[0, 2].length.should == 2
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should be sliceable" do
|
|
33
|
+
@instance.should respond_to(:slice)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should have a first element" do
|
|
37
|
+
@instance.first.should == @instance[0]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should have a last element" do
|
|
41
|
+
@instance.last.should == @instance[-1]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<location best-guess="false" xmlns:georss="http://www.georss.org/georss">
|
|
2
|
+
<georss:box>38.5351715088 -121.7948684692 38.575668335 -121.6747894287</georss:box>
|
|
3
|
+
<level>3</level>
|
|
4
|
+
<level-name>city</level-name>
|
|
5
|
+
<located-at>2008-01-22T14:23:11-08:00</located-at>
|
|
6
|
+
<name>Davis, CA</name>
|
|
7
|
+
<normal-name>Davis</normal-name>
|
|
8
|
+
<woeid exact-match="true">2389646</woeid>
|
|
9
|
+
<place-id exact-match="true">u4L9ZOObApTdx1q3</place-id>
|
|
10
|
+
<label>Home of UC Davis</label>
|
|
11
|
+
</location>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<location best-guess="true" xmlns:georss="http://www.georss.org/georss">
|
|
2
|
+
<id>111541</id>
|
|
3
|
+
<georss:point>32.7093315125 -117.1650772095</georss:point>
|
|
4
|
+
<level>0</level>
|
|
5
|
+
<level-name>exact</level-name>
|
|
6
|
+
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
7
|
+
<name>333 W Harbor Dr, San Diego, CA</name>
|
|
8
|
+
<query>q=333%20W%20Harbor%20Dr,%20San%20Diego,%20CA</query>
|
|
9
|
+
</location>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<locations start="0" total="9" count="9">
|
|
2
|
+
<location>
|
|
3
|
+
<name>Alpharetta, GA 30022</name>
|
|
4
|
+
<place-id>IrhZMHuYA5s1fFi4Qw</place-id>
|
|
5
|
+
</location>
|
|
6
|
+
<location>
|
|
7
|
+
<name>Hannover, Region Hannover, Deutschland</name>
|
|
8
|
+
<place-id>88Hctc2bBZlhvlwbUg</place-id>
|
|
9
|
+
</location>
|
|
10
|
+
<location>
|
|
11
|
+
<name>Nîmes, Gard, France</name>
|
|
12
|
+
<place-id>Sut8q82bBZkF0s1eTg</place-id>
|
|
13
|
+
</location>
|
|
14
|
+
<location>
|
|
15
|
+
<name>Ceggia, Venezia, Italia</name>
|
|
16
|
+
<place-id>s9ulRieYA5TkNK9otw</place-id>
|
|
17
|
+
</location>
|
|
18
|
+
<location>
|
|
19
|
+
<name>Comitán de Domínguez, Comitan de Dominguez, México</name>
|
|
20
|
+
<place-id>.51HvYKbBZnSAeNHWw</place-id>
|
|
21
|
+
</location>
|
|
22
|
+
<location>
|
|
23
|
+
<name>Platanos Aitoloakarnanias, Etolia Kai Akarnania, Greece</name>
|
|
24
|
+
<place-id>CmfJ2H.YA5QKpS56HQ</place-id>
|
|
25
|
+
</location>
|
|
26
|
+
<location>
|
|
27
|
+
<name>Kraków, Kraków, Polska</name>
|
|
28
|
+
<place-id>9bYc0l.bA5vPTGscQg</place-id>
|
|
29
|
+
</location>
|
|
30
|
+
<location>
|
|
31
|
+
<name>Nakuru, Kenya</name>
|
|
32
|
+
<place-id>VDprypWYA5sujnZphA</place-id>
|
|
33
|
+
</location>
|
|
34
|
+
<location>
|
|
35
|
+
<name>Fez, Al Magreb</name>
|
|
36
|
+
<place-id>BxOaGgSYA5R40Nm1RA</place-id>
|
|
37
|
+
</location>
|
|
38
|
+
</locations>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<rsp stat="ok">
|
|
3
|
+
<querystring>q=30022</querystring>
|
|
4
|
+
<locations start="0" total="9" count="9">
|
|
5
|
+
<location>
|
|
6
|
+
<name>Alpharetta, GA 30022</name>
|
|
7
|
+
<place-id>IrhZMHuYA5s1fFi4Qw</place-id>
|
|
8
|
+
</location>
|
|
9
|
+
<location>
|
|
10
|
+
<name>Hannover, Region Hannover, Deutschland</name>
|
|
11
|
+
<place-id>88Hctc2bBZlhvlwbUg</place-id>
|
|
12
|
+
</location>
|
|
13
|
+
<location>
|
|
14
|
+
<name>Nîmes, Gard, France</name>
|
|
15
|
+
<place-id>Sut8q82bBZkF0s1eTg</place-id>
|
|
16
|
+
</location>
|
|
17
|
+
<location>
|
|
18
|
+
<name>Ceggia, Venezia, Italia</name>
|
|
19
|
+
<place-id>s9ulRieYA5TkNK9otw</place-id>
|
|
20
|
+
</location>
|
|
21
|
+
<location>
|
|
22
|
+
<name>Comitán de Domínguez, Comitan de Dominguez, México</name>
|
|
23
|
+
<place-id>.51HvYKbBZnSAeNHWw</place-id>
|
|
24
|
+
</location>
|
|
25
|
+
<location>
|
|
26
|
+
<name>Platanos Aitoloakarnanias, Etolia Kai Akarnania, Greece</name>
|
|
27
|
+
<place-id>CmfJ2H.YA5QKpS56HQ</place-id>
|
|
28
|
+
</location>
|
|
29
|
+
<location>
|
|
30
|
+
<name>Kraków, Kraków, Polska</name>
|
|
31
|
+
<place-id>9bYc0l.bA5vPTGscQg</place-id>
|
|
32
|
+
</location>
|
|
33
|
+
<location>
|
|
34
|
+
<name>Nakuru, Kenya</name>
|
|
35
|
+
<place-id>VDprypWYA5sujnZphA</place-id>
|
|
36
|
+
</location>
|
|
37
|
+
<location>
|
|
38
|
+
<name>Fez, Al Magreb</name>
|
|
39
|
+
<place-id>BxOaGgSYA5R40Nm1RA</place-id>
|
|
40
|
+
</location>
|
|
41
|
+
</locations>
|
|
42
|
+
</rsp>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<rsp xmlns:georss="http://www.georss.org/georss" stat="ok">
|
|
3
|
+
<users>
|
|
4
|
+
<user located-at="2008-07-31T22:31:37+12:00" token="5pyl1xip0uh6"/>
|
|
5
|
+
<user located-at="2008-07-31T21:49:03+12:00" token="i71yc3myixg3"/>
|
|
6
|
+
<user located-at="2008-07-30T21:40:54+12:00" token="q1jm8nubnpsi"/>
|
|
7
|
+
</users>
|
|
8
|
+
</rsp>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<rsp stat="ok" xmlns:georss="http://www.georss.org/georss">
|
|
3
|
+
<user token="16w3z6ysudxt" located-at="2008-12-09T17:14:50-08:00" readable="true" writable="true">
|
|
4
|
+
<location-hierarchy timezone="America/Los_Angeles">
|
|
5
|
+
<location best-guess="false">
|
|
6
|
+
<georss:box>38.5351715088 -121.7948684692 38.575668335 -121.6747894287</georss:box>
|
|
7
|
+
<label>Home of UC Davis</label>
|
|
8
|
+
<level>3</level>
|
|
9
|
+
<level-name>city</level-name>
|
|
10
|
+
<located-at>2008-01-22T14:23:11-08:00</located-at>
|
|
11
|
+
<name>Davis, CA</name>
|
|
12
|
+
<place-id>u4L9ZOObApTdx1q3</place-id>
|
|
13
|
+
</location>
|
|
14
|
+
<location best-guess="true">
|
|
15
|
+
<georss:box>38.3131217957 -122.4230804443 38.9261016846 -121.5012969971</georss:box>
|
|
16
|
+
<level>4</level>
|
|
17
|
+
<level-name>region</level-name>
|
|
18
|
+
<located-at>2008-01-22T18:45:26-08:00</located-at>
|
|
19
|
+
<name>Yolo County, California</name>
|
|
20
|
+
<place-id>YUYMh9CbBJ61mgFe</place-id>
|
|
21
|
+
</location>
|
|
22
|
+
<location best-guess="false">
|
|
23
|
+
<georss:box>32.5342788696 -124.4150238037 42.0093803406 -114.1308135986</georss:box>
|
|
24
|
+
<level>5</level>
|
|
25
|
+
<level-name>state</level-name>
|
|
26
|
+
<located-at>2008-01-22T18:45:26-08:00</located-at>
|
|
27
|
+
<name>California</name>
|
|
28
|
+
<place-id>SVrAMtCbAphCLAtP</place-id>
|
|
29
|
+
</location>
|
|
30
|
+
<location best-guess="false">
|
|
31
|
+
<georss:box>18.9108390808 -167.2764129639 72.8960571289 -66.6879425049</georss:box>
|
|
32
|
+
<level>6</level>
|
|
33
|
+
<level-name>country</level-name>
|
|
34
|
+
<located-at>2008-01-22T18:45:26-08:00</located-at>
|
|
35
|
+
<name>United States</name>
|
|
36
|
+
<place-id>4KO02SibApitvSBieQ</place-id>
|
|
37
|
+
</location>
|
|
38
|
+
</location-hierarchy>
|
|
39
|
+
</user>
|
|
40
|
+
</rsp>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<rsp xmlns:georss="http://www.georss.org/georss" stat="ok">
|
|
3
|
+
<users>
|
|
4
|
+
<user located-at="2008-07-31T22:31:37+12:00" token="5pyl1xip0uh6"/>
|
|
5
|
+
<user located-at="2008-07-31T21:49:03+12:00" token="i71yc3myixg3"/>
|
|
6
|
+
</users>
|
|
7
|
+
</rsp>
|
data/spec/spec_helper.rb
CHANGED
|
@@ -7,54 +7,18 @@ rescue LoadError
|
|
|
7
7
|
end
|
|
8
8
|
require 'time'
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
RESPONSE
|
|
10
|
+
module ResponseHelper
|
|
11
|
+
def responses(key)
|
|
12
|
+
File.read(File.join(File.dirname(__FILE__), "responses", "#{key}.xml"))
|
|
13
|
+
end
|
|
14
|
+
end
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<georss:box>38.5351715088 -121.7948684692 38.575668335 -121.6747894287</georss:box>
|
|
24
|
-
<level>3</level>
|
|
25
|
-
<level-name>city</level-name>
|
|
26
|
-
<located-at>2008-01-22T14:23:11-08:00</located-at>
|
|
27
|
-
<name>Davis, CA</name>
|
|
28
|
-
<place-id>u4L9ZOObApTdx1q3</place-id>
|
|
29
|
-
</location>
|
|
30
|
-
<location best-guess="true">
|
|
31
|
-
<georss:box>38.3131217957 -122.4230804443 38.9261016846 -121.5012969971</georss:box>
|
|
32
|
-
<level>4</level>
|
|
33
|
-
<level-name>region</level-name>
|
|
34
|
-
<located-at>2008-01-22T18:45:26-08:00</located-at>
|
|
35
|
-
<name>Yolo County, California</name>
|
|
36
|
-
<place-id>YUYMh9CbBJ61mgFe</place-id>
|
|
37
|
-
</location>
|
|
38
|
-
<location best-guess="false">
|
|
39
|
-
<georss:box>32.5342788696 -124.4150238037 42.0093803406 -114.1308135986</georss:box>
|
|
40
|
-
<level>5</level>
|
|
41
|
-
<level-name>state</level-name>
|
|
42
|
-
<located-at>2008-01-22T18:45:26-08:00</located-at>
|
|
43
|
-
<name>California</name>
|
|
44
|
-
<place-id>SVrAMtCbAphCLAtP</place-id>
|
|
45
|
-
</location>
|
|
46
|
-
<location best-guess="false">
|
|
47
|
-
<georss:box>18.9108390808 -167.2764129639 72.8960571289 -66.6879425049</georss:box>
|
|
48
|
-
<level>6</level>
|
|
49
|
-
<level-name>country</level-name>
|
|
50
|
-
<located-at>2008-01-22T18:45:26-08:00</located-at>
|
|
51
|
-
<name>United States</name>
|
|
52
|
-
<place-id>4KO02SibApitvSBieQ</place-id>
|
|
53
|
-
</location>
|
|
54
|
-
</location-hierarchy>
|
|
55
|
-
</user>
|
|
56
|
-
</rsp>
|
|
57
|
-
RESPONSE
|
|
16
|
+
Spec::Runner.configure do |config|
|
|
17
|
+
include ResponseHelper
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
XML_ERROR_RESPONSE = File.read(File.join(File.dirname(__FILE__), "responses", "error.xml"))
|
|
21
|
+
XML_LOCATION_RESPONSE = File.read(File.join(File.dirname(__FILE__), "responses", "user.xml"))
|
|
58
22
|
|
|
59
23
|
XML_SUCCESS_RESPONSE = <<-RESPONSE
|
|
60
24
|
<?xml version="1.0" encoding="utf-8"?>
|
|
@@ -63,80 +27,7 @@ XML_SUCCESS_RESPONSE = <<-RESPONSE
|
|
|
63
27
|
</rsp>
|
|
64
28
|
RESPONSE
|
|
65
29
|
|
|
66
|
-
|
|
67
|
-
<location best-guess="false">
|
|
68
|
-
<georss:box>38.5351715088 -121.7948684692 38.575668335 -121.6747894287</georss:box>
|
|
69
|
-
<level>3</level>
|
|
70
|
-
<level-name>city</level-name>
|
|
71
|
-
<located-at>2008-01-22T14:23:11-08:00</located-at>
|
|
72
|
-
<name>Davis, CA</name>
|
|
73
|
-
<place-id>u4L9ZOObApTdx1q3</place-id>
|
|
74
|
-
</location>
|
|
75
|
-
RESPONSE
|
|
76
|
-
|
|
77
|
-
XML_QUERY_LOCATION_CHUNK = <<-RESPONSE
|
|
78
|
-
<location best-guess="true">
|
|
79
|
-
<id>111541</id>
|
|
80
|
-
<georss:point>32.7093315125 -117.1650772095</georss:point>
|
|
81
|
-
<level>0</level>
|
|
82
|
-
<level-name>exact</level-name>
|
|
83
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
84
|
-
<name>333 W Harbor Dr, San Diego, CA</name>
|
|
85
|
-
<query> "q=333%20W%20Harbor%20Dr,%20San%20Diego,%20CA" </query>
|
|
86
|
-
</location>
|
|
87
|
-
RESPONSE
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
XML_EXACT_LOCATION_CHUNK = <<-RESPONSE
|
|
91
|
-
<location>
|
|
92
|
-
<georss:point>38.5351715088 -121.7948684692</georss:box>
|
|
93
|
-
</location>
|
|
94
|
-
RESPONSE
|
|
95
|
-
|
|
96
|
-
XML_LOOKUP_RESPONSE = <<-RESPONSE
|
|
97
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
98
|
-
<rsp stat="ok">
|
|
99
|
-
<querystring>q=30022</querystring>
|
|
100
|
-
<locations start="0" total="9" count="9">
|
|
101
|
-
<location>
|
|
102
|
-
<name>Alpharetta, GA 30022</name>
|
|
103
|
-
<place-id>IrhZMHuYA5s1fFi4Qw</place-id>
|
|
104
|
-
</location>
|
|
105
|
-
<location>
|
|
106
|
-
<name>Hannover, Region Hannover, Deutschland</name>
|
|
107
|
-
<place-id>88Hctc2bBZlhvlwbUg</place-id>
|
|
108
|
-
</location>
|
|
109
|
-
<location>
|
|
110
|
-
<name>Nîmes, Gard, France</name>
|
|
111
|
-
<place-id>Sut8q82bBZkF0s1eTg</place-id>
|
|
112
|
-
</location>
|
|
113
|
-
<location>
|
|
114
|
-
<name>Ceggia, Venezia, Italia</name>
|
|
115
|
-
<place-id>s9ulRieYA5TkNK9otw</place-id>
|
|
116
|
-
</location>
|
|
117
|
-
<location>
|
|
118
|
-
<name>Comitán de Domínguez, Comitan de Dominguez, México</name>
|
|
119
|
-
<place-id>.51HvYKbBZnSAeNHWw</place-id>
|
|
120
|
-
</location>
|
|
121
|
-
<location>
|
|
122
|
-
<name>Platanos Aitoloakarnanias, Etolia Kai Akarnania, Greece</name>
|
|
123
|
-
<place-id>CmfJ2H.YA5QKpS56HQ</place-id>
|
|
124
|
-
</location>
|
|
125
|
-
<location>
|
|
126
|
-
<name>Kraków, Kraków, Polska</name>
|
|
127
|
-
<place-id>9bYc0l.bA5vPTGscQg</place-id>
|
|
128
|
-
</location>
|
|
129
|
-
<location>
|
|
130
|
-
<name>Nakuru, Kenya</name>
|
|
131
|
-
<place-id>VDprypWYA5sujnZphA</place-id>
|
|
132
|
-
</location>
|
|
133
|
-
<location>
|
|
134
|
-
<name>Fez, Al Magreb</name>
|
|
135
|
-
<place-id>BxOaGgSYA5R40Nm1RA</place-id>
|
|
136
|
-
</location>
|
|
137
|
-
</locations>
|
|
138
|
-
</rsp>
|
|
139
|
-
RESPONSE
|
|
30
|
+
XML_LOOKUP_RESPONSE = File.read(File.join(File.dirname(__FILE__), "responses", "lookup.xml"))
|
|
140
31
|
|
|
141
32
|
XML_FAIL_LOOKUP_RESPONSE = <<-RESPONSE
|
|
142
33
|
<?xml version="1.0" encoding="utf-8"?>
|
|
@@ -145,143 +36,8 @@ XML_FAIL_LOOKUP_RESPONSE = <<-RESPONSE
|
|
|
145
36
|
</rsp>
|
|
146
37
|
RESPONSE
|
|
147
38
|
|
|
148
|
-
XML_WITHIN_RESPONSE =
|
|
149
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
150
|
-
<rsp stat="ok">
|
|
151
|
-
<users>
|
|
152
|
-
<user token="MQdDrJgXMNJi">
|
|
153
|
-
<location-hierarchy>
|
|
154
|
-
<location best-guess="true">
|
|
155
|
-
<id>111541</id>
|
|
156
|
-
<georss:point>32.7093315125 -117.1650772095</georss:point>
|
|
157
|
-
<level>0</level>
|
|
158
|
-
<level-name>exact</level-name>
|
|
159
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
160
|
-
<name>333 W Harbor Dr, San Diego, CA</name>
|
|
161
|
-
</location>
|
|
162
|
-
<location best-guess="false">
|
|
163
|
-
<id>111551</id>
|
|
164
|
-
<georss:box>
|
|
165
|
-
32.6916618347 -117.2174377441 32.744140625 -117.1458892822
|
|
166
|
-
</georss:box>
|
|
167
|
-
<level>1</level>
|
|
168
|
-
<level-name>postal</level-name>
|
|
169
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
170
|
-
<name>San Diego, CA 92101</name>
|
|
171
|
-
<place-id>NpiXqwmYA5viX3K3Ew</place-id>
|
|
172
|
-
<woeid>12796255</woeid>
|
|
173
|
-
</location>
|
|
174
|
-
<location best-guess="false">
|
|
175
|
-
<id>111561</id>
|
|
176
|
-
<georss:box>
|
|
177
|
-
32.5349388123 -117.2884292603 33.1128082275 -116.9142913818
|
|
178
|
-
</georss:box>
|
|
179
|
-
<level>3</level>
|
|
180
|
-
<level-name>city</level-name>
|
|
181
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
182
|
-
<name>San Diego, CA</name>
|
|
183
|
-
<place-id>Nm4O.DebBZTYKUsu</place-id>
|
|
184
|
-
<woeid>2487889</woeid>
|
|
185
|
-
</location>
|
|
186
|
-
<location best-guess="false">
|
|
187
|
-
<id>111571</id>
|
|
188
|
-
<georss:box>
|
|
189
|
-
32.5342788696 -124.4150238037 42.0093803406 -114.1308135986
|
|
190
|
-
</georss:box>
|
|
191
|
-
<level>5</level>
|
|
192
|
-
<level-name>state</level-name>
|
|
193
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
194
|
-
<name>California</name>
|
|
195
|
-
<place-id>SVrAMtCbAphCLAtP</place-id>
|
|
196
|
-
<woeid>2347563</woeid>
|
|
197
|
-
</location>
|
|
198
|
-
<location best-guess="false">
|
|
199
|
-
<id>111581</id>
|
|
200
|
-
<georss:box>
|
|
201
|
-
18.9108390808 -167.2764129639 72.8960571289 -66.6879425049
|
|
202
|
-
</georss:box>
|
|
203
|
-
<level>6</level>
|
|
204
|
-
<level-name>country</level-name>
|
|
205
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
206
|
-
<name>United States</name>
|
|
207
|
-
<place-id>4KO02SibApitvSBieQ</place-id>
|
|
208
|
-
<woeid>23424977</woeid>
|
|
209
|
-
</location>
|
|
210
|
-
</location-hierarchy>
|
|
211
|
-
</user>
|
|
212
|
-
<user token="MQdDrJgXMNJi">
|
|
213
|
-
<location-hierarchy>
|
|
214
|
-
<location best-guess="true">
|
|
215
|
-
<id>111541</id>
|
|
216
|
-
<georss:point>32.7093315125 -117.1650772095</georss:point>
|
|
217
|
-
<level>0</level>
|
|
218
|
-
<level-name>exact</level-name>
|
|
219
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
220
|
-
<name>333 W Harbor Dr, San Diego, CA</name>
|
|
221
|
-
</location>
|
|
222
|
-
<location best-guess="false">
|
|
223
|
-
<id>111551</id>
|
|
224
|
-
<georss:box>
|
|
225
|
-
32.6916618347 -117.2174377441 32.744140625 -117.1458892822
|
|
226
|
-
</georss:box>
|
|
227
|
-
<level>1</level>
|
|
228
|
-
<level-name>postal</level-name>
|
|
229
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
230
|
-
<name>San Diego, CA 92101</name>
|
|
231
|
-
<place-id>NpiXqwmYA5viX3K3Ew</place-id>
|
|
232
|
-
<woeid>12796255</woeid>
|
|
233
|
-
</location>
|
|
234
|
-
<location best-guess="false">
|
|
235
|
-
<id>111561</id>
|
|
236
|
-
<georss:box>
|
|
237
|
-
32.5349388123 -117.2884292603 33.1128082275 -116.9142913818
|
|
238
|
-
</georss:box>
|
|
239
|
-
<level>3</level>
|
|
240
|
-
<level-name>city</level-name>
|
|
241
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
242
|
-
<name>San Diego, CA</name>
|
|
243
|
-
<place-id>Nm4O.DebBZTYKUsu</place-id>
|
|
244
|
-
<woeid>2487889</woeid>
|
|
245
|
-
</location>
|
|
246
|
-
<location best-guess="false">
|
|
247
|
-
<id>111571</id>
|
|
248
|
-
<georss:box>
|
|
249
|
-
32.5342788696 -124.4150238037 42.0093803406 -114.1308135986
|
|
250
|
-
</georss:box>
|
|
251
|
-
<level>5</level>
|
|
252
|
-
<level-name>state</level-name>
|
|
253
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
254
|
-
<name>California</name>
|
|
255
|
-
<place-id>SVrAMtCbAphCLAtP</place-id>
|
|
256
|
-
<woeid>2347563</woeid>
|
|
257
|
-
</location>
|
|
258
|
-
<location best-guess="false">
|
|
259
|
-
<id>111581</id>
|
|
260
|
-
<georss:box>
|
|
261
|
-
18.9108390808 -167.2764129639 72.8960571289 -66.6879425049
|
|
262
|
-
</georss:box>
|
|
263
|
-
<level>6</level>
|
|
264
|
-
<level-name>country</level-name>
|
|
265
|
-
<located-at>2008-03-03T09:05:16-08:00</located-at>
|
|
266
|
-
<name>United States</name>
|
|
267
|
-
<place-id>4KO02SibApitvSBieQ</place-id>
|
|
268
|
-
<woeid>23424977</woeid>
|
|
269
|
-
</location>
|
|
270
|
-
</location-hierarchy>
|
|
271
|
-
</user>
|
|
272
|
-
</users>
|
|
273
|
-
</rsp>
|
|
274
|
-
RESPONSE
|
|
39
|
+
XML_WITHIN_RESPONSE = File.read(File.join(File.dirname(__FILE__), "responses", "within.xml"))
|
|
275
40
|
|
|
276
|
-
XML_RECENT_RESPONSE =
|
|
277
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
278
|
-
<rsp xmlns:georss="http://www.georss.org/georss" stat="ok">
|
|
279
|
-
<users>
|
|
280
|
-
<user located-at="2008-07-31T22:31:37+12:00" token="5pyl1xip0uh6"/>
|
|
281
|
-
<user located-at="2008-07-31T21:49:03+12:00" token="i71yc3myixg3"/>
|
|
282
|
-
<user located-at="2008-07-30T21:40:54+12:00" token="q1jm8nubnpsi"/>
|
|
283
|
-
</users>
|
|
284
|
-
</rsp>
|
|
285
|
-
RESPONSE
|
|
41
|
+
XML_RECENT_RESPONSE = File.read(File.join(File.dirname(__FILE__), "responses", "recent.xml"))
|
|
286
42
|
|
|
287
43
|
require File.dirname(__FILE__) + '/../lib/fireeagle'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mojodna-fireeagle
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.8.0.
|
|
4
|
+
version: 0.8.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jesse Newland
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date:
|
|
12
|
+
date: 2009-02-03 00:00:00 -08:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
@@ -19,16 +19,16 @@ dependencies:
|
|
|
19
19
|
requirements:
|
|
20
20
|
- - ">="
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: 0.
|
|
22
|
+
version: 0.3.1
|
|
23
23
|
version:
|
|
24
24
|
- !ruby/object:Gem::Dependency
|
|
25
|
-
name:
|
|
25
|
+
name: happymapper
|
|
26
26
|
version_requirement:
|
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
|
28
28
|
requirements:
|
|
29
29
|
- - ">="
|
|
30
30
|
- !ruby/object:Gem::Version
|
|
31
|
-
version:
|
|
31
|
+
version: 0.2.1
|
|
32
32
|
version:
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: GeoRuby
|
|
@@ -39,6 +39,15 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: 1.3.2
|
|
41
41
|
version:
|
|
42
|
+
- !ruby/object:Gem::Dependency
|
|
43
|
+
name: hoe
|
|
44
|
+
version_requirement:
|
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
46
|
+
requirements:
|
|
47
|
+
- - ">="
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: 1.8.0
|
|
50
|
+
version:
|
|
42
51
|
description: Ruby wrapper for Yahoo!'s FireEagle
|
|
43
52
|
email:
|
|
44
53
|
- jnewland@gmail.com
|
|
@@ -61,14 +70,27 @@ files:
|
|
|
61
70
|
- Rakefile
|
|
62
71
|
- lib/fireeagle.rb
|
|
63
72
|
- lib/fireeagle/client.rb
|
|
73
|
+
- lib/fireeagle/error.rb
|
|
64
74
|
- lib/fireeagle/location.rb
|
|
75
|
+
- lib/fireeagle/location_hierarchy.rb
|
|
76
|
+
- lib/fireeagle/locations.rb
|
|
65
77
|
- lib/fireeagle/response.rb
|
|
66
78
|
- lib/fireeagle/user.rb
|
|
67
79
|
- lib/fireeagle/version.rb
|
|
68
80
|
- setup.rb
|
|
69
|
-
- spec/fireeagle_location_spec.rb
|
|
70
81
|
- spec/fireeagle_response_spec.rb
|
|
71
82
|
- spec/fireeagle_spec.rb
|
|
83
|
+
- spec/location_spec.rb
|
|
84
|
+
- spec/locations_spec.rb
|
|
85
|
+
- spec/responses/error.xml
|
|
86
|
+
- spec/responses/exact_location_chunk.xml
|
|
87
|
+
- spec/responses/location_chunk.xml
|
|
88
|
+
- spec/responses/location_chunk_with_query.xml
|
|
89
|
+
- spec/responses/locations_chunk.xml
|
|
90
|
+
- spec/responses/lookup.xml
|
|
91
|
+
- spec/responses/recent.xml
|
|
92
|
+
- spec/responses/user.xml
|
|
93
|
+
- spec/responses/within.xml
|
|
72
94
|
- spec/spec.opts
|
|
73
95
|
- spec/spec_helper.rb
|
|
74
96
|
- tasks/environment.rake
|