geokit 1.10.0 → 1.11.0

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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.hound.yml +2 -0
  4. data/.rubocop.yml +358 -0
  5. data/.travis.yml +4 -4
  6. data/CHANGELOG.md +16 -0
  7. data/Gemfile +3 -3
  8. data/README.markdown +19 -4
  9. data/Rakefile +11 -16
  10. data/fixtures/keys.yml +9 -0
  11. data/fixtures/vcr_cassettes/google_postal_town.yml +117 -0
  12. data/fixtures/vcr_cassettes/mapbox_forward_geocode.yml +30 -30
  13. data/fixtures/vcr_cassettes/mapbox_forward_geocode_city_only.yml +25 -25
  14. data/fixtures/vcr_cassettes/mapbox_forward_geocode_state_only.yml +71 -0
  15. data/fixtures/vcr_cassettes/mapbox_reverse_geocode.yml +25 -25
  16. data/fixtures/vcr_cassettes/test_component_filtering_off.yml +390 -0
  17. data/fixtures/vcr_cassettes/test_component_filtering_on.yml +164 -0
  18. data/fixtures/vcr_cassettes/test_component_filtering_on_without_filter.yml +404 -0
  19. data/geokit.gemspec +24 -23
  20. data/lib/geokit.rb +7 -7
  21. data/lib/geokit/core_ext.rb +1 -1
  22. data/lib/geokit/geo_loc.rb +25 -19
  23. data/lib/geokit/geocoders.rb +21 -30
  24. data/lib/geokit/geocoders/bing.rb +5 -4
  25. data/lib/geokit/geocoders/ca_geocoder.rb +10 -11
  26. data/lib/geokit/geocoders/fcc.rb +9 -9
  27. data/lib/geokit/geocoders/free_geo_ip.rb +8 -8
  28. data/lib/geokit/geocoders/geo_plugin.rb +7 -7
  29. data/lib/geokit/geocoders/geobytes.rb +10 -10
  30. data/lib/geokit/geocoders/geocodio.rb +14 -14
  31. data/lib/geokit/geocoders/geonames.rb +12 -12
  32. data/lib/geokit/geocoders/google.rb +89 -61
  33. data/lib/geokit/geocoders/ip.rb +9 -14
  34. data/lib/geokit/geocoders/mapbox.rb +30 -30
  35. data/lib/geokit/geocoders/mapquest.rb +12 -12
  36. data/lib/geokit/geocoders/maxmind.rb +1 -1
  37. data/lib/geokit/geocoders/opencage.rb +19 -19
  38. data/lib/geokit/geocoders/openstreetmap.rb +21 -19
  39. data/lib/geokit/geocoders/ripe.rb +7 -7
  40. data/lib/geokit/geocoders/us_geocoder.rb +5 -5
  41. data/lib/geokit/geocoders/yahoo.rb +46 -46
  42. data/lib/geokit/geocoders/yandex.rb +18 -17
  43. data/lib/geokit/inflectors.rb +5 -5
  44. data/lib/geokit/lat_lng.rb +5 -4
  45. data/lib/geokit/multi_geocoder.rb +4 -2
  46. data/lib/geokit/net_adapter/net_http.rb +3 -2
  47. data/lib/geokit/net_adapter/typhoeus.rb +2 -1
  48. data/lib/geokit/version.rb +1 -1
  49. data/test/coverage_loader.rb +25 -0
  50. data/test/helper.rb +18 -87
  51. data/test/test_base_geocoder.rb +44 -11
  52. data/test/test_bing_geocoder.rb +40 -48
  53. data/test/test_bounds.rb +1 -1
  54. data/test/test_ca_geocoder.rb +15 -15
  55. data/test/test_fcc_geocoder.rb +8 -9
  56. data/test/test_free_geo_ip_geocoder.rb +8 -10
  57. data/test/test_geo_plugin_geocoder.rb +21 -22
  58. data/test/test_geobytes_geocoder.rb +9 -11
  59. data/test/test_geocodio_geocoder.rb +12 -14
  60. data/test/test_geoloc.rb +48 -49
  61. data/test/test_geonames_geocoder.rb +19 -23
  62. data/test/test_google_geocoder.rb +197 -189
  63. data/test/test_inflector.rb +7 -7
  64. data/test/test_ipgeocoder.rb +32 -31
  65. data/test/test_latlng.rb +28 -28
  66. data/test/test_map_quest.rb +23 -27
  67. data/test/test_mapbox_geocoder.rb +38 -28
  68. data/test/test_mappable.rb +2 -2
  69. data/test/test_maxmind_geocoder.rb +16 -16
  70. data/test/test_multi_geocoder.rb +5 -5
  71. data/test/test_multi_ip_geocoder.rb +3 -3
  72. data/test/test_net_adapter.rb +4 -4
  73. data/test/test_opencage_geocoder.rb +58 -67
  74. data/test/test_openstreetmap_geocoder.rb +67 -65
  75. data/test/test_polygon.rb +4 -22
  76. data/test/test_ripe_geocoder.rb +21 -26
  77. data/test/test_us_geocoder.rb +21 -21
  78. data/test/test_useragent.rb +46 -0
  79. data/test/test_yahoo_geocoder.rb +35 -47
  80. data/test/test_yandex_geocoder.rb +29 -27
  81. data/test/vcr_loader.rb +18 -0
  82. metadata +20 -6
