geocoder 1.1.9 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of geocoder might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +9 -5
- data/CHANGELOG.md +19 -0
- data/README.md +175 -10
- data/Rakefile +1 -1
- data/gemfiles/Gemfile.mongoid-2.4.x +1 -0
- data/lib/generators/geocoder/maxmind/geolite_city_generator.rb +28 -0
- data/lib/generators/geocoder/maxmind/geolite_country_generator.rb +28 -0
- data/lib/generators/geocoder/maxmind/templates/migration/geolite_city.rb +27 -0
- data/lib/generators/geocoder/maxmind/templates/migration/geolite_country.rb +17 -0
- data/lib/geocoder.rb +4 -12
- data/lib/geocoder/cache.rb +3 -2
- data/lib/geocoder/calculations.rb +39 -0
- data/lib/geocoder/configuration.rb +1 -7
- data/lib/geocoder/ip_address.rb +12 -0
- data/lib/geocoder/lookup.rb +10 -1
- data/lib/geocoder/lookups/baidu.rb +7 -6
- data/lib/geocoder/lookups/baidu_ip.rb +54 -0
- data/lib/geocoder/lookups/base.rb +37 -9
- data/lib/geocoder/lookups/bing.rb +10 -5
- data/lib/geocoder/lookups/cloudmade.rb +35 -0
- data/lib/geocoder/lookups/freegeoip.rb +5 -1
- data/lib/geocoder/lookups/geocodio.rb +42 -0
- data/lib/geocoder/lookups/google_premier.rb +1 -1
- data/lib/geocoder/lookups/here.rb +62 -0
- data/lib/geocoder/lookups/mapquest.rb +2 -1
- data/lib/geocoder/lookups/maxmind_local.rb +58 -0
- data/lib/geocoder/lookups/nominatim.rb +8 -0
- data/lib/geocoder/lookups/smarty_streets.rb +45 -0
- data/lib/geocoder/lookups/yahoo.rb +1 -1
- data/lib/geocoder/models/active_record.rb +5 -3
- data/lib/geocoder/models/base.rb +1 -4
- data/lib/geocoder/models/mongo_base.rb +4 -2
- data/lib/geocoder/query.rb +4 -4
- data/lib/geocoder/railtie.rb +1 -1
- data/lib/geocoder/request.rb +10 -8
- data/lib/geocoder/results/baidu_ip.rb +62 -0
- data/lib/geocoder/results/cloudmade.rb +39 -0
- data/lib/geocoder/results/geocodio.rb +66 -0
- data/lib/geocoder/results/here.rb +62 -0
- data/lib/geocoder/results/maxmind_local.rb +49 -0
- data/lib/geocoder/results/smarty_streets.rb +106 -0
- data/lib/geocoder/results/test.rb +20 -3
- data/lib/geocoder/results/yandex.rb +7 -3
- data/lib/geocoder/sql.rb +16 -15
- data/lib/geocoder/stores/active_record.rb +6 -2
- data/lib/geocoder/stores/base.rb +8 -1
- data/lib/geocoder/version.rb +1 -1
- data/lib/maxmind_database.rb +109 -0
- data/lib/oauth_util.rb +1 -1
- data/lib/tasks/geocoder.rake +3 -1
- data/lib/tasks/maxmind.rake +73 -0
- data/test/fixtures/baidu_ip_202_198_16_3 +19 -0
- data/test/fixtures/baidu_ip_invalid_key +1 -0
- data/test/fixtures/baidu_ip_no_results +1 -0
- data/test/fixtures/cloudmade_invalid_key +1 -0
- data/test/fixtures/cloudmade_madison_square_garden +1 -0
- data/test/fixtures/cloudmade_no_results +1 -0
- data/test/fixtures/geocodio_1101_pennsylvania_ave +1 -0
- data/test/fixtures/geocodio_bad_api_key +3 -0
- data/test/fixtures/geocodio_invalid +4 -0
- data/test/fixtures/geocodio_no_results +1 -0
- data/test/fixtures/geocodio_over_query_limit +4 -0
- data/test/fixtures/here_madison_square_garden +72 -0
- data/test/fixtures/here_no_results +8 -0
- data/test/fixtures/nominatim_over_limit +1 -0
- data/test/fixtures/smarty_streets_11211 +1 -0
- data/test/fixtures/smarty_streets_madison_square_garden +47 -0
- data/test/fixtures/smarty_streets_no_results +1 -0
- data/test/fixtures/yandex_canada_rue_dupuis_14 +446 -0
- data/test/fixtures/yandex_new_york +1 -0
- data/test/integration/http_client_test.rb +25 -0
- data/test/mongoid_test_helper.rb +2 -2
- data/test/test_helper.rb +98 -30
- data/test/{active_record_test.rb → unit/active_record_test.rb} +4 -3
- data/test/{cache_test.rb → unit/cache_test.rb} +3 -1
- data/test/{calculations_test.rb → unit/calculations_test.rb} +22 -13
- data/test/{configuration_test.rb → unit/configuration_test.rb} +4 -27
- data/test/{error_handling_test.rb → unit/error_handling_test.rb} +10 -9
- data/test/{geocoder_test.rb → unit/geocoder_test.rb} +26 -7
- data/test/{https_test.rb → unit/https_test.rb} +4 -3
- data/test/unit/ip_address_test.rb +24 -0
- data/test/{lookup_test.rb → unit/lookup_test.rb} +33 -20
- data/test/unit/lookups/bing_test.rb +68 -0
- data/test/unit/lookups/dstk_test.rb +26 -0
- data/test/unit/lookups/esri_test.rb +48 -0
- data/test/unit/lookups/freegeoip_test.rb +27 -0
- data/test/unit/lookups/geocoder_ca_test.rb +17 -0
- data/test/unit/lookups/geocodio_test.rb +55 -0
- data/test/unit/lookups/google_premier_test.rb +22 -0
- data/test/unit/lookups/google_test.rb +84 -0
- data/test/unit/lookups/mapquest_test.rb +60 -0
- data/test/unit/lookups/maxmind_local_test.rb +28 -0
- data/test/unit/lookups/maxmind_test.rb +63 -0
- data/test/unit/lookups/nominatim_test.rb +31 -0
- data/test/unit/lookups/smarty_streets_test.rb +71 -0
- data/test/unit/lookups/yahoo_test.rb +35 -0
- data/test/{method_aliases_test.rb → unit/method_aliases_test.rb} +5 -4
- data/test/unit/model_test.rb +38 -0
- data/test/{mongoid_test.rb → unit/mongoid_test.rb} +10 -9
- data/test/unit/near_test.rb +87 -0
- data/test/{oauth_util_test.rb → unit/oauth_util_test.rb} +3 -2
- data/test/{proxy_test.rb → unit/proxy_test.rb} +2 -1
- data/test/{query_test.rb → unit/query_test.rb} +7 -8
- data/test/unit/rake_task_test.rb +21 -0
- data/test/{request_test.rb → unit/request_test.rb} +8 -2
- data/test/{result_test.rb → unit/result_test.rb} +29 -1
- data/test/{test_mode_test.rb → unit/test_mode_test.rb} +12 -1
- metadata +80 -27
- data/test/custom_block_test.rb +0 -32
- data/test/integration/smoke_test.rb +0 -26
- data/test/near_test.rb +0 -61
- data/test/services_test.rb +0 -393
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..", "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class GooglePremierTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Geocoder.configure(lookup: :google_premier)
|
9
|
+
set_api_key!(:google_premier)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_result_components
|
13
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
14
|
+
assert_equal "Manhattan", result.address_components_of_type(:sublocality).first['long_name']
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_query_url
|
18
|
+
Geocoder.configure(google_premier: {api_key: ["deadbeef", "gme-test", "test-dev"]})
|
19
|
+
query = Geocoder::Query.new("Madison Square Garden, New York, NY")
|
20
|
+
assert_equal "http://maps.googleapis.com/maps/api/geocode/json?address=Madison+Square+Garden%2C+New+York%2C+NY&channel=test-dev&client=gme-test&language=en&sensor=false&signature=doJvJqX7YJzgV9rJ0DnVkTGZqTg=", query.url
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..", "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class GoogleTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def test_google_result_components
|
8
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
9
|
+
assert_equal "Manhattan",
|
10
|
+
result.address_components_of_type(:sublocality).first['long_name']
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_google_result_components_contains_route
|
14
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
15
|
+
assert_equal "Penn Plaza",
|
16
|
+
result.address_components_of_type(:route).first['long_name']
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_google_result_components_contains_street_number
|
20
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
21
|
+
assert_equal "4",
|
22
|
+
result.address_components_of_type(:street_number).first['long_name']
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_google_returns_city_when_no_locality_in_result
|
26
|
+
result = Geocoder.search("no locality").first
|
27
|
+
assert_equal "Haram", result.city
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_google_city_results_returns_nil_if_no_matching_component_types
|
31
|
+
result = Geocoder.search("no city data").first
|
32
|
+
assert_equal nil, result.city
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_google_street_address_returns_formatted_street_address
|
36
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
37
|
+
assert_equal "4 Penn Plaza", result.street_address
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_google_precision
|
41
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
42
|
+
assert_equal "ROOFTOP",
|
43
|
+
result.precision
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_google_query_url_contains_bounds
|
47
|
+
lookup = Geocoder::Lookup::Google.new
|
48
|
+
url = lookup.query_url(Geocoder::Query.new(
|
49
|
+
"Some Intersection",
|
50
|
+
:bounds => [[40.0, -120.0], [39.0, -121.0]]
|
51
|
+
))
|
52
|
+
assert_match(/bounds=40.0+%2C-120.0+%7C39.0+%2C-121.0+/, url)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_google_query_url_contains_region
|
56
|
+
lookup = Geocoder::Lookup::Google.new
|
57
|
+
url = lookup.query_url(Geocoder::Query.new(
|
58
|
+
"Some Intersection",
|
59
|
+
:region => "gb"
|
60
|
+
))
|
61
|
+
assert_match(/region=gb/, url)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_google_query_url_contains_components_when_given_as_string
|
65
|
+
lookup = Geocoder::Lookup::Google.new
|
66
|
+
url = lookup.query_url(Geocoder::Query.new(
|
67
|
+
"Some Intersection",
|
68
|
+
:components => "locality:ES"
|
69
|
+
))
|
70
|
+
formatted = "components=" + CGI.escape("locality:ES")
|
71
|
+
assert url.include?(formatted), "Expected #{formatted} to be included in #{url}"
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_google_query_url_contains_components_when_given_as_array
|
75
|
+
lookup = Geocoder::Lookup::Google.new
|
76
|
+
url = lookup.query_url(Geocoder::Query.new(
|
77
|
+
"Some Intersection",
|
78
|
+
:components => ["country:ES", "locality:ES"]
|
79
|
+
))
|
80
|
+
formatted = "components=" + CGI.escape("country:ES|locality:ES")
|
81
|
+
assert url.include?(formatted), "Expected #{formatted} to be included in #{url}"
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..", "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class MapquestTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Geocoder.configure(lookup: :mapquest)
|
9
|
+
set_api_key!(:mapquest)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_url_contains_api_key
|
13
|
+
Geocoder.configure(mapquest: {api_key: "abc123"})
|
14
|
+
query = Geocoder::Query.new("Bluffton, SC")
|
15
|
+
assert_equal "http://www.mapquestapi.com/geocoding/v1/address?key=abc123&location=Bluffton%2C+SC", query.url
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_url_for_version_2
|
19
|
+
Geocoder.configure(mapquest: {api_key: "abc123", version: 2})
|
20
|
+
query = Geocoder::Query.new("Bluffton, SC")
|
21
|
+
assert_equal "http://www.mapquestapi.com/geocoding/v2/address?key=abc123&location=Bluffton%2C+SC", query.url
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_url_for_open_street_maps
|
25
|
+
Geocoder.configure(mapquest: {api_key: "abc123", open: true})
|
26
|
+
query = Geocoder::Query.new("Bluffton, SC")
|
27
|
+
assert_equal "http://open.mapquestapi.com/geocoding/v1/address?key=abc123&location=Bluffton%2C+SC", query.url
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_result_components
|
31
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
32
|
+
assert_equal "10001", result.postal_code
|
33
|
+
assert_equal "46 West 31st Street, New York, NY, 10001, US", result.address
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_no_results
|
37
|
+
assert_equal [], Geocoder.search("no results")
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_raises_exception_when_invalid_request
|
41
|
+
Geocoder.configure(always_raise: [Geocoder::InvalidRequest])
|
42
|
+
assert_raises Geocoder::InvalidRequest do
|
43
|
+
Geocoder.search("invalid request")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_raises_exception_when_invalid_api_key
|
48
|
+
Geocoder.configure(always_raise: [Geocoder::InvalidApiKey])
|
49
|
+
assert_raises Geocoder::InvalidApiKey do
|
50
|
+
Geocoder.search("invalid api key")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_raises_exception_when_error
|
55
|
+
Geocoder.configure(always_raise: [Geocoder::Error])
|
56
|
+
assert_raises Geocoder::Error do
|
57
|
+
Geocoder.search("error")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..", "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class MaxmindLocalTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Geocoder.configure(ip_lookup: :maxmind_local)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_result_attributes
|
12
|
+
result = Geocoder.search('8.8.8.8').first
|
13
|
+
assert_equal 'Mountain View, CA 94043, United States', result.address
|
14
|
+
assert_equal 'Mountain View', result.city
|
15
|
+
assert_equal 'CA', result.state
|
16
|
+
assert_equal 'United States', result.country
|
17
|
+
assert_equal 'US', result.country_code
|
18
|
+
assert_equal '94043', result.postal_code
|
19
|
+
assert_equal 37.41919999999999, result.latitude
|
20
|
+
assert_equal -122.0574, result.longitude
|
21
|
+
assert_equal [37.41919999999999, -122.0574], result.coordinates
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_loopback
|
25
|
+
results = Geocoder.search('127.0.0.1')
|
26
|
+
assert_equal [], results
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..", "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class MaxmindTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Geocoder.configure(ip_lookup: :maxmind)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_maxmind_result_on_ip_address_search
|
12
|
+
Geocoder.configure(maxmind: {service: :city_isp_org})
|
13
|
+
result = Geocoder.search("74.200.247.59").first
|
14
|
+
assert result.is_a?(Geocoder::Result::Maxmind)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_maxmind_result_knows_country_service_name
|
18
|
+
Geocoder.configure(maxmind: {service: :country})
|
19
|
+
assert_equal :country, Geocoder.search("24.24.24.21").first.service_name
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_maxmind_result_knows_city_service_name
|
23
|
+
Geocoder.configure(maxmind: {service: :city})
|
24
|
+
assert_equal :city, Geocoder.search("24.24.24.22").first.service_name
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_maxmind_result_knows_city_isp_org_service_name
|
28
|
+
Geocoder.configure(maxmind: {service: :city_isp_org})
|
29
|
+
assert_equal :city_isp_org, Geocoder.search("24.24.24.23").first.service_name
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_maxmind_result_knows_omni_service_name
|
33
|
+
Geocoder.configure(maxmind: {service: :omni})
|
34
|
+
assert_equal :omni, Geocoder.search("24.24.24.24").first.service_name
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_maxmind_special_result_components
|
38
|
+
Geocoder.configure(maxmind: {service: :omni})
|
39
|
+
result = Geocoder.search("24.24.24.24").first
|
40
|
+
assert_equal "Road Runner", result.isp_name
|
41
|
+
assert_equal "Cable/DSL", result.netspeed
|
42
|
+
assert_equal "rr.com", result.domain
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_maxmind_raises_exception_when_service_not_configured
|
46
|
+
Geocoder.configure(maxmind: {service: nil})
|
47
|
+
assert_raises Geocoder::ConfigurationError do
|
48
|
+
Geocoder::Query.new("24.24.24.24").url
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_maxmind_works_when_loopback_address_on_omni
|
53
|
+
Geocoder.configure(maxmind: {service: :omni})
|
54
|
+
result = Geocoder.search("127.0.0.1").first
|
55
|
+
assert_equal "", result.country_code
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_maxmind_works_when_loopback_address_on_country
|
59
|
+
Geocoder.configure(maxmind: {service: :country})
|
60
|
+
result = Geocoder.search("127.0.0.1").first
|
61
|
+
assert_equal "", result.country_code
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..", "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class NominatimTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Geocoder.configure(lookup: :nominatim)
|
9
|
+
set_api_key!(:nominatim)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_result_components
|
13
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
14
|
+
assert_equal "10001", result.postal_code
|
15
|
+
assert_equal "Madison Square Garden, West 31st Street, Long Island City, New York City, New York, 10001, United States of America", result.address
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_host_configuration
|
19
|
+
Geocoder.configure(nominatim: {host: "local.com"})
|
20
|
+
query = Geocoder::Query.new("Bluffton, SC")
|
21
|
+
assert_match %r(http://local\.com), query.url
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_raises_exception_when_over_query_limit
|
25
|
+
Geocoder.configure(:always_raise => [Geocoder::OverQueryLimitError])
|
26
|
+
l = Geocoder::Lookup.get(:nominatim)
|
27
|
+
assert_raises Geocoder::OverQueryLimitError do
|
28
|
+
l.send(:results, Geocoder::Query.new("over limit"))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..", "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class SmartyStreetsTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Geocoder.configure(lookup: :smarty_streets)
|
9
|
+
set_api_key!(:smarty_streets)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_url_contains_api_key
|
13
|
+
Geocoder.configure(:smarty_streets => {:api_key => 'blah'})
|
14
|
+
query = Geocoder::Query.new("Bluffton, SC")
|
15
|
+
assert_equal "http://api.smartystreets.com/street-address?auth-token=blah&street=Bluffton%2C+SC", query.url
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_query_for_address_geocode
|
19
|
+
query = Geocoder::Query.new("42 Wallaby Way Sydney, AU")
|
20
|
+
assert_match /api\.smartystreets\.com\/street-address\?/, query.url
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_query_for_zipcode_geocode
|
24
|
+
query = Geocoder::Query.new("22204")
|
25
|
+
assert_match /api\.smartystreets\.com\/zipcode\?/, query.url
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_query_for_zipfour_geocode
|
29
|
+
query = Geocoder::Query.new("22204-1603")
|
30
|
+
assert_match /api\.smartystreets\.com\/zipcode\?/, query.url
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_smarty_streets_result_components
|
34
|
+
result = Geocoder.search("Madison Square Garden, New York, NY").first
|
35
|
+
assert_equal "Penn", result.street
|
36
|
+
assert_equal "10121", result.zipcode
|
37
|
+
assert_equal "1703", result.zip4
|
38
|
+
assert_equal "New York", result.city
|
39
|
+
assert_equal "36061", result.fips
|
40
|
+
assert !result.zipcode_endpoint?
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_smarty_streets_result_components_with_zipcode_only_query
|
44
|
+
result = Geocoder.search("11211").first
|
45
|
+
assert_equal "Brooklyn", result.city
|
46
|
+
assert_equal "New York", result.state
|
47
|
+
assert_equal "NY", result.state_code
|
48
|
+
assert result.zipcode_endpoint?
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_no_results
|
52
|
+
results = Geocoder.search("no results")
|
53
|
+
assert_equal 0, results.length
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_raises_exception_on_error_http_status
|
57
|
+
error_statuses = {
|
58
|
+
'400' => Geocoder::InvalidRequest,
|
59
|
+
'401' => Geocoder::RequestDenied,
|
60
|
+
'402' => Geocoder::OverQueryLimitError
|
61
|
+
}
|
62
|
+
Geocoder.configure(always_raise: error_statuses.values)
|
63
|
+
lookup = Geocoder::Lookup.get(:smarty_streets)
|
64
|
+
error_statuses.each do |code, err|
|
65
|
+
assert_raises err do
|
66
|
+
response = MockHttpResponse.new(code: code.to_i)
|
67
|
+
lookup.send(:check_response_for_errors!, response)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..", "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class YahooTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Geocoder.configure(lookup: :yahoo)
|
9
|
+
set_api_key!(:yahoo)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_no_results
|
13
|
+
assert_equal [], Geocoder.search("no results")
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_error
|
17
|
+
silence_warnings do
|
18
|
+
assert_equal [], Geocoder.search("error")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_result_components
|
23
|
+
result = Geocoder.search("madison square garden").first
|
24
|
+
assert_equal "10001", result.postal_code
|
25
|
+
assert_equal "Madison Square Garden, New York, NY 10001, United States", result.address
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_raises_exception_when_over_query_limit
|
29
|
+
Geocoder.configure(:always_raise => [Geocoder::OverQueryLimitError])
|
30
|
+
l = Geocoder::Lookup.get(:yahoo)
|
31
|
+
assert_raises Geocoder::OverQueryLimitError do
|
32
|
+
l.send(:results, Geocoder::Query.new("over limit"))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,23 +1,24 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..")
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
|
-
class MethodAliasesTest <
|
5
|
+
class MethodAliasesTest < GeocoderTestCase
|
5
6
|
|
6
7
|
def test_distance_from_is_alias_for_distance_to
|
7
|
-
v =
|
8
|
+
v = Place.new(*geocoded_object_params(:msg))
|
8
9
|
v.latitude, v.longitude = [40.750354, -73.993371]
|
9
10
|
assert_equal v.distance_from([30, -94]), v.distance_to([30, -94])
|
10
11
|
end
|
11
12
|
|
12
13
|
def test_fetch_coordinates_is_alias_for_geocode
|
13
|
-
v =
|
14
|
+
v = Place.new(*geocoded_object_params(:msg))
|
14
15
|
coords = [40.750354, -73.993371]
|
15
16
|
assert_equal coords, v.fetch_coordinates
|
16
17
|
assert_equal coords, [v.latitude, v.longitude]
|
17
18
|
end
|
18
19
|
|
19
20
|
def test_fetch_address_is_alias_for_reverse_geocode
|
20
|
-
v =
|
21
|
+
v = PlaceReverseGeocoded.new(*reverse_geocoded_object_params(:msg))
|
21
22
|
address = "4 Penn Plaza, New York, NY 10001, USA"
|
22
23
|
assert_equal address, v.fetch_address
|
23
24
|
assert_equal address, v.address
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$: << File.join(File.dirname(__FILE__), "..")
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class ModelTest < GeocoderTestCase
|
6
|
+
|
7
|
+
def test_geocode_with_block_runs_block
|
8
|
+
e = PlaceWithCustomResultsHandling.new(*geocoded_object_params(:msg))
|
9
|
+
coords = [40.750354, -73.993371]
|
10
|
+
e.geocode
|
11
|
+
assert_equal coords.map{ |c| c.to_s }.join(','), e.coords_string
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_geocode_with_block_doesnt_auto_assign_coordinates
|
15
|
+
e = PlaceWithCustomResultsHandling.new(*geocoded_object_params(:msg))
|
16
|
+
e.geocode
|
17
|
+
assert_nil e.latitude
|
18
|
+
assert_nil e.longitude
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_reverse_geocode_with_block_runs_block
|
22
|
+
e = PlaceReverseGeocodedWithCustomResultsHandling.new(*reverse_geocoded_object_params(:msg))
|
23
|
+
e.reverse_geocode
|
24
|
+
assert_equal "US", e.country
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_reverse_geocode_with_block_doesnt_auto_assign_address
|
28
|
+
e = PlaceReverseGeocodedWithCustomResultsHandling.new(*reverse_geocoded_object_params(:msg))
|
29
|
+
e.reverse_geocode
|
30
|
+
assert_nil e.address
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_units_and_method
|
34
|
+
PlaceReverseGeocoded.reverse_geocoded_by :latitude, :longitude, method: :spherical, units: :km
|
35
|
+
assert_equal :km, PlaceReverseGeocoded.geocoder_options[:units]
|
36
|
+
assert_equal :spherical, PlaceReverseGeocoded.geocoder_options[:method]
|
37
|
+
end
|
38
|
+
end
|