jnewland-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/client.rb +14 -14
- data/lib/fireeagle/error.rb +9 -0
- data/lib/fireeagle/location.rb +40 -55
- data/lib/fireeagle/location_hierarchy.rb +10 -0
- data/lib/fireeagle/locations.rb +36 -0
- data/lib/fireeagle/response.rb +22 -20
- data/lib/fireeagle/user.rb +10 -27
- data/lib/fireeagle/version.rb +2 -2
- data/lib/fireeagle.rb +12 -12
- data/spec/fireeagle_response_spec.rb +4 -4
- data/spec/fireeagle_spec.rb +43 -8
- data/spec/{fireeagle_location_spec.rb → location_spec.rb} +32 -14
- 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 +19 -243
- 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/client.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            module FireEagle
         | 
| 2 2 | 
             
              class Client
         | 
| 3 3 | 
             
                # TODO add access_token=() and request_token=() methods that check whether the tokens are usable
         | 
| 4 4 |  | 
| @@ -154,8 +154,8 @@ class FireEagle | |
| 154 154 | 
             
                # * <tt>plazes_id</tt>
         | 
| 155 155 | 
             
                def lookup(params)
         | 
| 156 156 | 
             
                  raise FireEagle::ArgumentError, "OAuth Access Token Required" unless @access_token
         | 