@@ -8,7 +8,7 @@ module Geokit
8
8
  private
9
9
 
10
10
  # Template method which does the geocode lookup.
11
- def self.do_geocode(address)
11
+ def self.do_geocode(address, _=nil)
12
12
  process :json, submit_url(address)
13
13
  end
14
14
 
@@ -22,18 +22,18 @@ module Geokit
22
22
  def self.parse_json(result)
23
23
  loc = new_loc
24
24
 
25
- coll = result["response"]["GeoObjectCollection"]
26
- return loc unless coll["metaDataProperty"]["GeocoderResponseMetaData"]["found"].to_i > 0
25
+ coll = result['response']['GeoObjectCollection']
26
+ return loc unless coll['metaDataProperty']['GeocoderResponseMetaData']['found'].to_i > 0
27
27
 
28
- l = coll["featureMember"][0]["GeoObject"]
28
+ l = coll['featureMember'][0]['GeoObject']
29
29
 
30
30
  loc.success = true
31
- ll = l["Point"]["pos"].split(" ")
31
+ ll = l['Point']['pos'].split(' ')
32
32
  loc.lng = ll.first
33
33
  loc.lat = ll.last
34
34
 
35
- country = l["metaDataProperty"]["GeocoderMetaData"]["AddressDetails"]["Country"]
36
- locality = country["Locality"] || country["AdministrativeArea"]["Locality"] || country["AdministrativeArea"]["SubAdministrativeArea"]["Locality"] rescue nil
35
+ country = l['metaDataProperty']['GeocoderMetaData']['AddressDetails']['Country']
36
+ locality = country['Locality'] || country['AdministrativeArea']['Locality'] || country['AdministrativeArea']['SubAdministrativeArea']['Locality'] rescue nil
37
37
  set_address_components(loc, l, country, locality)
38
38
  set_precision(loc, l, locality)
39
39
 
@@ -41,19 +41,20 @@ module Geokit
41
41
  end
42
42
 
43
43
  def self.set_address_components(loc, l, country, locality)
44
- loc.country_code = country["CountryNameCode"]
45
- loc.full_address = country["AddressLine"]
46
- loc.street_address = l["name"]
47
- loc.street_number = locality["Thoroughfare"]["Premise"]["PremiseNumber"] rescue nil
48
- loc.street_name = locality["Thoroughfare"]["ThoroughfareName"] rescue nil
49
- loc.city = locality["LocalityName"] rescue nil
50
- loc.state_name = country["AdministrativeArea"]["AdministrativeAreaName"] rescue nil
51
- loc.state ||= country["Locality"]["LocalityName"] rescue nil
44
+ loc.country_code = country['CountryNameCode']
45
+ loc.full_address = country['AddressLine']
46
+ loc.street_address = l['name']
47
+ loc.street_number = locality['Thoroughfare']['Premise']['PremiseNumber'] rescue nil
48
+ loc.street_name = locality['Thoroughfare']['ThoroughfareName'] rescue nil
49
+ loc.city = locality['LocalityName'] rescue nil
50
+ loc.state_name = country['AdministrativeArea']['AdministrativeAreaName'] rescue nil
51
+ loc.district = country['AdministrativeArea']['SubAdministrativeArea']['SubAdministrativeAreaName'] rescue nil
52
+ loc.state ||= country['Locality']['LocalityName'] rescue nil
52
53
  end
53
54
 
54
55
  def self.set_precision(loc, l, locality)
55
- loc.precision = l["metaDataProperty"]["GeocoderMetaData"]["precision"].sub(/exact/, "building").sub(/number|near/, "address").sub(/other/, "city")
56
- loc.precision = "country" unless locality
56
+ loc.precision = l['metaDataProperty']['GeocoderMetaData']['precision'].sub(/exact/, 'building').sub(/number|near/, 'address').sub(/other/, 'city')
57
+ loc.precision = 'country' unless locality
57
58
  end
58
59
  end
59
60
  end
@@ -1,4 +1,4 @@
1
- require "cgi"
1
+ require 'cgi'
2
2
 
3
3
  module Geokit
4
4
  module Inflector
@@ -9,15 +9,15 @@ module Geokit
9
9
  end
10
10
 
11
11
  def underscore(camel_cased_word)
12
- camel_cased_word.to_s.gsub(/::/, "/").
12
+ camel_cased_word.to_s.gsub(/::/, '/').
13
13
  gsub(/([A-Z]+)([A-Z][a-z])/u, '\1_\2').
14
14
  gsub(/([a-z\d])([A-Z])/u, '\1_\2').
15
- tr("-", "_").
15
+ tr('-', '_').
16
16
  downcase
17
17
  end
18
18
 
19
19
  def humanize(lower_case_and_underscored_word)
20
- lower_case_and_underscored_word.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize
20
+ lower_case_and_underscored_word.to_s.gsub(/_id$/, '').gsub(/_/, ' ').capitalize
21
21
  end
22
22
 
23
23
  def url_escape(s)
@@ -25,7 +25,7 @@ module Geokit
25
25
  end
26
26
 
27
27
  def camelize(str)
28
- str.split("_").map(&:capitalize).join
28
+ str.split('_').map(&:capitalize).join
29
29
  end
30
30
  end
31
31
  end
@@ -23,7 +23,7 @@ module Geokit
23
23
  end
24
24
 
25
25
  def self.from_json(json)
26
- new(json["lat"], json["lng"])
26
+ new(json['lat'], json['lng'])
27
27
  end
28
28
 
29
29
  # Latitude attribute setter; stored as a float.
@@ -102,7 +102,7 @@ module Geokit
102
102
  when Array
103
103
  thing.size == 2 or
104
104
  raise(ArgumentError,
105
- "Must initialize with an Array with both latitude and longitude")
105
+ 'Must initialize with an Array with both latitude and longitude')
106
106
  Geokit::LatLng.new(thing[0], thing[1])
107
107
  when LatLng # will also be true for GeoLocs
108
108
  thing
@@ -112,14 +112,15 @@ module Geokit
112
112
  else
113
113
  raise(ArgumentError,
114
114
  "#{thing} (#{thing.class}) cannot be normalized to a LatLng. " \
115
- "We tried interpreting it as an array, string, etc., but no dice.")
115
+ 'We tried interpreting it as an array, string, etc., but no dice.')
116
116
  end
117
117
  end
118
118
  end
119
119
 
120
120
  def self.from_string(thing)
121
121
  thing.strip!
122
- if match = thing.match(/(\-?\d+\.?\d*)[, ] ?(\-?\d+\.?\d*)$/)
122
+ match = thing.match(/(\-?\d+\.?\d*)[, ] ?(\-?\d+\.?\d*)$/)
123
+ if match
123
124
  Geokit::LatLng.new(match[1], match[2])
