geonames_api 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +2 -2
 - data/lib/geonames_api.rb +5 -15
 - data/lib/geonames_api/country.rb +6 -37
 - data/lib/geonames_api/hash.rb +5 -0
 - data/lib/geonames_api/object.rb +44 -0
 - data/lib/geonames_api/version.rb +1 -1
 - data/lib/geonames_api/weather.rb +10 -25
 - metadata +4 -2
 
    
        data/README.md
    CHANGED
    
    | 
         @@ -45,7 +45,7 @@ For a complete list of the config options, take a look at the `geonames_api.rb` 
     | 
|
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
            The geonames api uses the ISO code of the country as its natural key. 
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                > GeoNamesAPI::Country. 
     | 
| 
      
 48 
     | 
    
         
            +
                > GeoNamesAPI::Country.find("US")
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
                => #<GeoNamesAPI::Country:0x007fd43503dfc0 @country_code="US", @country_name="United States", @currency_code="USD", @fips_code="US", @iso_numeric=840, @north=49.388611, @capital="Washington", @continent_name="North America", @area_in_sq_km=9629091.0, @languages="en-US,es-US,haw,fr", @iso_alpha3="USA", @continent="NA", @south=24.544245, @east=-66.954811, @geoname_id=6252001, @west=-124.733253, @population=310232863>
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
         @@ -57,7 +57,7 @@ The geonames api uses the ISO code of the country as its natural key. 
     | 
|
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            The geonames api uses the latitude and longitude of the place as the parameters for its weather service.
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                > GeoNamesAPI::Weather. 
     | 
| 
      
 60 
     | 
    
         
            +
                > GeoNamesAPI::Weather.find(41.88,-87.68)
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
62 
     | 
    
         
             
                => #<GeoNamesAPI::Weather:0x007fab1c80dc10 @latitude=41.88, @longitude=-87.68, @weather_condition="n/a", @clouds="few clouds", @observation="KMDW 012051Z 28009KT 10SM FEW049 BKN070 11/M02 A2983 RMK AO2 SLP105 T01111022 55010", @wind_direction=280, @icao="KMDW", @sea_level_pressure=1010.5, @elevation=188, @country_code="US", @clouds_code="FEW", @lng=-87.75, @temperature=11.1, @dew_point="-2.2", @wind_speed=9, @humidity=39, @station_name="Chicago, Chicago Midway Airport", @datetime="2012-11-01 20:51:00", @lat=41.78333333333333>
         
     | 
| 
       63 
63 
     | 
    
         | 
    
        data/lib/geonames_api.rb
    CHANGED
    
    | 
         @@ -2,16 +2,16 @@ require 'open-uri' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'json'
         
     | 
| 
       3 
3 
     | 
    
         
             
            require 'active_support/all'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require "geonames_api/version"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "geonames_api/hash"
         
     | 
| 
      
 6 
     | 
    
         
            +
            require "geonames_api/object"
         
     | 
| 
       5 
7 
     | 
    
         
             
            require "geonames_api/country"
         
     | 
| 
       6 
8 
     | 
    
         
             
            require "geonames_api/weather"
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            module GeoNamesAPI
         
     | 
| 
       9 
     | 
    
         
            -
              BASE_URL = "http://api.geonames.org/"
         
     | 
| 
       10 
     | 
    
         
            -
              
         
     | 
| 
       11 
     | 
    
         
            -
              def self.to_url_params(params)
         
     | 
| 
       12 
     | 
    
         
            -
                "?" + params.collect { |key, value| "#{key}=#{value}" }.join("&")
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
              mattr_accessor :url
         
     | 
| 
      
 13 
     | 
    
         
            +
              @@url = "http://api.geonames.org/"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       15 
15 
     | 
    
         
             
              mattr_accessor :formatted
         
     | 
| 
       16 
16 
     | 
    
         
             
              @@formatted = true
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
         @@ -28,15 +28,5 @@ module GeoNamesAPI 
     | 
|
| 
       28 
28 
     | 
    
         
             
                { formatted: formatted, lang: lang, username: username, style: style }
         
     | 
| 
       29 
29 
     | 
    
         
             
              end
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
              def self.set_default_type(value)
         
     | 
| 
       32 
     | 
    
         
            -
                case value
         
     | 
| 
       33 
     | 
    
         
            -
                when /\A\d+\Z/
         
     | 
| 
       34 
     | 
    
         
            -
                  value.to_i
         
     | 
| 
       35 
     | 
    
         
            -
                when /\A\d*\.\d*\Z/
         
     | 
| 
       36 
     | 
    
         
            -
                  value.to_f
         
     | 
| 
       37 
     | 
    
         
            -
                else
         
     | 
| 
       38 
     | 
    
         
            -
                  value
         
     | 
| 
       39 
     | 
    
         
            -
                end
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
31 
     | 
    
         | 
