geokit 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
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