124
125
  else
125
126
  res = Geokit::Geocoders::MultiGeocoder.geocode(thing)
@@ -46,7 +46,9 @@ module Geokit
46
46
  # the configuration until one of the geocoders work, only this time it's
47
47
  # going to try to reverse geocode a geographical point.
48
48
  def self.do_reverse_geocode(latlng, *args)
49
- Geokit::Geocoders.provider_order.each do |provider|
49
+ provider_order = provider_order_for(latlng, args)
50
+
51
+ provider_order.each do |provider|
50
52
  klass = geocoder(provider)
51
53
  begin
52
54
  res = klass.send :reverse_geocode, latlng
@@ -69,7 +71,7 @@ module Geokit
69
71
  if args.last.is_a?(Hash) && args.last.key?(:provider_order)
70
72
  args.last.delete(:provider_order)
71
73
  else
72
- if /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.match(address)
74
+ if address.is_a?(String) && /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.match(address)
73
75
  Geokit::Geocoders.ip_provider_order
74
76
  else
75
77
  Geokit::Geocoders.provider_order
@@ -3,7 +3,8 @@ module Geokit
3
3
  class NetHttp
4
4
  def self.do_get(url)
5
5
  uri = URI(url)
6
- req = Net::HTTP::Get.new(uri.request_uri)
6
+ Geokit::Geocoders.useragent ? headers = {'User-Agent' => Geokit::Geocoders.useragent} : headers = {}
7
+ req = Net::HTTP::Get.new(uri.request_uri, headers)
7
8
  req.basic_auth(uri.user, uri.password) if uri.userinfo
8
9
  net_http_args = [uri.host, uri.port]
9
10
  if (proxy_uri_string = Geokit::Geocoders.proxy)
@@ -14,7 +15,7 @@ module Geokit
14
15
  proxy_uri.password]
15
16
  end
16
17
  http = Net::HTTP.new(*net_http_args)
17
- if uri.scheme == "https"
18
+ if uri.scheme == 'https'
18
19
  http.use_ssl = true
19
20
  http.verify_mode = Geokit::Geocoders.ssl_verify_mode
20
21
  end
@@ -2,7 +2,8 @@ module Geokit
2
2
  module NetAdapter
3
3
  class Typhoeus
4
4
  def self.do_get(url)
5
- ::Typhoeus.get(url.to_s)
5
+ headers = Geokit::Geocoders.useragent ? {'User-Agent' => Geokit::Geocoders.useragent} : {}
6
+ ::Typhoeus.get(url.to_s, :headers => headers)
6
7
  end
7
8
 
8
9
  def self.success?(response)
@@ -1,3 +1,3 @@
1
1
  module Geokit
2
- VERSION = "1.10.0"
2
+ VERSION = '1.11.0'
3
3
  end
@@ -0,0 +1,25 @@
1
+ unless ENV['COVERAGE'] == 'off'
2
+ COVERAGE_THRESHOLD = 96
3
+ require 'simplecov'
4
+ require 'simplecov-rcov'
5
+ require 'coveralls'
6
+ Coveralls.wear!
7
+
8
+ SimpleCov.formatters = [
9
+ SimpleCov::Formatter::RcovFormatter,
10
+ Coveralls::SimpleCov::Formatter
11
+ ]
12
+ SimpleCov.start do
13
+ add_filter '/test/'
14
+ add_group 'lib', 'lib'
15
+ end
16
+ SimpleCov.at_exit do
17
+ SimpleCov.result.format!
18
+ percent = SimpleCov.result.covered_percent
19
+ puts "Coverage is #{'%.2f' % percent}%"
20
+ unless percent >= COVERAGE_THRESHOLD
21
+ puts "Coverage must be above #{COVERAGE_THRESHOLD}%"
22
+ Kernel.exit(1)
23
+ end
24
+ end
25
+ end
@@ -1,45 +1,22 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  begin
4
- require "rubygems"
5
- require "bundler"
4
+ require 'rubygems'
5
+ require 'bundler'
6
6
  Bundler.setup
7
7
  rescue LoadError => e
8
8
  puts "Error loading bundler (#{e.message}): \"gem install bundler\" for bundler support."
9
9
  end
10
10
 
11
- require "geoip"
11
+ require 'geoip'
12
12
 
13
- if ENV["COVERAGE"]
14
- COVERAGE_THRESHOLD = 95
15
- require "simplecov"
16
- require "simplecov-rcov"
17
- require "coveralls"
18
- Coveralls.wear!
13
+ require 'coverage_loader'
14
+ require 'vcr_loader'
15
+ require 'test/unit'
16
+ require 'mocha/setup'
17
+ require 'net/http'
19
18
 
20
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
21
- SimpleCov::Formatter::RcovFormatter,
22
- Coveralls::SimpleCov::Formatter
23
- ]
24
- SimpleCov.start do
25
- add_filter "/test/"
26
- add_group "lib", "lib"
27
- end
28
- SimpleCov.at_exit do
29
- SimpleCov.result.format!
30
- percent = SimpleCov.result.covered_percent
31
- unless percent >= COVERAGE_THRESHOLD
32
- puts "Coverage must be above #{COVERAGE_THRESHOLD}%. It is #{'%.2f' % percent}%"
33
- Kernel.exit(1)
34
- end
35
- end
36
- end
37
-
38
- require "test/unit"
39
- require "mocha/setup"
40
- require "net/http"
41
-
42
- require File.join(File.dirname(__FILE__), "../lib/geokit.rb")
19
+ require File.join(File.dirname(__FILE__), '../lib/geokit.rb')
43
20
 
44
21
  class MockSuccess < Net::HTTPSuccess #:nodoc: all
45
22
  def initialize
@@ -58,11 +35,12 @@ class MockFailure < Net::HTTPServiceUnavailable #:nodoc: all
58
35
  end
59
36
 
60
37
  class TestHelper
61
- def self.last_url(url)
62
- @@url = url
63
- end
64
- def self.get_last_url
65
- @@url
38
+ def self.last_url(url = nil)
39
+ if url
40
+ @@url = url
41
+ else
42
+ @@url
43
+ end
66
44
  end
67
45
  end
68
46
 
@@ -78,7 +56,7 @@ Geokit::Geocoders::Geocoder.class_eval do
78
56
  end
79
57
  end
80
58
 
81
- def assert_array_in_delta(expected_array, actual_array, delta = 0.001, message = "")
59
+ def assert_array_in_delta(expected_array, actual_array, delta = 0.001, message = '')
82
60
  full_message = build_message(message, "<?> and\n<?> expected to be within\n<?> of each other.\n", expected_array, actual_array, delta)
83
61
  assert_block(full_message) do
84
62
  expected_array.zip(actual_array).all? do |expected_item, actual_item|
