bjeanes-geokit 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,45 @@
1
+ require File.join(File.dirname(__FILE__), 'test_base_geocoder')
2
+
3
+ Geokit::Geocoders::provider_order = [:google,:yahoo,:us]
4
+ Geokit::Geocoders::ip_provider_order = [:geo_plugin,:ip]
5
+
6
+
7
+ class MultiGeocoderIPAndAddressTest < BaseGeocoderTest #:nodoc: all
8
+
9
+ def setup
10
+ super
11
+ @ipv6_address = '2001:0db8:85a3:08d3:1319:8a2e:0370:7334'
12
+ @ipv4_address = '10.10.10.10'
13
+
14
+ @success = Geokit::GeoLoc.new({:city=>"SAN FRANCISCO", :state=>"CA", :country_code=>"US", :lat=>37.7742, :lng=>-122.417068})
15
+ @success.success = true
16
+ @failure = Geokit::GeoLoc.new
17
+ end
18
+
19
+ def test_ipv6_does_not_call_address_geocoder
20
+ Geokit::Geocoders::GoogleGeocoder.expects(:geocode).never
21
+ Geokit::Geocoders::YahooGeocoder.expects(:geocode).never
22
+ Geokit::Geocoders::UsGeocoder.expects(:geocode).never
23
+
24
+ assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@ipv6_address)
25
+ end
26
+
27
+ def test_ipv4_does_not_call_address_geocoder
28
+ Geokit::Geocoders::GoogleGeocoder.expects(:geocode).never
29
+ Geokit::Geocoders::YahooGeocoder.expects(:geocode).never
30
+ Geokit::Geocoders::UsGeocoder.expects(:geocode).never
31
+
32
+ assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@ipv4_address)
33
+ end
34
+
35
+ def test_address_does_not_call_ip_geocoders
36
+ Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).never
37
+ Geokit::Geocoders::IpGeocoder.expects(:geocode).never
38
+
39
+ Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address, {}).returns(@success)
40
+
41
+ assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@address)
42
+ end
43
+
44
+
45
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), 'test_base_geocoder')
2
+
3
+ Geokit::Geocoders::ip_provider_order=[:geo_plugin,:ip]
4
+
5
+ class MultiIpGeocoderTest < BaseGeocoderTest #:nodoc: all
6
+
7
+ def setup
8
+ @ip_address = '10.10.10.10'
9
+ @ipv6_address = '2001:0db8:85a3:08d3:1319:8a2e:0370:7334'
10
+ @success = Geokit::GeoLoc.new({:city=>"SAN FRANCISCO", :state=>"CA", :country_code=>"US", :lat=>37.7742, :lng=>-122.417068})
11
+ @success.success = true
12
+ @failure = Geokit::GeoLoc.new
13
+ end
14
+
15
+ def test_successful_first
16
+ Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address, {}).returns(@success)
17
+ assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address)
18
+ end
19
+
20
+ def test_failover
21
+ Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address, {}).returns(@failure)
22
+ Geokit::Geocoders::IpGeocoder.expects(:geocode).with(@ip_address, {}).returns(@success)
23
+ assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address)
24
+ end
25
+
26
+ def test_failure
27
+ Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address, {}).returns(@failure)
28
+ Geokit::Geocoders::IpGeocoder.expects(:geocode).with(@ip_address, {}).returns(@failure)
29
+ assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address)
30
+ end
31
+
32
+ def test_invalid_provider
33
+ temp = Geokit::Geocoders::ip_provider_order
34
+ Geokit::Geocoders.ip_provider_order = [:bogus]
35
+ assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address)
36
+ Geokit::Geocoders.ip_provider_order = temp
37
+ end
38
+
39
+ def test_ipv6_geocoding
40
+
41
+
42
+ end
43
+ end
@@ -0,0 +1,56 @@
1
+ require File.join(File.dirname(__FILE__), 'test_base_geocoder')
2
+
3
+ Geokit::Geocoders::geocoder_us = nil
4
+
5
+ class UsGeocoderTest < BaseGeocoderTest #:nodoc: all
6
+
7
+ GEOCODER_US_FULL='37.792528,-122.393981,100 Spear St,San Francisco,CA,94105'
8
+
9
+ def setup
10
+ super
11
+ @us_full_hash = {:city=>"San Francisco", :state=>"CA"}
12
+ @us_full_loc = Geokit::GeoLoc.new(@us_full_hash)
13
+ end
14
+
15
+ def test_geocoder_us
16
+ response = MockSuccess.new
17
+ response.expects(:body).returns(GEOCODER_US_FULL)
18
+ url = "http://geocoder.us/service/csv/geocode?address=#{Geokit::Inflector.url_escape(@address)}"
19
+ Geokit::Geocoders::UsGeocoder.expects(:call_geocoder_service).with(url).returns(response)
20
+ verify(Geokit::Geocoders::UsGeocoder.geocode(@address))
21
+ end
22
+
23
+ def test_geocoder_with_geo_loc
24
+ response = MockSuccess.new
25
+ response.expects(:body).returns(GEOCODER_US_FULL)
26
+ url = "http://geocoder.us/service/csv/geocode?address=#{Geokit::Inflector.url_escape(@address)}"
27
+ Geokit::Geocoders::UsGeocoder.expects(:call_geocoder_service).with(url).returns(response)
28
+ verify(Geokit::Geocoders::UsGeocoder.geocode(@us_full_loc))
29
+ end
30
+
31
+ def test_service_unavailable
32
+ response = MockFailure.new
33
+ url = "http://geocoder.us/service/csv/geocode?address=#{Geokit::Inflector.url_escape(@address)}"
34
+ Geokit::Geocoders::UsGeocoder.expects(:call_geocoder_service).with(url).returns(response)
35
+ assert !Geokit::Geocoders::UsGeocoder.geocode(@us_full_loc).success
36
+ end
37
+
38
+ def test_all_method
39
+ response = MockSuccess.new
40
+ response.expects(:body).returns(GEOCODER_US_FULL)
41
+ url = "http://geocoder.us/service/csv/geocode?address=#{Geokit::Inflector.url_escape(@address)}"
42
+ Geokit::Geocoders::UsGeocoder.expects(:call_geocoder_service).with(url).returns(response)
43
+ res=Geokit::Geocoders::UsGeocoder.geocode(@address)
44
+ assert_equal 1, res.all.size
45
+ end
46
+
47
+ private
48
+
49
+ def verify(location)
50
+ assert_equal "CA", location.state
51
+ assert_equal "San Francisco", location.city
52
+ assert_equal "37.792528,-122.393981", location.ll
53
+ assert location.is_us?
54
+ assert_equal "100 Spear St, San Francisco, CA, 94105, US", location.full_address #slightly different from yahoo
55
+ end
56
+ end
@@ -0,0 +1,105 @@
1
+ require File.join(File.dirname(__FILE__), 'test_base_geocoder')
2
+
3
+ Geokit::Geocoders::yahoo = 'Yahoo'
4
+
5
+ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
6
+ YAHOO_FULL=<<-EOF.strip
7
+ <?xml version="1.0"?>
8
+ <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:maps" xsi:schemaLocation="urn:yahoo:maps http://api.local.yahoo.com/MapsService/V1/GeocodeResponse.xsd"><Result precision="address"><Latitude>37.792406</Latitude><Longitude>-122.39411</Longitude><Address>100 SPEAR ST</Address><City>SAN FRANCISCO</City><State>CA</State><Zip>94105-1522</Zip><Country>US</Country></Result></ResultSet>
9
+ <!-- ws01.search.scd.yahoo.com uncompressed/chunked Mon Jan 29 16:23:43 PST 2007 -->
10
+ EOF
11
+
12
+ YAHOO_CITY=<<-EOF.strip
13
+ <?xml version="1.0"?>
14
+ <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:maps" xsi:schemaLocation="urn:yahoo:maps http://api.local.yahoo.com/MapsService/V1/GeocodeResponse.xsd"><Result precision="city"><Latitude>37.7742</Latitude><Longitude>-122.417068</Longitude><Address></Address><City>SAN FRANCISCO</City><State>CA</State><Zip></Zip><Country>US</Country></Result></ResultSet>
15
+ <!-- ws02.search.scd.yahoo.com uncompressed/chunked Mon Jan 29 18:00:28 PST 2007 -->
16
+ EOF
17
+
18
+ def setup
19
+ super
20
+ @yahoo_full_hash = {:street_address=>"100 Spear St", :city=>"San Francisco", :state=>"CA", :zip=>"94105-1522", :country_code=>"US"}
21
+ @yahoo_city_hash = {:city=>"San Francisco", :state=>"CA"}
22
+ @yahoo_full_loc = Geokit::GeoLoc.new(@yahoo_full_hash)
23
+ @yahoo_city_loc = Geokit::GeoLoc.new(@yahoo_city_hash)
24
+ end
25
+
26
+ # the testing methods themselves
27
+ def test_yahoo_full_address
28
+ response = MockSuccess.new
29
+ response.expects(:body).returns(YAHOO_FULL)
30
+ url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{Geokit::Inflector.url_escape(@address)}"
31
+ Geokit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
32
+ do_full_address_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@address))
33
+ end
34
+
35
+ def test_yahoo_full_address_accuracy
36
+ response = MockSuccess.new
37
+ response.expects(:body).returns(YAHOO_FULL)
38
+ url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{Geokit::Inflector.url_escape(@address)}"
39
+ Geokit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
40
+ res = Geokit::Geocoders::YahooGeocoder.geocode(@address)
41
+ assert_equal 8, res.accuracy
42
+ end
43
+
44
+ def test_yahoo_full_address_with_geo_loc
45
+ response = MockSuccess.new
46
+ response.expects(:body).returns(YAHOO_FULL)
47
+ url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{Geokit::Inflector.url_escape(@full_address)}"
48
+ Geokit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
49
+ do_full_address_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@yahoo_full_loc))
50
+ end
51
+
52
+ def test_yahoo_city
53
+ response = MockSuccess.new
54
+ response.expects(:body).returns(YAHOO_CITY)
55
+ url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{Geokit::Inflector.url_escape(@address)}"
56
+ Geokit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
57
+ do_city_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@address))
58
+ end
59
+
60
+ def test_yahoo_city_accuracy
61
+ response = MockSuccess.new
62
+ response.expects(:body).returns(YAHOO_CITY)
63
+ url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{Geokit::Inflector.url_escape(@address)}"
64
+ Geokit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
65
+ res = Geokit::Geocoders::YahooGeocoder.geocode(@address)
66
+ assert_equal 4, res.accuracy
67
+ end
68
+
69
+ def test_yahoo_city_with_geo_loc
70
+ response = MockSuccess.new
71
+ response.expects(:body).returns(YAHOO_CITY)
72
+ url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{Geokit::Inflector.url_escape(@address)}"
73
+ Geokit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
74
+ do_city_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@yahoo_city_loc))
75
+ end
76
+
77
+ def test_service_unavailable
78
+ response = MockFailure.new
79
+ url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{Geokit::Inflector.url_escape(@address)}"
80
+ Geokit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
81
+ assert !Geokit::Geocoders::YahooGeocoder.geocode(@yahoo_city_loc).success
82
+ end
83
+
84
+ private
85
+
86
+ # next two methods do the assertions for both address-level and city-level lookups
87
+ def do_full_address_assertions(res)
88
+ assert_equal "CA", res.state
89
+ assert_equal "San Francisco", res.city
90
+ assert_equal "37.792406,-122.39411", res.ll
91
+ assert res.is_us?
92
+ assert_equal "100 Spear St, San Francisco, CA, 94105-1522, US", res.full_address
93
+ assert_equal "yahoo", res.provider
94
+ end
95
+
96
+ def do_city_assertions(res)
97
+ assert_equal "CA", res.state
98
+ assert_equal "San Francisco", res.city
99
+ assert_equal "37.7742,-122.417068", res.ll
100
+ assert res.is_us?
101
+ assert_equal "San Francisco, CA, US", res.full_address
102
+ assert_nil res.street_address
103
+ assert_equal "yahoo", res.provider
104
+ end
105
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bjeanes-geokit
3
+ version: !ruby/object:Gem::Version
4
+ hash: 1
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 5
9
+ - 1
10
+ version: 1.5.1
11
+ platform: ruby
12
+ authors:
13
+ - Andre Lewis
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-07-09 00:00:00 +10:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rubyforge
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 2
32
+ - 0
33
+ - 4
34
+ version: 2.0.4
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: hoe
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 21
46
+ segments:
47
+ - 2
48
+ - 6
49
+ - 1
50
+ version: 2.6.1
51
+ type: :development
52
+ version_requirements: *id002
53
+ description: ""
54
+ email:
55
+ - andre@earthcode.com
56
+ executables: []
57
+
58
+ extensions: []
59
+
60
+ extra_rdoc_files:
61
+ - History.txt
62
+ - Manifest.txt
63
+ files:
64
+ - History.txt
65
+ - Manifest.txt
66
+ - README.markdown
67
+ - Rakefile
68
+ - geokit.gemspec
69
+ - lib/geokit.rb
70
+ - lib/geokit/geocoders.rb
71
+ - lib/geokit/mappable.rb
72
+ - test/test_base_geocoder.rb
73
+ - test/test_bounds.rb
74
+ - test/test_ca_geocoder.rb
75
+ - test/test_geoloc.rb
76
+ - test/test_geoplugin_geocoder.rb
77
+ - test/test_google_geocoder.rb
78
+ - test/test_google_reverse_geocoder.rb
79
+ - test/test_inflector.rb
80
+ - test/test_ipgeocoder.rb
81
+ - test/test_latlng.rb
82
+ - test/test_multi_geocoder.rb
83
+ - test/test_us_geocoder.rb
84
+ - test/test_yahoo_geocoder.rb
85
+ - test/test_multi_geocoder_ip_and_address.rb
86
+ - test/test_multi_ip_geocoder.rb
87
+ has_rdoc: true
88
+ homepage:
89
+ licenses: []
90
+
91
+ post_install_message:
92
+ rdoc_options:
93
+ - --main
94
+ - README.txt
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 3
103
+ segments:
104
+ - 0
105
+ version: "0"
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ hash: 3
112
+ segments:
113
+ - 0
114
+ version: "0"
115
+ requirements: []
116
+
117
+ rubyforge_project: bjeanes-geokit
118
+ rubygems_version: 1.3.7
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: Geokit provides geocoding and distance calculation in an easy-to-use API
122
+ test_files:
123
+ - test/test_base_geocoder.rb
124
+ - test/test_bounds.rb
125
+ - test/test_ca_geocoder.rb
126
+ - test/test_geoloc.rb
127
+ - test/test_geoplugin_geocoder.rb
128
+ - test/test_google_geocoder.rb
129
+ - test/test_google_reverse_geocoder.rb
130
+ - test/test_inflector.rb
131
+ - test/test_ipgeocoder.rb
132
+ - test/test_latlng.rb
133
+ - test/test_multi_geocoder.rb
134
+ - test/test_multi_geocoder_ip_and_address.rb
135
+ - test/test_multi_ip_geocoder.rb
136
+ - test/test_us_geocoder.rb
137
+ - test/test_yahoo_geocoder.rb