| 
       42 
32 
     | 
    
         
             
            end
         
     | 
    
        data/lib/geonames_api/country.rb
    CHANGED
    
    | 
         @@ -1,47 +1,16 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module GeoNamesAPI
         
     | 
| 
       2 
     | 
    
         
            -
              class Country
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Country < GeoNamesAPI::Object
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
                METHOD = "countryInfoJSON"
         
     | 
| 
      
 5 
     | 
    
         
            +
                ID = ["country"]
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
                def self.all
         
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
       8 
     | 
    
         
            -
                    new.parse(response)
         
     | 
| 
       9 
     | 
    
         
            -
                  end
         
     | 
| 
       10 
     | 
    
         
            -
                end
         
     | 
| 
       11 
     | 
    
         
            -
                
         
     | 
| 
       12 
     | 
    
         
            -
                attr_accessor :country_code
         
     | 
| 
       13 
     | 
    
         
            -
                
         
     | 
| 
       14 
     | 
    
         
            -
                def initialize(country_code=nil)
         
     | 
| 
       15 
     | 
    
         
            -
                  self.country_code = country_code
         
     | 
| 
       16 
     | 
    
         
            -
                end 
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                def find
         
     | 
| 
       19 
     | 
    
         
            -
                  parse(JSON.load(open(url).read)["geonames"].first)
         
     | 
| 
       20 
     | 
    
         
            -
                  self
         
     | 
| 
       21 
     | 
    
         
            -
                end
         
     | 
| 
       22 
     | 
    
         
            -
                
         
     | 
| 
       23 
     | 
    
         
            -
                def parse(response)
         
     | 
| 
       24 
     | 
    
         
            -
                  response.each do |key, value|
         
     | 
| 
       25 
     | 
    
         
            -
                    attr_name = key.underscore.to_sym
         
     | 
| 
       26 
     | 
    
         
            -
                    self.class.send(:attr_accessor, attr_name) unless respond_to? attr_name
         
     | 
| 
       27 
     | 
    
         
            -
                    value = GeoNamesAPI.set_default_type(value)
         
     | 
| 
       28 
     | 
    
         
            -
                    send("#{attr_name}=", value)
         
     | 
| 
       29 
     | 
    
         
            -
                  end 
         
     | 
| 
       30 
     | 
    
         
            -
                  self
         
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                def params
         
     | 
| 
       34 
     | 
    
         
            -
                  GeoNamesAPI.params.merge({ country: country_code })
         
     | 
| 
       35 
     | 
    
         
            -
                end
         
     | 
| 
       36 
     | 
    
         
            -
                
         
     | 
| 
       37 
     | 
    
         
            -
                def url
         
     | 
| 
       38 
     | 
    
         
            -
                  self.class.url(params)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  where.collect { |response| new(response) }
         
     | 
| 
       39 
9 
     | 
    
         
             
                end
         
     | 
| 
       40 
10 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                def self. 
     | 
| 
       42 
     | 
    
         
            -
                   
     | 
| 
       43 
     | 
    
         
            -
                  GeoNamesAPI::BASE_URL + METHOD + GeoNamesAPI.to_url_params(params)
         
     | 
| 
      
 11 
     | 
    
         
            +
                def self.where(params={})
         
     | 
| 
      
 12 
     | 
    
         
            +
                  JSON.load(open(url(params)).read)["geonames"]
         
     | 
| 
       44 
13 
     | 
    
         
             
                end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       46 
15 
     | 
    
         
             
              end
         
     | 
| 
       47 
16 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module GeoNamesAPI
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Object
         
     | 
| 
      
 3 
     | 
    
         
            +
                    
         
     | 
| 
      
 4 
     | 
    
         
            +
                def self.find(*names)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  params, n = {}, 0
         
     | 
| 
      
 6 
     | 
    
         
            +
                  self::ID.each { |i| params[i] = names[n]; n+= 1 }
         
     | 
| 
      
 7 
     | 
    
         
            +
                  new(where(params).first)
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
                
         
     | 
| 
      
 10 
     | 
    
         
            +
                def self.url(params={})
         
     | 
| 
      
 11 
     | 
    
         
            +
                  GeoNamesAPI.url + self::METHOD + GeoNamesAPI.params.merge(params).to_url
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def initialize(response)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  parse(response)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end 
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def create_attribute(attribute)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  attr_name = attribute.underscore.to_sym
         
     | 
| 
      
 20 
     | 
    
         
            +
                  self.class.send(:attr_accessor, attr_name) unless respond_to?(attr_name)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  attr_name
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
                
         
     | 
| 
      
 24 
     | 
    
         
            +
                def set_default_type(value)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  case value
         
     | 
| 
      
 26 
     | 
    
         
            +
                  when /\A\d+\Z/
         
     | 