@@ -87,53 +65,6 @@ def assert_array_in_delta(expected_array, actual_array, delta = 0.001, message =
87
65
  end
88
66
  end
89
67
 
90
- require "vcr"
91
-
92
- VCR.configure do |c|
93
- c.before_record do |i|
94
- i.response.body.force_encoding("UTF-8")
95
- end
96
- c.cassette_library_dir = "fixtures/vcr_cassettes"
97
- c.hook_into :webmock # or :fakeweb
98
- # Yahoo BOSS Ignore changing params
99
- c.default_cassette_options = {
100
- match_requests_on: [:method,
101
- VCR.request_matchers.uri_without_params(
102
- :oauth_nonce, :oauth_timestamp, :oauth_signature
103
- ),
104
- ],
105
- }
106
- end
107
-
108
- # Base class for testing geocoders.
109
- class BaseGeocoderTest < Test::Unit::TestCase #:nodoc: all
110
- class Geokit::Geocoders::TestGeocoder < Geokit::Geocoders::Geocoder
111
- def self.do_get(url)
112
- sleep(2)
113
- end
114
- end
115
-
116
- # Defines common test fixtures.
117
- def setup
118
- Geokit::Geocoders.request_timeout = 10
119
- @address = "San Francisco, CA"
120
- @full_address = "100 Spear St, San Francisco, CA, 94105-1522, US"
121
- @full_address_short_zip = "100 Spear St, San Francisco, CA, 94105, US"
122
-
123
- @latlng = Geokit::LatLng.new(37.7742, -122.417068)
124
- @success = Geokit::GeoLoc.new({city: "SAN FRANCISCO", state: "CA", country_code: "US", lat: @latlng.lat, lng: @latlng.lng})
125
- @success.success = true
126
- end
127
-
128
- def test_timeout_call_web_service
129
- url = "http://www.anything.com"
130
- Geokit::Geocoders.request_timeout = 1
131
- assert_nil Geokit::Geocoders::TestGeocoder.call_geocoder_service(url)
132
- end
133
-
134
- def test_successful_call_web_service
135
- url = "http://www.anything.com"
136
- Geokit::Geocoders::Geocoder.expects(:do_get).with(url).returns("SUCCESS")
137
- assert_equal "SUCCESS", Geokit::Geocoders::Geocoder.call_geocoder_service(url)
138
- end
68
+ def assert_ll(lat_lng, lat, lng)
69
+ assert_equal lat_lng, Geokit::LatLng.new(lat, lng)
139
70
  end
@@ -1,33 +1,66 @@
1
- require File.join(File.dirname(__FILE__), "helper")
1
+ require File.join(File.dirname(__FILE__), 'helper')
2
2
 
3
3
  # Base class for testing geocoders.
4
4
  class BaseGeocoderTest < Test::Unit::TestCase #:nodoc: all
5
5
  class Geokit::Geocoders::TestGeocoder < Geokit::Geocoders::Geocoder
6
- def self.do_get(url)
7
- sleep(2)
6
+ def self.do_get(_url)
8
7
  end
9
8
  end
10
9
 
11
10
  # Defines common test fixtures.
12
11
  def setup
13
- @address = "San Francisco, CA"
14
- @full_address = "100 Spear St, San Francisco, CA, 94105-1522, US"
15
- @full_address_short_zip = "100 Spear St, San Francisco, CA, 94105, US"
12
+ @address = 'San Francisco, CA'
13
+ @full_address = '100 Spear St, San Francisco, CA, 94105-1522, US'
14
+ @full_address_short_zip = '100 Spear St, San Francisco, CA, 94105, US'
16
15
 
17
16
  @latlng = Geokit::LatLng.new(37.7742, -122.417068)
18
- @success = Geokit::GeoLoc.new({city: "SAN FRANCISCO", state: "CA", country_code: "US", lat: @latlng.lat, lng: @latlng.lng})
17
+ @success = Geokit::GeoLoc.new({city: 'SAN FRANCISCO', state: 'CA', country_code: 'US', lat: @latlng.lat, lng: @latlng.lng})
19
18
  @success.success = true
19
+
20
+ @keys = YAML.load(File.read('fixtures/keys.yml'))
20
21
  end
21
22
 
22
23
  def test_timeout_call_web_service
23
- url = "http://www.anything.com"
24
+ url = 'http://www.anything.com'
24
25
  Geokit::Geocoders.request_timeout = 1
25
26
  assert_nil Geokit::Geocoders::TestGeocoder.call_geocoder_service(url)
26
27
  end
27
28
 
28
29
  def test_successful_call_web_service
29
- url = "http://www.anything.com"
30
- Geokit::Geocoders::Geocoder.expects(:do_get).with(url).returns("SUCCESS")
31
- assert_equal "SUCCESS", Geokit::Geocoders::Geocoder.call_geocoder_service(url)
30
+ url = 'http://www.anything.com'
31
+ Geokit::Geocoders::Geocoder.expects(:do_get).with(url).returns('SUCCESS')
32
+ assert_equal 'SUCCESS', Geokit::Geocoders::Geocoder.call_geocoder_service(url)
33
+ end
34
+
35
+ private
36
+
37
+ def geocode(address, *args)
38
+ options = args.pop if args.last.is_a?(Hash)
39
+ vcr_name = args.first
40
+ args = [address]
41
+ args << options if options && !options.empty?
42
+ return geocoder_class.geocode(*args) unless vcr_name
43
+ VCR.use_cassette(vcr_name) do
44
+ geocoder_class.geocode(*args)
45
+ end
46
+ end
47
+
48
+ def reverse_geocode(lat_lng, *args)
49
+ options = args.pop if args.last.is_a?(Hash)
50
+ vcr_name = args.first
51
+ args = [lat_lng]
52
+ args << options if options && !options.empty?
53
+ return geocoder_class.reverse_geocode(*args) unless vcr_name
54
+ VCR.use_cassette(vcr_name) do
55
+ geocoder_class.reverse_geocode(*args)
56
+ end
57
+ end
58
+
59
+ def geocoder_class
60
+ @geocoder_class ||= Geokit::Geocoders.const_get(self.class.name.gsub('Test', ''))
61
+ end
62
+
63
+ def escape(string)
64
+ Geokit::Inflector.url_escape(string)
32
65
  end
33
66
  end
@@ -1,82 +1,74 @@
1
- require File.join(File.dirname(__FILE__), "helper")
2
-
3
- Geokit::Geocoders::BingGeocoder.key = "AuWcmtBIoPeOubm9BtcN44hTmWw_wNoJ5NEO2L0RaKrGAUE_nlwciKAqwapdq7k7"
1
+ require File.join(File.dirname(__FILE__), 'helper')
4
2
 
5
3
  class BingGeocoderTest < BaseGeocoderTest #:nodoc: all
6
4
  def setup
5
+ geocoder_class.key = 'AuWcmtBIoPeOubm9BtcN44hTmWw_wNoJ5NEO2L0RaKrGAUE_nlwciKAqwapdq7k7'
7
6
  super
7
+ @base_url = 'https://dev.virtualearth.net/REST/v1/Locations'
8
8
  end
9
9
 
10
10
  def assert_url(expected_url)
11
- assert_equal expected_url, TestHelper.get_last_url.gsub(/&oauth_[a-z_]+=[a-zA-Z0-9\-. %]+/, "")
11
+ assert_equal expected_url, TestHelper.last_url.gsub(/&oauth_[a-z_]+=[a-zA-Z0-9\-. %]+/, '')
12
12
  end
13
13
 
14
14
  # the testing methods themselves
15
15
  def test_bing_full_address
16
- VCR.use_cassette("bing_full") do
17
- key = Geokit::Geocoders::BingGeocoder.key
18
- url = "https://dev.virtualearth.net/REST/v1/Locations/#{URI.escape(@full_address)}?key=#{key}&o=xml"
19
- res = Geokit::Geocoders::BingGeocoder.geocode(@full_address)
20
- assert_equal "CA", res.state
21
- assert_equal "San Francisco", res.city
16
+ key = geocoder_class.key
17
+ url = "#{@base_url}/#{URI.escape(@full_address)}?key=#{key}&o=xml"
18
+ res = geocode(@full_address, :bing_full)
19
+ assert_equal 'CA', res.state
20
+ assert_equal 'San Francisco', res.city
22
21
  assert_array_in_delta [37.792332, -122.393791], res.to_a
23
- assert res.country == "United States"
24
- assert_equal "100 Spear St, San Francisco, CA 94105", res.full_address
25
- assert_equal "bing", res.provider
22
+ assert res.country == 'United States'
23
+ assert_equal '100 Spear St, San Francisco, CA 94105', res.full_address
24
+ assert_equal 'bing', res.provider
26
25
  assert_url url
27
- end
28
26
  end
29
27
 
30
28
  def test_bing_full_address_au
31
- address = "440 King William Street, Adelaide, Australia"
32
- VCR.use_cassette("bing_full_au") do
33
- key = Geokit::Geocoders::BingGeocoder.key
34
- url = "https://dev.virtualearth.net/REST/v1/Locations/#{URI.escape(address)}?key=#{key}&o=xml"
35
- res = Geokit::Geocoders::BingGeocoder.geocode(address)
36
- assert_equal "SA", res.state
37
- assert_equal "Adelaide", res.city
29
+ address = '440 King William Street, Adelaide, Australia'
30
+ key = geocoder_class.key
31
+ url = "#{@base_url}/#{URI.escape(address)}?key=#{key}&o=xml"
32
+ res = geocode(address, :bing_full_au)
33
+ assert_equal 'SA', res.state
34
+ assert_equal 'Adelaide', res.city
38
35
  assert_array_in_delta [-34.934582, 138.600784], res.to_a
39
- assert res.country == "Australia"
40
- assert_equal "402-440 King William St, Adelaide, SA 5000", res.full_address
41
- assert_equal "Australia", res.country
42
- assert_equal "bing", res.provider
36
+ assert res.country == 'Australia'
37
+ assert_equal '402-440 King William St, Adelaide, SA 5000', res.full_address
38
+ assert_equal 'Australia', res.country
39
+ assert_equal 'bing', res.provider
43
40
  assert_url url
44
- end
45
41
  end
46
42
 
47
43
  def test_bing_full_address_de
48
- address = "Platz der Republik 1, 11011 Berlin, Germany"
49
- VCR.use_cassette("bing_full_de") do
50
- key = Geokit::Geocoders::BingGeocoder.key
51
- url = "https://dev.virtualearth.net/REST/v1/Locations/#{URI.escape(address)}?key=#{key}&o=xml"
52
- res = Geokit::Geocoders::BingGeocoder.geocode(address)
53
- assert_equal "BE", res.state
54
- assert_equal "Berlin", res.city
44
+ address = 'Platz der Republik 1, 11011 Berlin, Germany'
45
+ key = geocoder_class.key
46
+ url = "#{@base_url}/#{URI.escape(address)}?key=#{key}&o=xml"
47
+ res = geocode(address, :bing_full_de)
48
+ assert_equal 'BE', res.state
49
+ assert_equal 'Berlin', res.city
55
50
  assert_array_in_delta [52.518596, 13.375502], res.to_a
56
- assert res.country == "Germany"
57
- assert_equal "Platz der Republik 1, 10557 Berlin", res.full_address
58
- assert_equal "bing", res.provider
59
- assert_equal "address", res.precision
51
+ assert res.country == 'Germany'
52
+ assert_equal 'Platz der Republik 1, 10557 Berlin', res.full_address
53
+ assert_equal 'bing', res.provider
54
+ assert_equal 'address', res.precision
60
55
  assert_equal 8, res.accuracy
61
56
  assert_url url
62
- end
63
57
  end
64
58
 
65
59
  def test_bing_country
66
- address = "Australia"
67
- VCR.use_cassette("bing_au") do
68
- key = Geokit::Geocoders::BingGeocoder.key
69
- url = "https://dev.virtualearth.net/REST/v1/Locations/#{URI.escape(address)}?key=#{key}&o=xml"
70
- res = Geokit::Geocoders::BingGeocoder.geocode(address)
60
+ address = 'Australia'
61
+ key = geocoder_class.key
62
+ url = "#{@base_url}/#{URI.escape(address)}?key=#{key}&o=xml"
63
+ res = geocode(address, :bing_au)
71
64
  assert_equal nil, res.state
72
65
  assert_equal nil, res.city
73
66
  assert_array_in_delta [-25.585, 134.504], res.to_a
74
- assert res.country == "Australia"
75
- assert_equal "Australia", res.full_address
76
- assert_equal "bing", res.provider
77
- assert_equal "country", res.precision
67
+ assert res.country == 'Australia'
68
+ assert_equal 'Australia', res.full_address
69
+ assert_equal 'bing', res.provider
70
+ assert_equal 'country', res.precision
78
71
  assert_equal 8, res.accuracy
79
72
  assert_url url
80
- end
81
73
  end
82
74
  end