| 157 | 
            -
                  response = get(FireEagle::LOOKUP_API_PATH | 
| 158 | 
            -
                  FireEagle::Response. | 
| 157 | 
            +
                  response = get(FireEagle::LOOKUP_API_PATH, :params => params)
         | 
| 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
         | 
| @@ -186,15 +186,15 @@ class FireEagle | |
| 186 186 | 
             
                def update(location = {})
         | 
| 187 187 | 
             
                  raise FireEagle::ArgumentError, "OAuth Access Token Required" unless @access_token
         | 
| 188 188 | 
             
                  location = sanitize_location_hash(location)
         | 
| 189 | 
            -
                  response = post(FireEagle::UPDATE_API_PATH | 
| 190 | 
            -
                  FireEagle::Response. | 
| 189 | 
            +
                  response = post(FireEagle::UPDATE_API_PATH, :params => location)
         | 
| 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 | 
            -
                  response = get(FireEagle::USER_API_PATH | 
| 197 | 
            -
                  FireEagle::Response. | 
| 196 | 
            +
                  response = get(FireEagle::USER_API_PATH)
         | 
| 197 | 
            +
                  FireEagle::Response.parse(response.body).users.first
         | 
| 198 198 | 
             
                end
         | 
| 199 199 | 
             
                alias_method :location, :user
         | 
| 200 200 |  | 
| @@ -209,8 +209,8 @@ class FireEagle | |
| 209 209 | 
             
                def recent(time = 'now', count = 10, start = 1)
         | 
| 210 210 | 
             
                  raise FireEagle::ArgumentError, "OAuth Access Token Required" unless @access_token
         | 
| 211 211 | 
             
                  params = { :count => count, :start => start, :time => time }
         | 
| 212 | 
            -
                  response = get(FireEagle::RECENT_API_PATH | 
| 213 | 
            -
                  FireEagle::Response. | 
| 212 | 
            +
                  response = get(FireEagle::RECENT_API_PATH, :params => params)
         | 
| 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.
         | 
| @@ -237,8 +237,8 @@ class FireEagle | |
| 237 237 | 
             
                  raise FireEagle::ArgumentError, "OAuth Access Token Required" unless @access_token
         | 
| 238 238 | 
             
                  location = sanitize_location_hash(location)
         | 
| 239 239 | 
             
                  params = { :count => count, :start => start }.merge(location)
         | 
| 240 | 
            -
                  response = get(FireEagle::WITHIN_API_PATH | 
| 241 | 
            -
                  FireEagle::Response. | 
| 240 | 
            +
                  response = get(FireEagle::WITHIN_API_PATH, :params => params)
         | 
| 241 | 
            +
                  FireEagle::Response.parse(response.body).users
         | 
| 242 242 | 
             
                end
         | 
| 243 243 |  | 
| 244 244 | 
             
              protected
         | 
| @@ -265,17 +265,17 @@ class FireEagle | |
| 265 265 | 
             
                def request(method, url, options) #:nodoc:
         | 
| 266 266 | 
             
                  response = case method
         | 
| 267 267 | 
             
                  when :post
         | 
| 268 | 
            -
                    access_token.request(:post, url, options[:params])
         | 
| 268 | 
            +
                    access_token.request(:post, "#{url}.#{format}", options[:params])
         | 
| 269 269 | 
             
                  when :get
         | 
| 270 270 | 
             
                    qs = options[:params].collect { |k,v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join("&") if options[:params]
         | 
| 271 | 
            -
                    access_token.request(:get, "#{url}?#{qs}")
         | 
| 271 | 
            +
                    access_token.request(:get, "#{url}.#{format}?#{qs}")
         | 
| 272 272 | 
             
                  else
         | 
| 273 273 | 
             
                    raise ArgumentError, "method #{method} not supported"
         | 
| 274 274 | 
             
                  end
         | 
| 275 275 |  | 
| 276 276 | 
             
                  case response.code
         | 
| 277 | 
            +
                  when '404'; then raise FireEagle::FireEagleException, "Not Found"
         | 
| 277 278 | 
             
                  when '500'; then raise FireEagle::FireEagleException, "Internal Server Error"
         | 
| 278 | 
            -
                  when '400'; then raise FireEagle::FireEagleException, "Method Not Implemented Yet"
         | 
| 279 279 | 
             
                  else response
         | 
| 280 280 | 
             
                  end
         | 
| 281 281 | 
             
                end
         | 
    
        data/lib/fireeagle/location.rb
    CHANGED
    
    | @@ -1,70 +1,55 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            class  | 
| 3 | 
            -
             | 
| 1 | 
            +
            module FireEagle
         | 
| 2 | 
            +
              class StringWithExactMatch < String
         | 
| 3 | 
            +
                attr_writer :exact_match
         | 
| 4 4 |  | 
| 5 | 
            -
                 | 
| 6 | 
            -
             | 
| 7 | 
            -
                   | 
| 8 | 
            -
                   | 
| 9 | 
            -
             | 
| 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
         | 
| 10 10 |  | 
| 11 | 
            -
             | 
| 12 | 
            -
                  @label ||= @doc.at("/location/label").innerText rescue nil
         | 
| 11 | 
            +
                  str
         | 
| 13 12 | 
             
                end
         | 
| 14 13 |  | 
| 15 | 
            -
                 | 
| 16 | 
            -
             | 
| 17 | 
            -
                  @level ||= @doc.at("/location/level").innerText.to_i rescue nil
         | 
| 18 | 
            -
                end
         | 
| 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
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                #Human Name for this Location
         | 
| 26 | 
            -
                def name
         | 
| 27 | 
            -
                  @name ||= @doc.at("/location/name").innerText rescue nil
         | 
| 28 | 
            -
                end
         | 
| 29 | 
            -
                alias_method :to_s, :name
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                #Unique identifier for this place. Pro-tip: This is the same place_id used by Flickr.
         | 
| 32 | 
            -
                def place_id
         | 
| 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
         | 
| 14 | 
            +
                def exact_match?
         | 
| 15 | 
            +
                  @exact_match
         | 
| 39 16 | 
             
                end
         | 
| 17 | 
            +
              end
         | 
| 40 18 |  | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 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
         | 
| 45 39 |  | 
| 46 | 
            -
                 | 
| 47 | 
            -
             | 
| 48 | 
            -
                  @georss ||= @doc.at("/location//georss:box").innerText.split.map{ |l| l.to_f } rescue nil
         | 
| 49 | 
            -
                  @lower_corner ||= @georss[0..1] rescue nil
         | 
| 40 | 
            +
                def best_guess?
         | 
| 41 | 
            +
                  best_guess == true
         | 
| 50 42 | 
             
                end
         | 
| 51 43 |  | 
| 52 44 | 
             
                # The GeoRuby[http://georuby.rubyforge.org/] representation of this location
         | 
| 53 45 | 
             
                def geom
         | 
| 54 | 
            -
                   | 
| 55 | 
            -
                    @geo ||= GeoRuby::SimpleFeatures::Geometry.from_georss(@doc.at("/location//georss:box").to_s)
         | 
| 56 | 
            -
                  elsif @doc.at("/location//georss:point")
         | 
| 57 | 
            -
                    @geo ||= GeoRuby::SimpleFeatures::Geometry.from_georss(@doc.at("/location//georss:point").to_s)
         | 
| 58 | 
            -
                  else
         | 
| 59 | 
            -
                    return nil
         | 
| 60 | 
            -
                  end
         | 
| 46 | 
            +
                  _point || _box
         | 
| 61 47 | 
             
                end
         | 
| 48 | 
            +
             | 
| 62 49 | 
             
                alias_method :geo, :geom
         | 
| 63 | 
            -
                
         | 
| 64 | 
            -
                #Is this Location FireEagle's best guess?
         | 
| 65 | 
            -
                def best_guess?
         | 
| 66 | 
            -
                  @best_guess ||= @doc.at("/location").attributes["best-guess"] == "true" rescue false
         | 
| 67 | 
            -
                end
         | 
| 68 50 |  | 
| 51 | 
            +
                def to_s
         | 
| 52 | 
            +
                  name
         | 
| 53 | 
            +
                end
         | 
| 69 54 | 
             
              end
         | 
| 70 | 
            -
            end
         | 
| 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
    
    
    
        data/lib/fireeagle.rb
    CHANGED
    
    | @@ -5,10 +5,18 @@ 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 10 |  | 
| 11 | 
            -
             | 
| 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'
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            module FireEagle
         | 
| 12 20 | 
             
              API_SERVER = "https://fireeagle.yahooapis.com"
         | 
| 13 21 | 
             
              AUTH_SERVER = "https://fireeagle.yahoo.net"
         | 
| 14 22 | 
             
              REQUEST_TOKEN_PATH = "/oauth/request_token"
         | 
| @@ -25,13 +33,10 @@ class 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'
         | 
| @@ -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
    
    | @@ -134,11 +134,12 @@ describe "FireEagle" do | |
| 134 134 | 
             
              end
         | 
| 135 135 |  | 
| 136 136 | 
             
              describe "lookup method" do
         | 
| 137 | 
            -
             | 
| 138 137 | 
             
                before(:each) do
         | 
| 139 | 
            -
                  @client | 
| 140 | 
            -
                   | 
| 141 | 
            -
                   | 
| 138 | 
            +
                  @client       = FireEagle::Client.new(:consumer_key => 'key', :consumer_secret => 'sekret', :access_token => 'toke', :access_token_secret => 'sekret')
         | 
| 139 | 
            +
                  response      = stub('response', :body => XML_LOOKUP_RESPONSE)
         | 
| 140 | 
            +
                  fail_response = stub('fail response', :body => XML_FAIL_LOOKUP_RESPONSE)
         | 
| 141 | 
            +
                  @client.stub!(:request).with(:get, FireEagle::LOOKUP_API_PATH, :params => {:q => "30022"}).and_return(response)
         | 
| 142 | 
            +
                  @client.stub!(:request).with(:get, FireEagle::LOOKUP_API_PATH, :params => {:mnc => 12, :mcc => 502, :lac => 2051, :cellid => 39091}).and_return(fail_response)
         | 
| 142 143 | 
             
                end
         | 
| 143 144 |  | 
| 144 145 | 
             
                it "should return an array of Locations" do
         | 
| @@ -153,6 +154,11 @@ describe "FireEagle" do | |
| 153 154 | 
             
                  @client.lookup(:q => "30022").first.name.should == "Alpharetta, GA 30022"
         | 
| 154 155 | 
             
                end
         | 
| 155 156 |  | 
| 157 | 
            +
                it "should raise an exception if the lookup failed" do
         | 
| 158 | 
            +
                  lambda {
         | 
| 159 | 
            +
                    @client.lookup(:mnc => 12, :mcc => 502, :lac => 2051, :cellid => 39091)
         | 
| 160 | 
            +
                  }.should raise_error(FireEagle::FireEagleException, "Place can't be identified.")
         | 
| 161 | 
            +
                end
         | 
| 156 162 | 
             
              end
         | 
| 157 163 |  | 
| 158 164 | 
             
              describe "within method" do
         | 
| @@ -165,10 +171,6 @@ describe "FireEagle" do | |
| 165 171 | 
             
                it "should return an array of Users" do
         | 
| 166 172 | 
             
                  @client.within(:woe => "12796255").should have(2).users
         | 
| 167 173 | 
             
                end
         | 
| 168 | 
            -
             | 
| 169 | 
            -
                it "should return an array of Locations for each" do
         | 
| 170 | 
            -
                  @client.within(:woe => "12796255").first.should have(5).locations
         | 
| 171 | 
            -
                end
         | 
| 172 174 | 
             
              end
         | 
| 173 175 |  | 
| 174 176 | 
             
              describe "recent method" do
         | 
| @@ -187,4 +189,37 @@ describe "FireEagle" do | |
| 187 189 | 
             
                end
         | 
| 188 190 | 
             
              end
         | 
| 189 191 |  | 
| 192 | 
            +
              describe "making a request" do
         | 
| 193 | 
            +
                before do
         | 
| 194 | 
            +
                  @client = FireEagle::Client.new(:consumer_key => 'key', :consumer_secret => 'sekret', :access_token => 'toke', :access_token_secret => 'sekret')
         | 
| 195 | 
            +
                  @access_token = stub('access token')
         | 
| 196 | 
            +
                  @client.stub!(:access_token).and_return(@access_token)
         | 
| 197 | 
            +
                end
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                it "should not raise any exception when response is OK" do
         | 
| 200 | 
            +
                  response = stub('response', :code => '200', :body => XML_RECENT_RESPONSE)
         | 
| 201 | 
            +
                  @access_token.stub!(:request).and_return(response)
         | 
| 202 | 
            +
                  lambda { @client.recent }.should_not raise_error
         | 
| 203 | 
            +
                end
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                it "should raise an exception when requesting to a resource that doesn't exist (404)" do
         | 
| 206 | 
            +
                  response = stub('response', :code => '404', :body => '')
         | 
| 207 | 
            +
                  @access_token.stub!(:request).and_return(response)
         | 
| 208 | 
            +
                  lambda { @client.recent }.should raise_error(FireEagle::FireEagleException, 'Not Found')
         | 
| 209 | 
            +
                end
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                it "should raise an exception when requesting to a resource that hit an internal server error (500)" do
         | 
| 212 | 
            +
                  response = stub('response', :code => '500', :body => '')
         | 
| 213 | 
            +
                  @access_token.stub!(:request).and_return(response)
         | 
| 214 | 
            +
                  lambda { @client.recent }.should raise_error(FireEagle::FireEagleException, 'Internal Server Error')
         | 
| 215 | 
            +
                end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                it "should raise an exception when response is apart from 200, 404 and 500" do
         | 
| 218 | 
            +
                  %w{401 403 405}.each do |code|
         | 
| 219 | 
            +
                    response = stub('response', :code => code, :body => XML_ERROR_RESPONSE)
         | 
| 220 | 
            +
                    @access_token.stub!(:request).and_return(response)
         | 
| 221 | 
            +
                    lambda { @client.recent }.should raise_error(FireEagle::FireEagleException, 'Something bad happened')
         | 
| 222 | 
            +
                  end
         | 
| 223 | 
            +
                end
         | 
| 224 | 
            +
              end
         | 
| 190 225 | 
             
            end
         | 
| @@ -1,10 +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 | 
            -
                @ | 
| 6 | 
            +
                @location = FireEagle::Location.parse(responses(:location_chunk))
         | 
| 7 | 
            +
                @location_with_query = FireEagle::Location.parse(responses(:location_chunk_with_query))
         | 
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 10 | 
             
              it "should know if this is a best guess" do
         | 
| @@ -23,38 +23,56 @@ describe "FireEagle Location" do | |
| 23 23 | 
             
                @location.name.should == 'Davis, CA'
         | 
| 24 24 | 
             
              end
         | 
| 25 25 |  | 
| 26 | 
            -
              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
         | 
| 27 31 | 
             
                @location.place_id.should == 'u4L9ZOObApTdx1q3'
         | 
| 28 32 | 
             
              end
         | 
| 29 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 | 
            +
             | 
| 30 46 | 
             
              it "should represent the location's timestamp" do
         | 
| 31 47 | 
             
                @location.located_at.should == Time.parse("2008-01-22T14:23:11-08:00")
         | 
| 32 48 | 
             
              end
         | 
| 33 49 |  | 
| 50 | 
            +
              it "should represent the label" do
         | 
| 51 | 
            +
                @location.label.should == "Home of UC Davis"
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
             | 
| 34 54 | 
             
              it "should use the name for #to_s" do
         | 
| 35 55 | 
             
                @location.to_s.should == @location.name
         | 
| 36 56 | 
             
              end
         | 
| 37 57 |  | 
| 38 | 
            -
               | 
| 58 | 
            +
              it "should represent the querystring" do
         | 
| 59 | 
            +
                @location_with_query.query.should == "q=333%20W%20Harbor%20Dr,%20San%20Diego,%20CA"
         | 
| 60 | 
            +
              end
         | 
| 39 61 |  | 
| 62 | 
            +
              describe "GeoRuby support" do
         | 
| 40 63 | 
             
                it "should represent a bounding box as a GeoRuby Envelope" do
         | 
| 41 | 
            -
                  location =  | 
| 42 | 
            -
                  @location = FireEagle::Location.new(location)
         | 
| 64 | 
            +
                  @location = FireEagle::Location.parse(responses(:location_chunk))
         | 
| 43 65 | 
             
                  @location.geom.should be_an_instance_of(GeoRuby::SimpleFeatures::Envelope)
         | 
| 44 66 | 
             
                end
         | 
| 45 67 |  | 
| 46 68 | 
             
                it "should represent an exact point as a GeoRuby Point" do
         | 
| 47 | 
            -
                  location =  | 
| 48 | 
            -
                  @location = FireEagle::Location.new(location)
         | 
| 69 | 
            +
                  @location = FireEagle::Location.parse(responses(:exact_location_chunk))
         | 
| 49 70 | 
             
                  @location.geom.should be_an_instance_of(GeoRuby::SimpleFeatures::Point)
         | 
| 50 71 | 
             
                end
         | 
| 51 72 |  | 
| 52 73 | 
             
                it "should be aliased as 'geo'" do
         | 
| 53 | 
            -
                  location =  | 
| 54 | 
            -
                  @location = FireEagle::Location.new(location)
         | 
| 74 | 
            +
                  @location = FireEagle::Location.parse(responses(:exact_location_chunk))
         | 
| 55 75 | 
             
                  @location.geo.should be_an_instance_of(GeoRuby::SimpleFeatures::Point)
         | 
| 56 76 | 
             
                end
         | 
| 57 | 
            -
             | 
| 58 77 | 
             
              end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
            end
         | 
| 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,205 +27,17 @@ 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
         | 
| 30 | 
            +
            XML_LOOKUP_RESPONSE = File.read(File.join(File.dirname(__FILE__), "responses", "lookup.xml"))
         | 
| 76 31 |  | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
            RESPONSE
         | 
| 82 | 
            -
             | 
| 83 | 
            -
            XML_LOOKUP_RESPONSE = <<-RESPONSE
         | 
| 84 | 
            -
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 85 | 
            -
            <rsp stat="ok">
         | 
| 86 | 
            -
              <querystring>q=30022</querystring>
         | 
| 87 | 
            -
              <locations start="0" total="9" count="9">
         | 
| 88 | 
            -
                <location>
         | 
| 89 | 
            -
                  <name>Alpharetta, GA 30022</name>
         | 
| 90 | 
            -
                  <place-id>IrhZMHuYA5s1fFi4Qw</place-id>
         | 
| 91 | 
            -
                </location>
         | 
| 92 | 
            -
                <location>
         | 
| 93 | 
            -
                  <name>Hannover, Region Hannover, Deutschland</name>
         | 
| 94 | 
            -
                  <place-id>88Hctc2bBZlhvlwbUg</place-id>
         | 
| 95 | 
            -
                </location>
         | 
| 96 | 
            -
                <location>
         | 
| 97 | 
            -
                  <name>Nîmes, Gard, France</name>
         | 
| 98 | 
            -
                  <place-id>Sut8q82bBZkF0s1eTg</place-id>
         | 
| 99 | 
            -
                </location>
         | 
| 100 | 
            -
                <location>
         | 
| 101 | 
            -
                  <name>Ceggia, Venezia, Italia</name>
         | 
| 102 | 
            -
                  <place-id>s9ulRieYA5TkNK9otw</place-id>
         | 
| 103 | 
            -
                </location>
         | 
| 104 | 
            -
                <location>
         | 
| 105 | 
            -
                  <name>Comitán de Domínguez, Comitan de Dominguez, México</name>
         | 
| 106 | 
            -
                  <place-id>.51HvYKbBZnSAeNHWw</place-id>
         | 
| 107 | 
            -
                </location>
         | 
| 108 | 
            -
                <location>
         | 
| 109 | 
            -
                  <name>Platanos Aitoloakarnanias, Etolia Kai Akarnania, Greece</name>
         | 
| 110 | 
            -
                  <place-id>CmfJ2H.YA5QKpS56HQ</place-id>
         | 
| 111 | 
            -
                </location>
         | 
| 112 | 
            -
                <location>
         | 
| 113 | 
            -
                  <name>Kraków, Kraków, Polska</name>
         | 
| 114 | 
            -
                  <place-id>9bYc0l.bA5vPTGscQg</place-id>
         | 
| 115 | 
            -
                </location>
         | 
| 116 | 
            -
                <location>
         | 
| 117 | 
            -
                  <name>Nakuru, Kenya</name>
         | 
| 118 | 
            -
                  <place-id>VDprypWYA5sujnZphA</place-id>
         | 
| 119 | 
            -
                </location>
         | 
| 120 | 
            -
                <location>
         | 
| 121 | 
            -
                  <name>Fez, Al Magreb</name>
         | 
| 122 | 
            -
                  <place-id>BxOaGgSYA5R40Nm1RA</place-id>
         | 
| 123 | 
            -
                </location>
         | 
| 124 | 
            -
              </locations>
         | 
| 32 | 
            +
            XML_FAIL_LOOKUP_RESPONSE = <<-RESPONSE
         | 
| 33 | 
            +
            <?xml version="1.0" encoding="utf-8"?>
         | 
| 34 | 
            +
            <rsp stat="fail">
         | 
| 35 | 
            +
              <err msg="Place can't be identified." code="6"/>
         | 
| 125 36 | 
             
            </rsp>
         | 
| 126 37 | 
             
            RESPONSE
         | 
| 127 38 |  | 
| 128 | 
            -
            XML_WITHIN_RESPONSE =  | 
| 129 | 
            -
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 130 | 
            -
            <rsp stat="ok">
         | 
| 131 | 
            -
              <users>
         | 
| 132 | 
            -
                <user token="MQdDrJgXMNJi">
         | 
| 133 | 
            -
                  <location-hierarchy>
         | 
| 134 | 
            -
                    <location best-guess="true">
         | 
| 135 | 
            -
                      <id>111541</id>
         | 
| 136 | 
            -
                      <georss:point>32.7093315125 -117.1650772095</georss:point>
         | 
| 137 | 
            -
                      <level>0</level>
         | 
| 138 | 
            -
                      <level-name>exact</level-name>
         | 
| 139 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 140 | 
            -
                      <name>333 W Harbor Dr, San Diego, CA</name>
         | 
| 141 | 
            -
                    </location>
         | 
| 142 | 
            -
                    <location best-guess="false">
         | 
| 143 | 
            -
                      <id>111551</id>
         | 
| 144 | 
            -
                      <georss:box>
         | 
| 145 | 
            -
                        32.6916618347 -117.2174377441 32.744140625 -117.1458892822
         | 
| 146 | 
            -
                      </georss:box>
         | 
| 147 | 
            -
                      <level>1</level>
         | 
| 148 | 
            -
                      <level-name>postal</level-name>
         | 
| 149 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 150 | 
            -
                      <name>San Diego, CA 92101</name>
         | 
| 151 | 
            -
                      <place-id>NpiXqwmYA5viX3K3Ew</place-id>
         | 
| 152 | 
            -
                      <woeid>12796255</woeid>
         | 
| 153 | 
            -
                    </location>
         | 
| 154 | 
            -
                    <location best-guess="false">
         | 
| 155 | 
            -
                      <id>111561</id>
         | 
| 156 | 
            -
                      <georss:box>
         | 
| 157 | 
            -
                        32.5349388123 -117.2884292603 33.1128082275 -116.9142913818
         | 
| 158 | 
            -
                      </georss:box>
         | 
| 159 | 
            -
                      <level>3</level>
         | 
| 160 | 
            -
                      <level-name>city</level-name>
         | 
| 161 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 162 | 
            -
                      <name>San Diego, CA</name>
         | 
| 163 | 
            -
                      <place-id>Nm4O.DebBZTYKUsu</place-id>
         | 
| 164 | 
            -
                      <woeid>2487889</woeid>
         | 
| 165 | 
            -
                    </location>
         | 
| 166 | 
            -
                    <location best-guess="false">
         | 
| 167 | 
            -
                      <id>111571</id>
         | 
| 168 | 
            -
                      <georss:box>
         | 
| 169 | 
            -
                        32.5342788696 -124.4150238037 42.0093803406 -114.1308135986
         | 
| 170 | 
            -
                      </georss:box>
         | 
| 171 | 
            -
                      <level>5</level>
         | 
| 172 | 
            -
                      <level-name>state</level-name>
         | 
| 173 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 174 | 
            -
                      <name>California</name>
         | 
| 175 | 
            -
                      <place-id>SVrAMtCbAphCLAtP</place-id>
         | 
| 176 | 
            -
                      <woeid>2347563</woeid>
         | 
| 177 | 
            -
                    </location>
         | 
| 178 | 
            -
                    <location best-guess="false">
         | 
| 179 | 
            -
                      <id>111581</id>
         | 
| 180 | 
            -
                      <georss:box>
         | 
| 181 | 
            -
                        18.9108390808 -167.2764129639 72.8960571289 -66.6879425049
         | 
| 182 | 
            -
                      </georss:box>
         | 
| 183 | 
            -
                      <level>6</level>
         | 
| 184 | 
            -
                      <level-name>country</level-name>
         | 
| 185 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 186 | 
            -
                      <name>United States</name>
         | 
| 187 | 
            -
                      <place-id>4KO02SibApitvSBieQ</place-id>
         | 
| 188 | 
            -
                      <woeid>23424977</woeid>
         | 
| 189 | 
            -
                    </location>
         | 
| 190 | 
            -
                  </location-hierarchy>
         | 
| 191 | 
            -
                </user>
         | 
| 192 | 
            -
                <user token="MQdDrJgXMNJi">
         | 
| 193 | 
            -
                  <location-hierarchy>
         | 
| 194 | 
            -
                    <location best-guess="true">
         | 
| 195 | 
            -
                      <id>111541</id>
         | 
| 196 | 
            -
                      <georss:point>32.7093315125 -117.1650772095</georss:point>
         | 
| 197 | 
            -
                      <level>0</level>
         | 
| 198 | 
            -
                      <level-name>exact</level-name>
         | 
| 199 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 200 | 
            -
                      <name>333 W Harbor Dr, San Diego, CA</name>
         | 
| 201 | 
            -
                    </location>
         | 
| 202 | 
            -
                    <location best-guess="false">
         | 
| 203 | 
            -
                      <id>111551</id>
         | 
| 204 | 
            -
                      <georss:box>
         | 
| 205 | 
            -
                        32.6916618347 -117.2174377441 32.744140625 -117.1458892822
         | 
| 206 | 
            -
                      </georss:box>
         | 
| 207 | 
            -
                      <level>1</level>
         | 
| 208 | 
            -
                      <level-name>postal</level-name>
         | 
| 209 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 210 | 
            -
                      <name>San Diego, CA 92101</name>
         | 
| 211 | 
            -
                      <place-id>NpiXqwmYA5viX3K3Ew</place-id>
         | 
| 212 | 
            -
                      <woeid>12796255</woeid>
         | 
| 213 | 
            -
                    </location>
         | 
| 214 | 
            -
                    <location best-guess="false">
         | 
| 215 | 
            -
                      <id>111561</id>
         | 
| 216 | 
            -
                      <georss:box>
         | 
| 217 | 
            -
                        32.5349388123 -117.2884292603 33.1128082275 -116.9142913818
         | 
| 218 | 
            -
                      </georss:box>
         | 
| 219 | 
            -
                      <level>3</level>
         | 
| 220 | 
            -
                      <level-name>city</level-name>
         | 
| 221 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 222 | 
            -
                      <name>San Diego, CA</name>
         | 
| 223 | 
            -
                      <place-id>Nm4O.DebBZTYKUsu</place-id>
         | 
| 224 | 
            -
                      <woeid>2487889</woeid>
         | 
| 225 | 
            -
                    </location>
         | 
| 226 | 
            -
                    <location best-guess="false">
         | 
| 227 | 
            -
                      <id>111571</id>
         | 
| 228 | 
            -
                      <georss:box>
         | 
| 229 | 
            -
                        32.5342788696 -124.4150238037 42.0093803406 -114.1308135986
         | 
| 230 | 
            -
                      </georss:box>
         | 
| 231 | 
            -
                      <level>5</level>
         | 
| 232 | 
            -
                      <level-name>state</level-name>
         | 
| 233 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 234 | 
            -
                      <name>California</name>
         | 
| 235 | 
            -
                      <place-id>SVrAMtCbAphCLAtP</place-id>
         | 
| 236 | 
            -
                      <woeid>2347563</woeid>
         | 
| 237 | 
            -
                    </location>
         | 
| 238 | 
            -
                    <location best-guess="false">
         | 
| 239 | 
            -
                      <id>111581</id>
         | 
| 240 | 
            -
                      <georss:box>
         | 
| 241 | 
            -
                        18.9108390808 -167.2764129639 72.8960571289 -66.6879425049
         | 
| 242 | 
            -
                      </georss:box>
         | 
| 243 | 
            -
                      <level>6</level>
         | 
| 244 | 
            -
                      <level-name>country</level-name>
         | 
| 245 | 
            -
                      <located-at>2008-03-03T09:05:16-08:00</located-at>
         | 
| 246 | 
            -
                      <name>United States</name>
         | 
| 247 | 
            -
                      <place-id>4KO02SibApitvSBieQ</place-id>
         | 
| 248 | 
            -
                      <woeid>23424977</woeid>
         | 
| 249 | 
            -
                    </location>
         | 
| 250 | 
            -
                  </location-hierarchy>
         | 
| 251 | 
            -
                </user>
         | 
| 252 | 
            -
              </users>
         | 
| 253 | 
            -
            </rsp>
         | 
| 254 | 
            -
            RESPONSE
         | 
| 39 | 
            +
            XML_WITHIN_RESPONSE = File.read(File.join(File.dirname(__FILE__), "responses", "within.xml"))
         | 
| 255 40 |  | 
| 256 | 
            -
            XML_RECENT_RESPONSE =  | 
| 257 | 
            -
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 258 | 
            -
            <rsp xmlns:georss="http://www.georss.org/georss" stat="ok">
         | 
| 259 | 
            -
              <users>
         | 
| 260 | 
            -
                <user located-at="2008-07-31T22:31:37+12:00" token="5pyl1xip0uh6"/>
         | 
| 261 | 
            -
                <user located-at="2008-07-31T21:49:03+12:00" token="i71yc3myixg3"/>
         | 
| 262 | 
            -
                <user located-at="2008-07-30T21:40:54+12:00" token="q1jm8nubnpsi"/>
         | 
| 263 | 
            -
              </users>
         | 
| 264 | 
            -
            </rsp>
         | 
| 265 | 
            -
            RESPONSE
         | 
| 41 | 
            +
            XML_RECENT_RESPONSE = File.read(File.join(File.dirname(__FILE__), "responses", "recent.xml"))
         | 
| 266 42 |  | 
| 267 | 
            -
            require File.dirname(__FILE__) + '/../lib/fireeagle'
         | 
| 43 | 
            +
            require File.dirname(__FILE__) + '/../lib/fireeagle'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: jnewland-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
         |