geocoder_plus 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -23,4 +23,3 @@ Geokit::Geocoders::GoogleV3Geocoder.geocode('701 First Avenue Sunnyvale, Califor
23
23
 
24
24
  Copyright (c) 2011 Fajar A B. See LICENSE.txt for
25
25
  further details.
26
-
@@ -1,6 +1,13 @@
1
1
  = geocoder_plus
2
2
 
3
- Description goes here.
3
+ This gem has two additional geocoders for geokit gem, Yahoo! PlaceFinder and Google V3.
4
+ Google V3 code is taken from https://github.com/tello/google-v3-geocoder.
5
+
6
+ Example:
7
+
8
+ Geokit::Geocoders::YahooPlaceFinderGeocoder.geocode('701 First Avenue Sunnyvale, California 94089')
9
+ Geokit::Geocoders::GoogleV3Geocoder.geocode('701 First Avenue Sunnyvale, California 94089')
10
+
4
11
 
5
12
  == Contributing to geocoder_plus
6
13
 
@@ -15,5 +22,4 @@ Description goes here.
15
22
  == Copyright
16
23
 
17
24
  Copyright (c) 2011 Fajar A B. See LICENSE.txt for
18
- further details.
19
-
25
+ further details.
@@ -0,0 +1,55 @@
1
+ module Geokit
2
+ module Geocoders
3
+
4
+ @@cache = nil
5
+ @@hydra = nil
6
+ __define_accessors
7
+
8
+ # The Geocoder base class which defines the interface to be used by all
9
+ # other geocoders.
10
+ class Geocoder
11
+
12
+ private
13
+
14
+ def self.cache_query
15
+ @_cache ||= initialize_cache
16
+ end
17
+
18
+ # Set hydra and memcache if defined in configuration file
19
+ def self.initialize_cache
20
+ if (Geokit::Geocoders::cache && Geokit::Geocoders::hydra)
21
+ @cache = Geokit::Geocoders::cache
22
+ Geokit::Geocoders::hydra.cache_setter do |request|
23
+ @cache.set(request.cache_key, request.response, request.cache_timeout)
24
+ end
25
+
26
+ Geokit::Geocoders::hydra.cache_getter do |request|
27
+ @cache.get(request.cache_key) rescue nil
28
+ end
29
+ return true
30
+ end
31
+ end
32
+
33
+ # Wraps the geocoder call around a proxy if necessary.
34
+ # Use typhoeus and memcache if defined
35
+ def self.do_get(url)
36
+ uri = URI.parse(url)
37
+ if (cache_query)
38
+ req = Typhoeus::Request.new(url, :cache_timeout => 604800) # cache response for 1 week
39
+ Geokit::Geocoders::hydra.queue(req)
40
+ Geokit::Geocoders::hydra.run
41
+ return req.response
42
+ else
43
+ req = Net::HTTP::Get.new(url)
44
+ req.basic_auth(uri.user, uri.password) if uri.userinfo
45
+ res = Net::HTTP::Proxy(GeoKit::Geocoders::proxy_addr,
46
+ GeoKit::Geocoders::proxy_port,
47
+ GeoKit::Geocoders::proxy_user,
48
+ GeoKit::Geocoders::proxy_pass).start(uri.host, uri.port) { |http| http.get(uri.path + "?" + uri.query) }
49
+ return res
50
+ end
51
+ end
52
+ end
53
+
54
+ end
55
+ end
@@ -1,5 +1,28 @@
1
1
  require 'geokit'
2
2
  require 'geokit/geocoders.rb'
3
+ require 'geocoder'
3
4
  require 'yajl'
4
5
  require 'geocoders/yahoo_place_finder_geocoder'
5
- require 'geocoders/google_v3_geocoder'
6
+ require 'geocoders/google_v3_geocoder'
7
+
8
+
9
+
10
+ # finally, set up the http service Koala methods used to make requests
11
+ # you can use your own (for HTTParty, etc.) by calling Koala.http_service = YourModule
12
+ # def self.http_service=(service)
13
+ # self.send(:include, service)
14
+ # end
15
+
16
+ module GeocoderPlus
17
+
18
+ @use_typhoeus = true
19
+
20
+ # by default, try requiring Typhoeus -- if that works, use it
21
+ # if you have Typheous and don't want to use it (or want another service),
22
+ # you can run Koala.http_service = NetHTTPService (or MyHTTPService)
23
+ begin
24
+ require 'typhoeus'
25
+ rescue LoadError
26
+ puts "Typhoeus is not installed, using Net:HTTP. Install typhoeus to enable query caching."
27
+ end
28
+ end
@@ -10,7 +10,7 @@ module Geokit
10
10
  logger.debug "Making Geocode request to: #{geo_url}"
11
11
  res = self.call_geocoder_service(geo_url)
12
12
 
13
- return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
13
+ # return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
14
14
  json = res.body
15
15
  logger.debug "Google V3 geocoding. Address: #{address}. Result: #{json}"
16
16
  return self.convert_json_to_geoloc(json)
@@ -23,7 +23,7 @@ module Geokit
23
23
  def self.do_geocode(address, options={})
24
24
  address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address
25
25
  res = self.call_geocoder_service(self.get_url(address, options))
26
- return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
26
+ # return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
27
27
  logger.debug "Yahoo PlaceFinder geocoding. Address: #{address}. Result: #{res}"
28
28
 
29
29
  return self.parse_body(Yajl::Parser.parse(res.body))
@@ -2,6 +2,7 @@ require 'helper'
2
2
 
3
3
  class TestYahooPlaceFinderGeocoder < Test::Unit::TestCase
4
4
 
5
+ # TODO do test with mock result
5
6
  # default is true
6
7
  MOCK = false
7
8
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geocoder_plus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Fajar A B
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-06 00:00:00 +07:00
18
+ date: 2011-04-09 00:00:00 +07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -135,6 +135,7 @@ extra_rdoc_files:
135
135
  - README
136
136
  - README.rdoc
137
137
  files:
138
+ - lib/geocoder.rb
138
139
  - lib/geocoder_plus.rb
139
140
  - lib/geocoders/google_v3_geocoder.rb
140
141
  - lib/geocoders/yahoo_place_finder_geocoder.rb