geonames_api 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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.new("US").find
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.new(41.88,-87.68).find
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
 
@@ -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
@@ -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
- JSON.load(open(url).read)["geonames"].collect do |response|
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.url(params={})
42
- params = GeoNamesAPI.params.merge(params)
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,5 @@
1
+ class Hash
2
+ def to_url
3
+ "?" + collect { |key, value| "#{key}=#{value}" }.join("&")
4
+ end
5
+ 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
@@ -1,3 +1,3 @@
1
1
  module GeoNamesAPI
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,35 +1,20 @@
1
1
  module GeoNamesAPI
2
- class Weather
3
- METHOD = "findNearByWeatherJSON"
2
+ class Weather < GeoNamesAPI::Object
4
3
 
5
- attr_accessor :latitude, :longitude
4
+ METHOD = "findNearByWeatherJSON"
5
+ ID = ["lat", "lng"]
6
6
 
7
- def initialize(latitude, longitude)
8
- self.latitude, self.longitude = latitude, longitude
7
+ def self.where(params={})
8
+ JSON.load(open(url(params)).read)["weatherObservation"]
9
9
  end
10
10
 
11
- def find
12
- parse(JSON.load(open(url).read)["weatherObservation"])
13
- self
11
+ def self.url(params)
12
+ GeoNamesAPI.url + METHOD + GeoNamesAPI.params.merge(params).to_url
14
13
  end
15
-
16
- def parse(response)
17
- response.each do |key, value|
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.1
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-01 00:00:00.000000000 Z
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