| 
      
 27 
     | 
    
         
            +
                    value.to_i
         
     | 
| 
      
 28 
     | 
    
         
            +
                  when /\A\d*\.\d*\Z/
         
     | 
| 
      
 29 
     | 
    
         
            +
                    value.to_f
         
     | 
| 
      
 30 
     | 
    
         
            +
                  else
         
     | 
| 
      
 31 
     | 
    
         
            +
                    value
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
                
         
     | 
| 
      
 35 
     | 
    
         
            +
                def parse(response)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  response.each do |key, value|
         
     | 
| 
      
 37 
     | 
    
         
            +
                    attr_name = create_attribute(key)
         
     | 
| 
      
 38 
     | 
    
         
            +
                    value = set_default_type(value)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    send("#{attr_name}=", value)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end 
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
                 
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/geonames_api/version.rb
    CHANGED
    
    
    
        data/lib/geonames_api/weather.rb
    CHANGED
    
    | 
         @@ -1,35 +1,20 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module GeoNamesAPI
         
     | 
| 
       2 
     | 
    
         
            -
              class Weather
         
     | 
| 
       3 
     | 
    
         
            -
                METHOD = "findNearByWeatherJSON"
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Weather < GeoNamesAPI::Object
         
     | 
| 
       4 
3 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
                 
     | 
| 
      
 4 
     | 
    
         
            +
                METHOD = "findNearByWeatherJSON"
         
     | 
| 
      
 5 
     | 
    
         
            +
                ID = ["lat", "lng"]
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                def  
     | 
| 
       8 
     | 
    
         
            -
                   
     | 
| 
      
 7 
     | 
    
         
            +
                def self.where(params={})
         
     | 
| 
      
 8 
     | 
    
         
            +
                  JSON.load(open(url(params)).read)["weatherObservation"]
         
     | 
| 
       9 
9 
     | 
    
         
             
                end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
                def  
     | 
| 
       12 
     | 
    
         
            -
                   
     | 
| 
       13 
     | 
    
         
            -
                  self
         
     | 
| 
      
 11 
     | 
    
         
            +
                def self.url(params)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  GeoNamesAPI.url + METHOD + GeoNamesAPI.params.merge(params).to_url
         
     | 
| 
       14 
13 
     | 
    
         
             
                end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                def  
     | 
| 
       17 
     | 
    
         
            -
                  response 
     | 
| 
       18 
     | 
    
         
            -
                    attr_name = key.underscore.to_sym
         
     | 
| 
       19 
     | 
    
         
            -
                    self.class.send(:attr_accessor, attr_name) unless respond_to? attr_name
         
     | 
| 
       20 
     | 
    
         
            -
                    value = GeoNamesAPI.set_default_type(value)
         
     | 
| 
       21 
     | 
    
         
            -
                    send("#{attr_name}=", value)
         
     | 
| 
       22 
     | 
    
         
            -
                  end 
         
     | 
| 
       23 
     | 
    
         
            -
                  self
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def initialize(response)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  parse(response)
         
     | 
| 
       24 
17 
     | 
    
         
             
                end
         
     | 
| 
       25 
18 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                def params
         
     | 
| 
       27 
     | 
    
         
            -
                  GeoNamesAPI.params.merge({ lat: latitude, lng: longitude })
         
     | 
| 
       28 
     | 
    
         
            -
                end
         
     | 
| 
       29 
     | 
    
         
            -
                    
         
     | 
| 
       30 
     | 
    
         
            -
                def url
         
     | 
| 
       31 
     | 
    
         
            -
                  GeoNamesAPI::BASE_URL + METHOD + GeoNamesAPI.to_url_params(params)
         
     | 
| 
       32 
     | 
    
         
            -
                end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
19 
     | 
    
         
             
              end
         
     | 
| 
       35 
20 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: geonames_api
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.2
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012-11- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-11-02 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: activesupport
         
     | 
| 
         @@ -43,6 +43,8 @@ files: 
     | 
|
| 
       43 
43 
     | 
    
         
             
            - geonames_api.gemspec
         
     | 
| 
       44 
44 
     | 
    
         
             
            - lib/geonames_api.rb
         
     | 
| 
       45 
45 
     | 
    
         
             
            - lib/geonames_api/country.rb
         
     | 
| 
      
 46 
     | 
    
         
            +
            - lib/geonames_api/hash.rb
         
     | 
| 
      
 47 
     | 
    
         
            +
            - lib/geonames_api/object.rb
         
     | 
| 
       46 
48 
     | 
    
         
             
            - lib/geonames_api/version.rb
         
     | 
| 
       47 
49 
     | 
    
         
             
            - lib/geonames_api/weather.rb
         
     | 
| 
       48 
50 
     | 
    
         
             
            homepage: https://github.com/buytruckload/geonames_api
         
     |