geokit-rails 2.1.0 → 2.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 geokit-rails might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 344c3a01e104ef0d6b79be9cebe2ad8c1a2ca194
4
- data.tar.gz: 96b07a5c6ca0940aef6b3c1f659aae5b1e0fc36b
3
+ metadata.gz: ea862dfaa5a3d928db10ab95a7c65c5fce23491c
4
+ data.tar.gz: 6ffd65c47a279ed164c7d875078dc44d5d28ff78
5
5
  SHA512:
6
- metadata.gz: 2cdc20079f29590779baea71816ab3e64cd55f58bfb95bc930118a09a40aec9f8d7a12dc6e876f53bcbaf62241f0ea18868ef260a15e8a6cee8f5b9740c4e09d
7
- data.tar.gz: db71e76adac5e6ff9269c02926d9f053603874ff61ca87a404df80b9aabf4617fc94b2a189d3c96b8379f2eb15510bbd95312709fbfecc5d6dfa896bd0b0f30d
6
+ metadata.gz: 6f6b87d14fc319e5331327953f683201a08c164529ff2b5d2a52ed1ca266af0878b22453901405da5cb79576319b7f2bc40c2e8d6d66efbbd43abccde3069497
7
+ data.tar.gz: c60c6c131318bd68e34388250fb41a3c2934fd79e84a971c8946a6dc26e48dd1769928c4edba763d15e5c8b4251ae206321ceb671809319c8279735a8874186e
@@ -17,3 +17,5 @@ script: "bundle exec rake coverage"
17
17
  before_install:
18
18
  - gem install bundler
19
19
 
