Pr0d1r2-geokit 1.3.2.1 → 1.3.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -14,8 +14,8 @@ end
14
14
 
15
15
  project=Hoe.new('geokit', Geokit::VERSION) do |p|
16
16
  #p.rubyforge_name = 'geokit' # if different than lowercase project name
17
- p.developer('Andre Lewis', 'andre@earthcode.com')
18
- p.summary="Geokit provides geocoding and distance calculation in an easy-to-use API"
17
+ p.developer('Andre Lewis', 'andre@earthcode.com', 'pr0d1r2@gmail.com')
18
+ p.summary="Geokit provides geocoding and distance calculation in an easy-to-use API with caching in MultiGeocoder"
19
19
  end
20
20
 
21
21
 
@@ -0,0 +1,8 @@
1
+ class GeokitCachedGenerator < RspecModelGenerator
2
+
3
+ def initialize(runtime_args, runtime_options = {})
4
+ runtime_args = ['CachedLocation', 'address:string', 'provider:string', 'lng:float', 'lat:float']
5
+ super
6
+ end
7
+
8
+ end
@@ -0,0 +1,5 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+
3
+ include Geokit::Cached::Model
4
+
5
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
2
+
3
+ describe <%= class_name %> do
4
+ before(:each) do
5
+ @valid_attributes = {
6
+ <% attributes.each_with_index do |attribute, attribute_index| -%>
7
+ :<%= attribute.name %> => <%= attribute.default_value %><%= attribute_index == attributes.length - 1 ? '' : ','%>
8
+ <% end -%>
9
+ }
10
+ end
11
+
12
+ it "should create a new instance given valid attributes" do
13
+ <%= class_name %>.create!(@valid_attributes)
14
+ end
15
+ end
data/lib/geokit.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Geokit
2
- VERSION = '1.3.2.1'
2
+ VERSION = '1.3.2.2'
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
@@ -0,0 +1,2 @@
1
+ require 'geokit/cached/model'
2
+ require 'geokit/cached/geocodable'
@@ -0,0 +1,34 @@
1
+ module Geokit
2
+ module Cached
3
+ module Geocodable
4
+
5
+ def self.included(base)
6
+ base.class_eval do
7
+ attr_accessor :provider
8
+ end
9
+ end
10
+
11
+ def geocoder
12
+ if cache_locations?
13
+ Geokit::Geocoders::CachedMultiGeocoder
14
+ else
15
+ Geokit::Geocoders::MultiGeocoder
16
+ end
17
+ end
18
+
19
+ def geocode_address_cached
20
+ @geocoder.geocode(complete_address)
21
+ self.lat, self.lng, self.provider = @geo.lat, @geo.lng, @geo.provider if @geo.success
22
+ end
23
+
24
+ def cache_location!
25
+ cached_location.cache!(:lat => lat, :lng => lng, :provider => provider) if cache_locations?
26
+ end
27
+
28
+ def cache_locations?
29
+ self.class::CACHE_LOCATIONS
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,58 @@
1
+ module Geokit
2
+ module Cached
3
+ module Model
4
+
5
+ def cache!(attributes)
6
+ self.attributes = attributes
7
+ save if new_record? || changed?
8
+ end
9
+
10
+ def update!
11
+ if !by_google? && geo.success
12
+ self.lat, self.lng, self.provider = geo.lat, geo.lng, geo.provider
13
+ save if changed?
14
+ end
15
+ end
16
+
17
+ def update_and_return!
18
+ update!
19
+ geoloc
20
+ end
21
+
22
+ def geo
23
+ @geo ||= Geokit::Geocoders::MultiGeocoder.geocode(address)
24
+ end
25
+
26
+ def fake_geoloc
27
+ geoloc = Geokit::GeoLoc.new
28
+ geoloc.lat, geoloc.lng, geoloc.provider, geoloc.success = lat, lng, provider, true
29
+ geoloc
30
+ end
31
+
32
+ def successful_geoloc
33
+ geo if geocoding_occured? && geo.success
34
+ end
35
+
36
+ def geoloc
37
+ successful_geoloc || fake_geoloc
38
+ end
39
+
40
+ def by_google?
41
+ provider == 'google'
42
+ end
43
+
44
+ def changed_to_google?
45
+ by_google? && provider_changed?
46
+ end
47
+
48
+ def changed?
49
+ lat_changed? || lng_changed? || changed_to_google?
50
+ end
51
+
52
+ def geocoding_occured?
53
+ !@geo.nil?
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,19 @@
1
+ module Geokit
2
+ module Geocoders
3
+ class CachedMultiGeocoder
4
+
5
+ class << self
6
+
7
+ def cached_location(location)
8
+ CachedLocation.find_by_address(location) || CachedLocation.new(:address => location)
9
+ end
10
+
11
+ def geocode(location)
12
+ cached_location(location).update_and_return!
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+ end
19
+ end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Pr0d1r2-geokit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2.1
4
+ version: 1.3.2.2
5
5
  platform: ruby
6
6
  authors:
7
- - Andre Lewis and Bill Eisenhauer
7
+ - Andre Lewis and Bill Eisenhauer and Pr0d1r2 (Marcin Nowicki)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
@@ -15,7 +15,7 @@ dependencies: []
15
15
 
16
16
  description: Geokit Gem
17
17
  email:
18
- - andre@earthcode.com / bill_eisenhauer@yahoo.com
18
+ - andre@earthcode.com / bill_eisenhauer@yahoo.com / pr0d1r2@gmail.com
19
19
  executables: []
20
20
 
21
21
  extensions: []
@@ -39,6 +39,13 @@ files:
39
39
  - test/test_multi_geocoder.rb
40
40
  - test/test_us_geocoder.rb
41
41
  - test/test_yahoo_geocoder.rb
42
+ - generators/geokit_cached/geokit_cached_generator.rb
43
+ - generators/geokit_cached/templates/model.rb
44
+ - generators/geokit_cached/templates/model_spec.rb
45
+ - lib/geokit/cached.rb
46
+ - lib/geokit/cached/geocodable.rb
47
+ - lib/geokit/cached/model.rb
48
+ - lib/geokit/geocoders/cached_multi_geocoder.rb
42
49
  has_rdoc: true
43
50
  homepage: http://geokit.rubyforge.org
44
51
  post_install_message: