geokit 1.2.5 → 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +21 -0
- data/README.markdown +1 -2
- data/Rakefile +2 -1
- data/geokit.gemspec +1 -1
- data/lib/geokit.rb +2 -2
- data/lib/geokit/geocoders.rb +5 -5
- data/lib/geokit/mappable.rb +6 -2
- data/test/test_base_geocoder.rb +7 -6
- data/test/test_geoloc.rb +8 -0
- data/test/test_geoplugin_geocoder.rb +3 -3
- data/test/test_ipgeocoder.rb +5 -5
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
=== 1.2.6 / 2009-03-19
|
2
|
+
* misc minor fixes
|
3
|
+
|
1
4
|
=== 1.2.5 / 2009-02-25
|
2
5
|
|
3
6
|
* fixed GeoLoc.to_yaml
|
@@ -27,3 +30,21 @@
|
|
27
30
|
* fixed a problem with columns with "distance" in their name
|
28
31
|
* added Geonames geocoder
|
29
32
|
* the gem and plugin are now hosted at Github.
|
33
|
+
|
34
|
+
=== 1.1.1 / 2008-01-20
|
35
|
+
* fixes for distance calculation (in-memory and database) when distances are either very small or 0.
|
36
|
+
* NOTE: older versions of MySQL/Postgres may not work. See readme for more info.
|
37
|
+
|
38
|
+
=== 1.1.0 / 2007-12-07
|
39
|
+
* Geokit is now Rails 2.0 / Edge friendly.
|
40
|
+
|
41
|
+
=== 1.0.0 / 2007-07-22
|
42
|
+
* see http://earthcode.com/blog/2007/07/new_geokit_release.html
|
43
|
+
* auto geocoding: an option to automatically geocode a model's address field on create
|
44
|
+
* in-memory sort-by-distance for arrays of location objects
|
45
|
+
* bounding box queries: `Location.find :all, :bounds=>[sw,ne]`
|
46
|
+
* improved performance by automatically adding a bounding box condition to radial queries
|
47
|
+
* new Bounds class for in-memory bounds-related operations
|
48
|
+
* ability to calculate heading and midpoint between two points
|
49
|
+
* ability to calculate endpoint given a point, heading, and distance
|
50
|
+
|
data/README.markdown
CHANGED
data/Rakefile
CHANGED
@@ -4,10 +4,11 @@ require 'rubygems'
|
|
4
4
|
require 'hoe'
|
5
5
|
require './lib/geokit.rb'
|
6
6
|
|
7
|
-
Hoe.new('geokit', Geokit::VERSION) do |p|
|
7
|
+
project=Hoe.new('geokit', Geokit::VERSION) do |p|
|
8
8
|
#p.rubyforge_name = 'geokit' # if different than lowercase project name
|
9
9
|
p.developer('Andre Lewis', 'andre@earthcode.com')
|
10
10
|
p.summary="Geokit provides geocoding and distance calculation in an easy-to-use API"
|
11
11
|
end
|
12
12
|
|
13
|
+
|
13
14
|
# vim: syntax=Ruby
|
data/geokit.gemspec
CHANGED
data/lib/geokit.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Geokit
|
2
|
-
VERSION = '1.2.
|
2
|
+
VERSION = '1.2.6'
|
3
3
|
# These defaults are used in Geokit::Mappable.distance_to and in acts_as_mappable
|
4
4
|
@@default_units = :miles
|
5
5
|
@@default_formula = :sphere
|
@@ -26,5 +26,5 @@ $: << path unless $:.include?(path)
|
|
26
26
|
require 'geokit/geocoders'
|
27
27
|
require 'geokit/mappable'
|
28
28
|
|
29
|
-
# make old-style module name "GeoKit"
|
29
|
+
# make old-style module name "GeoKit" equivalent to new-style "Geokit"
|
30
30
|
GeoKit=Geokit
|
data/lib/geokit/geocoders.rb
CHANGED
@@ -105,7 +105,7 @@ module Geokit
|
|
105
105
|
# empty one with a failed success code.
|
106
106
|
def self.geocode(address)
|
107
107
|
res = do_geocode(address)
|
108
|
-
return res.success ? res : GeoLoc.new
|
108
|
+
return res.success? ? res : GeoLoc.new
|
109
109
|
end
|
110
110
|
|
111
111
|
# Main method which calls the do_reverse_geocode template method which subclasses
|
@@ -113,7 +113,7 @@ module Geokit
|
|
113
113
|
# empty one with a failed success code.
|
114
114
|
def self.reverse_geocode(latlng)
|
115
115
|
res = do_reverse_geocode(latlng)
|
116
|
-
return res.success ? res : GeoLoc.new
|
116
|
+
return res.success? ? res : GeoLoc.new
|
117
117
|
end
|
118
118
|
|
119
119
|
# Call the geocoder service using the timeout if configured.
|
@@ -400,7 +400,7 @@ module Geokit
|
|
400
400
|
# Google can return multiple results as //Placemark elements.
|
401
401
|
# iterate through each and extract each placemark as a geoloc
|
402
402
|
doc.each_element('//Placemark') do |e|
|
403
|
-
extracted_geoloc = extract_placemark(e) # g is now an instance of
|
403
|
+
extracted_geoloc = extract_placemark(e) # g is now an instance of GeoLoc
|
404
404
|
if geoloc.nil?
|
405
405
|
# first time through, geoloc is still nil, so we make it the geoloc we just extracted
|
406
406
|
geoloc = extracted_geoloc
|
@@ -492,7 +492,7 @@ module Geokit
|
|
492
492
|
# longitude, city, and country code. Sets the success attribute to false if the ip
|
493
493
|
# parameter does not match an ip address.
|
494
494
|
def self.do_geocode(ip)
|
495
|
-
return
|
495
|
+
return GeoLoc.new if '0.0.0.0' == ip
|
496
496
|
return GeoLoc.new unless /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})?$/.match(ip)
|
497
497
|
url = "http://api.hostip.info/get_html.php?ip=#{ip}&position=true"
|
498
498
|
response = self.call_geocoder_service(url)
|
@@ -550,7 +550,7 @@ module Geokit
|
|
550
550
|
begin
|
551
551
|
klass = Geokit::Geocoders.const_get "#{provider.to_s.capitalize}Geocoder"
|
552
552
|
res = klass.send :geocode, address
|
553
|
-
return res if res.success
|
553
|
+
return res if res.success?
|
554
554
|
rescue
|
555
555
|
logger.error("Something has gone very wrong during geocoding, OR you have configured an invalid class name in Geokit::Geocoders::provider_order. Address: #{address}. Provider: #{provider}")
|
556
556
|
end
|
data/lib/geokit/mappable.rb
CHANGED
@@ -112,7 +112,7 @@ module Geokit
|
|
112
112
|
# Geocodes a location using the multi geocoder.
|
113
113
|
def geocode(location)
|
114
114
|
res = Geocoders::MultiGeocoder.geocode(location)
|
115
|
-
return res if res.success
|
115
|
+
return res if res.success?
|
116
116
|
raise Geokit::Geocoders::GeocodeError
|
117
117
|
end
|
118
118
|
|
@@ -270,7 +270,7 @@ module Geokit
|
|
270
270
|
return Geokit::LatLng.new(match[1],match[2])
|
271
271
|
else
|
272
272
|
res = Geokit::Geocoders::MultiGeocoder.geocode(thing)
|
273
|
-
return res if res.success
|
273
|
+
return res if res.success?
|
274
274
|
raise Geokit::Geocoders::GeocodeError
|
275
275
|
end
|
276
276
|
elsif thing.is_a?(Array) && thing.size==2
|
@@ -337,6 +337,10 @@ module Geokit
|
|
337
337
|
def is_us?
|
338
338
|
country_code == 'US'
|
339
339
|
end
|
340
|
+
|
341
|
+
def success?
|
342
|
+
success == true
|
343
|
+
end
|
340
344
|
|
341
345
|
# full_address is provided by google but not by yahoo. It is intended that the google
|
342
346
|
# geocoding method will provide the full address, whereas for yahoo it will be derived
|
data/test/test_base_geocoder.rb
CHANGED
@@ -17,6 +17,12 @@ end
|
|
17
17
|
# Base class for testing geocoders.
|
18
18
|
class BaseGeocoderTest < Test::Unit::TestCase #:nodoc: all
|
19
19
|
|
20
|
+
class Geokit::Geocoders::TestGeocoder < Geokit::Geocoders::Geocoder
|
21
|
+
def self.do_get(url)
|
22
|
+
sleep(2)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
20
26
|
# Defines common test fixtures.
|
21
27
|
def setup
|
22
28
|
@address = 'San Francisco, CA'
|
@@ -28,14 +34,9 @@ class BaseGeocoderTest < Test::Unit::TestCase #:nodoc: all
|
|
28
34
|
end
|
29
35
|
|
30
36
|
def test_timeout_call_web_service
|
31
|
-
Geokit::Geocoders::Geocoder.class_eval do
|
32
|
-
def self.do_get(url)
|
33
|
-
sleep(2)
|
34
|
-
end
|
35
|
-
end
|
36
37
|
url = "http://www.anything.com"
|
37
38
|
Geokit::Geocoders::timeout = 1
|
38
|
-
assert_nil Geokit::Geocoders::
|
39
|
+
assert_nil Geokit::Geocoders::TestGeocoder.call_geocoder_service(url)
|
39
40
|
end
|
40
41
|
|
41
42
|
def test_successful_call_web_service
|
data/test/test_geoloc.rb
CHANGED
@@ -13,6 +13,14 @@ class GeoLocTest < Test::Unit::TestCase #:nodoc: all
|
|
13
13
|
assert @loc.is_us?
|
14
14
|
end
|
15
15
|
|
16
|
+
def test_success
|
17
|
+
assert !@loc.success?
|
18
|
+
@loc.success = false
|
19
|
+
assert !@loc.success?
|
20
|
+
@loc.success = true
|
21
|
+
assert @loc.success?
|
22
|
+
end
|
23
|
+
|
16
24
|
def test_street_number
|
17
25
|
@loc.street_address = '123 Spear St.'
|
18
26
|
assert_equal '123', @loc.street_number
|
@@ -39,13 +39,13 @@ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
39
39
|
assert_equal "Minas Gerais", location.state
|
40
40
|
assert_equal "BR", location.country_code
|
41
41
|
assert_equal "geoPlugin", location.provider
|
42
|
-
assert location.success
|
42
|
+
assert location.success?
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_invalid_ip
|
46
46
|
location = GeoKit::Geocoders::GeoPluginGeocoder.geocode("pixrum")
|
47
47
|
assert_not_nil location
|
48
|
-
assert !location.success
|
48
|
+
assert !location.success?
|
49
49
|
end
|
50
50
|
|
51
51
|
def test_service_unavailable
|
@@ -54,6 +54,6 @@ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
54
54
|
GeoKit::Geocoders::GeoPluginGeocoder.expects(:call_geocoder_service).with(url).returns(failure)
|
55
55
|
location = GeoKit::Geocoders::GeoPluginGeocoder.geocode("10.10.10.10")
|
56
56
|
assert_not_nil location
|
57
|
-
assert !location.success
|
57
|
+
assert !location.success?
|
58
58
|
end
|
59
59
|
end
|
data/test/test_ipgeocoder.rb
CHANGED
@@ -42,7 +42,7 @@ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
42
42
|
assert_equal "IL", location.state
|
43
43
|
assert_equal "US", location.country_code
|
44
44
|
assert_equal "hostip", location.provider
|
45
|
-
assert location.success
|
45
|
+
assert location.success?
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_unicoded_lookup
|
@@ -58,7 +58,7 @@ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
58
58
|
assert_nil location.state
|
59
59
|
assert_equal "SE", location.country_code
|
60
60
|
assert_equal "hostip", location.provider
|
61
|
-
assert location.success
|
61
|
+
assert location.success?
|
62
62
|
end
|
63
63
|
|
64
64
|
def test_failed_lookup
|
@@ -68,13 +68,13 @@ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
68
68
|
GeoKit::Geocoders::IpGeocoder.expects(:call_geocoder_service).with(url).returns(failure)
|
69
69
|
location = GeoKit::Geocoders::IpGeocoder.geocode("10.10.10.10")
|
70
70
|
assert_not_nil location
|
71
|
-
assert !location.success
|
71
|
+
assert !location.success?
|
72
72
|
end
|
73
73
|
|
74
74
|
def test_invalid_ip
|
75
75
|
location = GeoKit::Geocoders::IpGeocoder.geocode("blah")
|
76
76
|
assert_not_nil location
|
77
|
-
assert !location.success
|
77
|
+
assert !location.success?
|
78
78
|
end
|
79
79
|
|
80
80
|
def test_service_unavailable
|
@@ -83,6 +83,6 @@ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
83
83
|
GeoKit::Geocoders::IpGeocoder.expects(:call_geocoder_service).with(url).returns(failure)
|
84
84
|
location = GeoKit::Geocoders::IpGeocoder.geocode("10.10.10.10")
|
85
85
|
assert_not_nil location
|
86
|
-
assert !location.success
|
86
|
+
assert !location.success?
|
87
87
|
end
|
88
88
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geokit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andre Lewis
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-03-
|
12
|
+
date: 2009-03-19 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|