20
+ bundler_args: --retry 5
21
+ cache: bundler
@@ -3,7 +3,7 @@ Geokit Rails
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/geokit-rails.png)](http://badge.fury.io/rb/geokit-rails)
5
5
  [![Build Status](https://travis-ci.org/geokit/geokit-rails.png?branch=master)](https://travis-ci.org/geokit/geokit-rails)
6
- [![Coverage Status](https://coveralls.io/repos/geokit/geokit-rails/badge.png)](https://coveralls.io/r/geokit/geokit-rails)
6
+ [![Coverage Status](https://coveralls.io/repos/geokit/geokit-rails/badge.png?branch=master)](https://coveralls.io/r/geokit/geokit-rails)
7
7
  [![Dependency Status](https://gemnasium.com/geokit/geokit-rails.png?travis)](https://gemnasium.com/geokit/geokit-rails)
8
8
  [![Code Climate](https://codeclimate.com/github/geokit/geokit-rails.png)](https://codeclimate.com/github/geokit/geokit-rails)
9
9
 
@@ -49,7 +49,7 @@ Geokit provides key functionality for location-oriented Rails applications:
49
49
  in your database within a 50-mile radius.
50
50
  - IP-based location lookup utilizing hostip.info. Provide an IP address, and get
51
51
  city name and latitude/longitude in return
52
- - A before_filter helper to geocoder the user's location based on IP address,
52
+ - A before_action helper to geocoder the user's location based on IP address,
53
53
  and retain the location in a cookie.
54
54
  - Geocoding from multiple providers. It provides a fail-over mechanism, in case
55
55
  your input fails to geocode in one service. Geocoding is provided by the Geokit
@@ -90,7 +90,7 @@ end
90
90
 
91
91
  The optional parameters are `units`, `formula`, and `distance_field_name`.
92
92
  Values for **units** can be `:miles`, `:kms` (kilometers), or `:nms` (nautical miles),
93
- with `:miles` as the default.
93
+ with `:miles` as the default.
94
94
  Values for **formula** can be `:sphere` or `:flat` with `:sphere` as the default.
95
95
  `:sphere` gives you Haversine calculations, while `:flat` gives the Pythagoreum Theory.
96
96
  These defaults persist through out the gem.
@@ -122,13 +122,13 @@ A few examples :
122
122
  Location.within(5, :origin => @somewhere)
123
123
  # is the same as
124
124
  Location.geo_scope(:within => 5, :origin => @somewhere)
125
- ```
125
+ ```
126
126
 
127
127
  ```ruby
128
128
  Location.in_range(2..5, :origin => @somewhere)
129
129
  # is the same as
130
130
  Location.geo_scope(:range => 2..5, :origin => @somewhere)
131
- ```
131
+ ```
132
132
 
133
133
  ```ruby
134
134
  Location.in_bounds([@south_west_point, @north_east_point], :origin => @somewhere)
@@ -242,7 +242,7 @@ One would expect to build a query like this :
242
242
 
243
243
  ```ruby
244
244
  scoped = Location.geo_scope(:origin => @somewhere)
245
- scoped = scoped.where('distance <= 5)
245
+ scoped = scoped.where('distance <= 5')
246
246
  results = scoped.all
247
247
  ```
248
248
 
@@ -390,7 +390,7 @@ Ordering is done through `Geokit::Geocoders::provider_order` and
390
390
  ## IP GEOCODING HELPER
391
391
 
392
392
  A class method called geocode_ip_address has been mixed into the
393
- ActionController::Base. This enables before_filter style lookup of
393
+ ActionController::Base. This enables before_action style lookup of
394
394
  the IP address. Since it is a filter, it can accept any of the
395
395
  available filter options.
396
396
 
@@ -585,20 +585,20 @@ A few quick examples to get you started ....
585
585
  datatypes to store your latitude/longitude
586
586
 
587
587
  2. use `acts_as_mappable` on your store model:
588
- 3.
588
+ 3.
589
589
  ```ruby
590
590
  class Store < ActiveRecord::Base
591
591
  acts_as_mappable
592
592
  ...
593
593
  end
594
594
  ```
595
-
595
+
596
596
  3. finders now have extra capabilities:
597
-
597
+
598
598
  ```ruby
599
599
  Store.find(:all, :origin =>[32.951613,-96.958444], :within=>10)
600
600
  ```
601
-
601
+
602
602
  ## How to geocode an address
603
603
 
604
604
  1. configure your geocoder key(s) in `config/initializers/geokit_config.rb`
@@ -610,7 +610,7 @@ A few quick examples to get you started ....
610
610
  ```ruby
611
611
  Geokit::Geocoders::provider_order=[:google]
612
612
  ```
613
-
613
+
614
614
  3. Test it out in script/console
615
615
 
616
616
  ```ruby
@@ -620,7 +620,7 @@ A few quick examples to get you started ....
620
620
  puts res.lng
621
621
  puts res.full_address
622
622
  ```
623
-
623
+
624
624
  ... etc. The return type is GeoLoc, see the API for
625
625
  all the methods you can call on it.
626
626
 
@@ -636,13 +636,13 @@ A few quick examples to get you started ....
636
636
  ```ruby
637
637
  Store.find(:all, :origin=>'100 Spear st, San Francisco, CA', :within=>10)
638
638
  ```
639
-
639
+
640
640
  4. you can also use a zipcode, or anything else that's geocodable:
641
641
 
642
642
  ```ruby
643
643
  Store.find(:all, :origin=>'94117', :conditions=>'distance<10')
644
644
  ```
645
-
645
+
646
646
  ## How to sort a query by distance from an origin
647
647
 
648
648
  You now have access to a 'distance' column, and you can use it
@@ -690,7 +690,7 @@ end
690
690
  ## Database Compatability
691
691
 
692
692
  * Geokit works with MySQL (tested with version 5.0.41), PostgreSQL (tested with version 8.2.6) and Microsoft SQL Server (tested with 2000).
693
- * Geokit is known to *not* work with Postgres versions under 8.1 -- it uses the least() funciton.
693
+ * Geokit is known to *not* work with Postgres versions under 8.1 -- it uses the least() function.
694
694
 
695
695
 
696
696
  ## HIGH-LEVEL NOTES ON WHAT'S WHERE
@@ -699,7 +699,7 @@ end
699
699
  module which gets mixed into your models to provide the
700
700
  location-based finder goodness.
701
701
 
702
- `ip_geocode_lookup.rb` contains the before_filter helper method which
702
+ `ip_geocode_lookup.rb` contains the before_action helper method which
703
703
  enables auto lookup of the requesting IP address.
704
704
 
705
705
  ### The Geokit gem provides the building blocks of distance-based operations:
@@ -721,9 +721,7 @@ AND the Mappable module goodness for free.
721
721
  ## IMPORTANT POST-INSTALLATION NOTES:
722
722
 
723
723
  *1. The configuration file*: Geokit for Rails uses a configuration file in config/initializers.
724
- You *must* add your own keys for the various geocoding services if you want to use geocoding.
725
- If you need to refer to the original template again, see the `assets/api_keys_template` file.
726
-
727
- *2. The gem dependency*: Geokit for Rails depends on the Geokit gem. Tell Rails about this
728
- dependency in `config/environment.rb`, within the initializer block:
729
- config.gem "geokit"
724
+ You *must* add your own keys for the various geocoding services if you want to use geocoding. You can generate a sample initializer file by run:
725
+ ```sh
726
+ $ rails g geokit_rails:install
727
+ ```
@@ -1,11 +1,7 @@
1
1
  source 'https://rubygems.org'
2
- gemspec :path => "../"
3
2
 
4
3
  group :development, :test do
5
- gem 'rake'
6
- gem 'rspec'
7
- gem 'simplecov'
8
- gem 'simplecov-rcov'
9
- gem 'sqlite3'
10
4
  gem 'activerecord', '~> 3.2.0'
11
5
  end
6
+
7
+ gemspec :path => "../"
@@ -1,11 +1,8 @@
1
1
  source 'https://rubygems.org'
2
- gemspec :path => "../"
3
2
 
4
3
  group :development, :test do
5
- gem 'rake'
6
- gem 'rspec'
7
- gem 'simplecov'
8
- gem 'simplecov-rcov'
9
- gem 'sqlite3'
10
- gem 'activerecord', '~> 4.0.0'
4
+ gem 'activerecord', '~> 4.0'
5
+ gem 'test-unit'
11
6
  end
7
+
8
+ gemspec :path => "../"
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "simplecov"
24
24
  spec.add_development_dependency "simplecov-rcov"
25
25
  spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'test-unit'
26
27
  spec.add_development_dependency "mocha", "~> 0.9"
27
28
  spec.add_development_dependency 'coveralls'
28
29
  spec.add_development_dependency "mysql", "~> 2.8"
@@ -0,0 +1,13 @@
1
+ module GeokitRails
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../../templates", __FILE__)
5
+
6
+ desc "Creates a sample Geokit initializer."
7
+
8
+ def copy_initializer
9
+ copy_file "geokit_config.rb", "config/initializers/geokit_config.rb"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,100 @@
1
+ # These defaults are used in Geokit::Mappable.distance_to and acts_as_mappable
2
+ Geokit::default_units = :miles # others :kms, :nms, :meters
3
+ Geokit::default_formula = :sphere
4
+
5
+ # This is the timeout value in seconds to be used for calls to the geocoder web
6
+ # services. For no timeout at all, comment out the setting. The timeout unit
7
+ # is in seconds.
8
+ Geokit::Geocoders::request_timeout = 3
9
+
10
+ # This setting can be used if web service calls must be routed through a proxy.
11
+ # These setting can be nil if not needed, otherwise, a valid URI must be
12
+ # filled in at a minimum. If the proxy requires authentication, the username
13
+ # and password can be provided as well.
14
+ # Geokit::Geocoders::proxy = 'https://user:password@host:port'
15
+
16
+ # This is your yahoo application key for the Yahoo Geocoder.
17
+ # See http://developer.yahoo.com/faq/index.html#appid
18
+ # and http://developer.yahoo.com/maps/rest/V1/geocode.html
19
+ # Geokit::Geocoders::YahooGeocoder.key = 'REPLACE_WITH_YOUR_YAHOO_KEY'
20
+ # Geokit::Geocoders::YahooGeocoder.secret = 'REPLACE_WITH_YOUR_YAHOO_SECRET'
21
+
22
+ # This is your Google Maps geocoder keys (all optional).
23
+ # See http://www.google.com/apis/maps/signup.html
24
+ # and http://www.google.com/apis/maps/documentation/#Geocoding_Examples
25
+ # Geokit::Geocoders::GoogleGeocoder.client_id = ''
26
+ # Geokit::Geocoders::GoogleGeocoder.cryptographic_key = ''
27
+ # Geokit::Geocoders::GoogleGeocoder.channel = ''
28
+
29
+ # You can also use the free API key instead of signed requests
30
+ # See https://developers.google.com/maps/documentation/geocoding/#api_key
31
+ # Geokit::Geocoders::GoogleGeocoder.api_key = ''
32
+
33
+ # You can also set multiple API KEYS for different domains that may be directed
34
+ # to this same application.
35
+ # The domain from which the current user is being directed will automatically
36
+ # be updated for Geokit via
37
+ # the GeocoderControl class, which gets it's begin filter mixed
38
+ # into the ActionController.
39
+ # You define these keys with a Hash as follows:
40
+ # Geokit::Geocoders::google = {
41
+ # 'rubyonrails.org' => 'RUBY_ON_RAILS_API_KEY',
42
+ # ' ruby-docs.org' => 'RUBY_DOCS_API_KEY' }
43
+
44
+ # This is your username and password for geocoder.us.
45
+ # To use the free service, the value can be set to nil or false. For
46
+ # usage tied to an account, the value should be set to username:password.
47
+ # See http://geocoder.us
48
+ # and http://geocoder.us/user/signup
49
+ # Geokit::Geocoders::UsGeocoder.key = 'username:password'
50
+
51
+ # This is your authorization key for geocoder.ca.
52
+ # To use the free service, the value can be set to nil or false. For
53
+ # usage tied to an account, set the value to the key obtained from
54
+ # Geocoder.ca.
55
+ # See http://geocoder.ca
56
+ # and http://geocoder.ca/?register=1
57
+ # Geokit::Geocoders::CaGeocoder.key = 'KEY'
58
+
59
+ # This is your username key for geonames.
60
+ # To use this service either free or premium, you must register a key.
61
+ # See http://www.geonames.org
62
+ # Geokit::Geocoders::GeonamesGeocoder.key = 'KEY'
63
+
64
+ # Most other geocoders need either no setup or a key
65
+ # Geokit::Geocoders::BingGeocoder.key = ''
66
+ # Geokit::Geocoders::MapQuestGeocoder.key = ''
67
+ # Geokit::Geocoders::YandexGeocoder.key = ''
68
+ # Geokit::Geocoders::MapboxGeocoder.key = 'ACCESS_TOKEN'
69
+ # Geokit::Geocoders::OpencageGeocoder.key = 'some_api_key'
70
+
71
+ # Geonames has a free service and a premium service, each using a different URL
72
+ # GeonamesGeocoder.premium = true will use http://ws.geonames.net (premium)
73
+ # GeonamesGeocoder.premium = false will use http://api.geonames.org (free)
74
+ # Geokit::Geocoders::GeonamesGeocoder.premium = false
75
+
76
+ # require "external_geocoder.rb"
77
+ # Please see the section "writing your own geocoders" for more information.
78
+ # Geokit::Geocoders::external_key = 'REPLACE_WITH_YOUR_API_KEY'
79
+
80
+ # This is the order in which the geocoders are called in a failover scenario
81
+ # If you only want to use a single geocoder, put a single symbol in the array.
82
+ # Valid symbols are :google, :yahoo, :us, and :ca.
83
+ # Be aware that there are Terms of Use restrictions on how you can use the
84
+ # various geocoders. Make sure you read up on relevant Terms of Use for each
85
+ # geocoder you are going to use.
86
+ # Geokit::Geocoders::provider_order = [:google,:us]
87
+
88
+ # The IP provider order. Valid symbols are :ip,:geo_plugin.
89
+ # As before, make sure you read up on relevant Terms of Use for each.
90
+ # Geokit::Geocoders::ip_provider_order = [:external,:geo_plugin,:ip]
91
+
92
+ # Disable HTTPS globally. This option can also be set on individual
93
+ # geocoder classes.
94
+ # Geokit::Geocoders::secure = false
95
+
96
+ # Control verification of the server certificate for geocoders using HTTPS
97
+ # Geokit::Geocoders::ssl_verify_mode = OpenSSL::SSL::VERIFY_(PEER/NONE)
98
+ # Setting this to VERIFY_NONE may be needed on systems that don't have
99
+ # a complete or up to date root certificate store. Only applies to
100
+ # the Net::HTTP adapter.
@@ -3,7 +3,6 @@ require 'geokit'
3
3
  require 'geokit-rails/railtie'
4
4
  require 'geokit-rails/core_extensions'
5
5
 
6
- require 'geokit-rails/defaults'
7
6
  require 'geokit-rails/adapters/abstract'
8
7
  require 'geokit-rails/acts_as_mappable'
9
8
  require 'geokit-rails/geocoder_control'
@@ -91,10 +91,20 @@ module Geokit
91
91
  module ClassMethods
92
92
 
93
93
  # A proxy to an instance of a finder adapter, inferred from the connection's adapter.
94
- def adapter
95
- @adapter ||= begin
96
- require File.join('geokit-rails', 'adapters', connection.adapter_name.downcase)
94
+ def geokit_finder_adapter
95
+ @geokit_finder_adapter ||= begin
96
+ unless Adapters.const_defined?(connection.adapter_name.camelcase)
97
+ filename = connection.adapter_name.downcase
98
+ require File.join("geokit-rails", "adapters", filename)
99
+ end
97
100
  klass = Adapters.const_get(connection.adapter_name.camelcase)
101
+ if klass.class == Module
102
+ # For some reason Mysql2 adapter was defined in Adapters.constants but was Module instead of a Class
103
+ filename = connection.adapter_name.downcase
104
+ require File.join("geokit-rails", "adapters", filename)
105
+ # Re-init the klass after require
106
+ klass = Adapters.const_get(connection.adapter_name.camelcase)
107
+ end
98
108
  klass.load(self) unless klass.loaded
99
109
  klass.new(self)
100
110
  rescue LoadError
@@ -104,8 +114,13 @@ module Geokit
104
114
 
105
115
  def within(distance, options = {})
106
116
  options[:within] = distance
107
- #geo_scope(options)
108
- where(distance_conditions(options))
117
+ # Add bounding box to speed up SQL request.
118
+ bounds = formulate_bounds_from_distance(
119
+ options,
120
+ normalize_point_to_lat_lng(options[:origin]),
121
+ options[:units] || default_units)
122
+ with_latlng.where(bound_conditions(bounds)).
123
+ where(distance_conditions(options))
109
124
  end
110
125
  alias inside within
111
126
 
@@ -134,10 +149,12 @@ module Geokit
134
149
  origin = extract_origin_from_options(options)
135
150
  units = extract_units_from_options(options)
136
151
  formula = extract_formula_from_options(options)
137
- bounds = extract_bounds_from_options(options)
138
152
  distance_column_name = distance_sql(origin, units, formula)
139
- #geo_scope(options).order("#{distance_column_name} asc")
140
- order("#{distance_column_name} #{options[:reverse] ? 'DESC' : 'ASC'}")
153
+ with_latlng.order("#{distance_column_name} #{options[:reverse] ? 'DESC' : 'ASC'}")
154
+ end
155
+
156
+ def with_latlng
157
+ where("#{qualified_lat_column_name} IS NOT NULL AND #{qualified_lng_column_name} IS NOT NULL")
141
158
  end
142
159
 
143
160
  def closest(options = {})
@@ -214,7 +231,7 @@ module Geokit
214
231
  distance = options[:within] if options.has_key?(:within)
215
232
  distance = options[:range].last-(options[:range].exclude_end?? 1 : 0) if options.has_key?(:range)
216
233
  if distance
217
- res=Geokit::Bounds.from_point_and_radius(origin,distance,:units=>units)
234
+ Geokit::Bounds.from_point_and_radius(origin,distance,:units=>units)
218
235
  else
219
236
  nil
220
237
  end
@@ -224,7 +241,6 @@ module Geokit
224
241
  origin = extract_origin_from_options(options)
225
242
  units = extract_units_from_options(options)
226
243
  formula = extract_formula_from_options(options)
227
- bounds = extract_bounds_from_options(options)
228
244
  distance_column_name = distance_sql(origin, units, formula)
229
245
 
230
246
  res = if options.has_key?(:within)
@@ -321,7 +337,7 @@ module Geokit
321
337
  lat = deg2rad(get_lat(origin))
322
338
  lng = deg2rad(get_lng(origin))
323
339
  multiplier = units_sphere_multiplier(units)
324
- adapter.sphere_distance_sql(lat, lng, multiplier) if adapter
340
+ geokit_finder_adapter.sphere_distance_sql(lat, lng, multiplier) if geokit_finder_adapter
325
341
  end
326
342
 
327
343
  # Returns the distance SQL using the flat-world formula (Phythagorean Theory). The SQL is tuned
@@ -329,7 +345,7 @@ module Geokit
329
345
  def flat_distance_sql(origin, units)
330
346
  lat_degree_units = units_per_latitude_degree(units)
331
347
  lng_degree_units = units_per_longitude_degree(get_lat(origin), units)
332
- adapter.flat_distance_sql(origin, lat_degree_units, lng_degree_units)
348
+ geokit_finder_adapter.flat_distance_sql(origin, lat_degree_units, lng_degree_units)
333
349
  end
334
350
 
335
351
  def get_lat(origin)
@@ -5,7 +5,9 @@ module Geokit
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- if self.respond_to? :before_filter
8
+ if self.respond_to? :before_action
9
+ self.send :before_action, :set_geokit_domain
10
+ elsif self.respond_to? :before_filter
9
11
  self.send :before_filter, :set_geokit_domain
10
12
  end
11
13
  end
@@ -15,4 +17,4 @@ module Geokit
15
17
  logger.debug("Geokit is using the domain: #{Geokit::Geocoders::domain}")
16
18
  end
17
19
  end
18
- end
20
+ end
@@ -1,40 +1,44 @@
1
1
  require 'yaml'
2
2
  require 'active_support/concern'
3
3
 
4
- module Geokit
4
+ module Geokit
5
5
  # Contains a class method geocode_ip_address which can be used to enable automatic geocoding
6
- # for request IP addresses. The geocoded information is stored in a cookie and in the
6
+ # for request IP addresses. The geocoded information is stored in a cookie and in the
7
7
  # session to minimize web service calls. The point of the helper is to enable location-based
8
8
  # websites to have a best-guess for new visitors.
9
9
  module IpGeocodeLookup
10
10
  extend ActiveSupport::Concern
11
-
11
+
12
12
  # Class method to mix into active record.
13
13
  module ClassMethods # :nodoc:
14
14
  def geocode_ip_address(filter_options = {})
15
- before_filter :store_ip_location, filter_options
15
+ if respond_to? :before_action
16
+ before_action :store_ip_location, filter_options
17
+ else
18
+ before_filter :store_ip_location, filter_options
19
+ end
16
20
  end
17
21
  end
18
-
19
- private
20
-
21
- # Places the IP address' geocode location into the session if it
22
+
23
+ private
24
+
25
+ # Places the IP address' geocode location into the session if it
22
26
  # can be found. Otherwise, looks for a geo location cookie and
23
27
  # uses that value. The last resort is to call the web service to
24
28
  # get the value.
25
29
  def store_ip_location
26
30
  session[:geo_location] ||= retrieve_location_from_cookie_or_service
27
31
  cookies[:geo_location] = { :value => session[:geo_location].to_yaml, :expires => 30.days.from_now } if session[:geo_location]
28
- end
29
-
32
+ end
33
+
30
34
  # Uses the stored location value from the cookie if it exists. If
31
- # no cookie exists, calls out to the web service to get the location.
35
+ # no cookie exists, calls out to the web service to get the location.
32
36
  def retrieve_location_from_cookie_or_service
33
- return YAML.load(cookies[:geo_location]) if cookies[:geo_location]
37
+ return GeoLoc.new(YAML.load(cookies[:geo_location])) if cookies[:geo_location]
34
38
  location = Geocoders::MultiGeocoder.geocode(get_ip_address)
35
39
  return location.success ? location : nil
36
40
  end
37
-
41
+
38
42
  # Returns the real ip address, though this could be the localhost ip
39
43
  # address. No special handling here anymore.
40
44
  def get_ip_address
@@ -1,4 +1,3 @@
1
- require 'geokit-rails'
2
1
  require 'rails'
3
2
 
4
3
  module Geokit
@@ -1,3 +1,3 @@
1
1
  module GeokitRails
2
- VERSION = "2.1.0"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -241,28 +241,28 @@ class ActsAsMappableTest < GeokitTestCase
241
241
  end
242
242
 
243
243
  def test_ip_geocoded_find_with_distance_condition
244
- Geokit::Geocoders::MultiGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
244
+ Geokit::Geocoders::MultiGeocoder.expects(:geocode).with(LOCATION_A_IP).twice.returns(@location_a)
245
245
  locations = Location.within(3.97, :origin => LOCATION_A_IP)
246
246
  assert_equal 5, locations.to_a.size
247
247
  assert_equal 5, locations.count
248
248
  end
249
249
 
250
250
  def test_ip_geocoded_find_within
251
- Geokit::Geocoders::MultiGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
251
+ Geokit::Geocoders::MultiGeocoder.expects(:geocode).with(LOCATION_A_IP).twice.returns(@location_a)
252
252
  locations = Location.within(3.97, :origin => LOCATION_A_IP)
253
253
  assert_equal 5, locations.to_a.size
254
254
  assert_equal 5, locations.count
255
255
  end
256
256
 
257
257
  def test_ip_geocoded_find_with_compound_condition
258
- Geokit::Geocoders::MultiGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
258
+ Geokit::Geocoders::MultiGeocoder.expects(:geocode).with(LOCATION_A_IP).twice.returns(@location_a)
259
259
  locations = Location.within(5, :origin => LOCATION_A_IP).where("city = 'Coppell'")
260
260
  assert_equal 2, locations.to_a.size
261
261
  assert_equal 2, locations.count
262
262
  end
263
263
 
264
264
  def test_ip_geocoded_find_with_secure_compound_condition
265
- Geokit::Geocoders::MultiGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
265
+ Geokit::Geocoders::MultiGeocoder.expects(:geocode).with(LOCATION_A_IP).twice.returns(@location_a)
266
266
  locations = Location.within(5, :origin => LOCATION_A_IP).where(["city = ?", 'Coppell'])
267
267
  assert_equal 2, locations.to_a.size
268
268
  assert_equal 2, locations.count
@@ -293,7 +293,7 @@ class ActsAsMappableTest < GeokitTestCase
293
293
  end
294
294
 
295
295
  def test_address_geocode
296
- Geokit::Geocoders::MultiGeocoder.expects(:geocode).with('Irving, TX').returns(@location_a)
296
+ Geokit::Geocoders::MultiGeocoder.expects(:geocode).with('Irving, TX').twice.returns(@location_a)
297
297
  #locations = Location.geo_scope(:origin => 'Irving, TX').where(["distance < ? and city = ?", 5, 'Coppell'])
298
298
  locations = Location.within(5, :origin => 'Irving, TX').where(["city = ?", 'Coppell'])
299
299
  assert_equal 2, locations.to_a.size
@@ -449,7 +449,7 @@ class ActsAsMappableTest < GeokitTestCase
449
449
  end
450
450
 
451
451
  def test_sort_by_distance_from
452
- locations = Location.all
452
+ locations = Location.with_latlng.all
453
453
  unsorted = [locations(:a), locations(:b), locations(:c), locations(:d), locations(:e), locations(:f)]
454
454
  sorted = [locations(:a), locations(:b), locations(:c), locations(:f), locations(:d), locations(:e)]
455
455
  assert_equal sorted, locations.sort_by{|l| l.distance_to(locations(:a))}
@@ -4,7 +4,6 @@ require 'test/unit'
4
4
  require 'active_support/test_case'
5
5
 
6
6
  require 'active_record'
7
- require 'active_record/test_case'
8
7
  require 'active_record/fixtures'
9
8
 
10
9
  require 'action_controller'
@@ -51,4 +51,11 @@ f:
51
51
  state: TX
52
52
  postal_code: 75039
53
53
  latitude: 32.895155
54
- longitude: -96.958444
54
+ longitude: -96.958444
55
+ g:
56
+ id: 7
57
+ company_id: 2
58
+ street: 4711 N Macarthur Blvd # 160
59
+ city: Nowhere
60
+ state: TX
61
+ postal_code: 12345
@@ -51,4 +51,11 @@ f:
51
51
  state: TX
52
52
  postal_code: 75039
53
53
  lat: 32.895155
54
- lng: -96.958444
54
+ lng: -96.958444
55
+ g:
56
+ id: 7
57
+ company_id: 2
58
+ street: 4711 N Macarthur Blvd # 160
59
+ city: Nowhere
60
+ state: TX
61
+ postal_code: 12345
@@ -3,11 +3,17 @@ require 'pathname'
3
3
  require 'boot'
4
4
  require 'mocha/setup'
5
5
 
6
- if ENV['COVERAGE']
7
- COVERAGE_THRESHOLD = 49
6
+ unless ENV['COVERAGE'] == 'off'
7
+ COVERAGE_THRESHOLD = 35
8
8
  require 'simplecov'
9
9
  require 'simplecov-rcov'
10
- SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
10
+ require 'coveralls'
11
+ Coveralls.wear!
12
+
13
+ SimpleCov.formatters = [
14
+ SimpleCov::Formatter::RcovFormatter,
15
+ Coveralls::SimpleCov::Formatter
16
+ ]
11
17
  SimpleCov.start do
12
18
  add_filter '/test/'
13
19
  add_group 'lib', 'lib'
@@ -41,4 +47,4 @@ class GeokitTestCase < ActiveSupport::TestCase
41
47
  self.use_instantiated_fixtures = false
42
48
 
43
49
  fixtures :all
44
- end
50
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geokit-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Noack
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-03-11 00:00:00.000000000 Z
14
+ date: 2016-07-13 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -97,6 +97,20 @@ dependencies:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: test-unit
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
100
114
  - !ruby/object:Gem::Dependency
101
115
  name: mocha
102
116
  requirement: !ruby/object:Gem::Requirement
@@ -217,6 +231,8 @@ files:
217
231
  - gemfiles/rails3.gemfile
218
232
  - gemfiles/rails4.gemfile
219
233
  - geokit-rails.gemspec
234
+ - lib/generators/geokit_rails/install_generator.rb
235
+ - lib/generators/templates/geokit_config.rb
220
236
  - lib/geokit-rails.rb
221
237
  - lib/geokit-rails/acts_as_mappable.rb
222
238
  - lib/geokit-rails/adapters/abstract.rb
@@ -228,7 +244,6 @@ files:
228
244
  - lib/geokit-rails/adapters/sqlite.rb
229
245
  - lib/geokit-rails/adapters/sqlserver.rb
230
246
  - lib/geokit-rails/core_extensions.rb
231
- - lib/geokit-rails/defaults.rb
232
247
  - lib/geokit-rails/geocoder_control.rb
233
248
  - lib/geokit-rails/ip_geocode_lookup.rb
234
249
  - lib/geokit-rails/railtie.rb
@@ -278,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
278
293
  version: '0'
279
294
  requirements: []
280
295
  rubyforge_project:
281
- rubygems_version: 2.4.5
296
+ rubygems_version: 2.4.8
282
297
  signing_key:
283
298
  specification_version: 4
284
299
  summary: Geokit helpers for rails apps.
@@ -1,21 +0,0 @@
1
- module Geokit
2
- # These defaults are used in Geokit::Mappable.distance_to and in acts_as_mappable
3
- @@default_units = :miles
4
- @@default_formula = :sphere
5
-
6
- [:default_units, :default_formula].each do |sym|
7
- class_eval <<-EOS, __FILE__, __LINE__
8
- def self.#{sym}
9
- if defined?(#{sym.to_s.upcase})
10
- #{sym.to_s.upcase}
11
- else
12
- @@#{sym}
13
- end
14
- end
15
-
16
- def self.#{sym}=(obj)
17
- @@#{sym} = obj
18
- end
19
- EOS
20
- end
21
- end