geokit-rails 2.2.0 → 2.3.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: ea862dfaa5a3d928db10ab95a7c65c5fce23491c
4
- data.tar.gz: 6ffd65c47a279ed164c7d875078dc44d5d28ff78
3
+ metadata.gz: 48ca6ff9da9db809b5364c5da86253f349dc5aff
4
+ data.tar.gz: faf83c4907ad40f8c14b1431309d9db0b009fba7
5
5
  SHA512:
6
- metadata.gz: 6f6b87d14fc319e5331327953f683201a08c164529ff2b5d2a52ed1ca266af0878b22453901405da5cb79576319b7f2bc40c2e8d6d66efbbd43abccde3069497
7
- data.tar.gz: c60c6c131318bd68e34388250fb41a3c2934fd79e84a971c8946a6dc26e48dd1769928c4edba763d15e5c8b4251ae206321ceb671809319c8279735a8874186e
6
+ metadata.gz: 7aeacd224c2d14b57a37a1666dc514002d4baf6bf3d20a03f6a212a05bcf9920dc4f5c2cc72fa0798dc42ab6c1912dec185e0616edf41f0070806cfaf04c8060
7
+ data.tar.gz: ef046a2677870e71be5ecdf2c0bf8e90f979d858efb237bea8ec531644473af9a339f0ec413bfcc37affb19187bdaaaaf7272567a96fff3a32ed062b3ba4c642
@@ -1,21 +1,21 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9
4
3
  - 2.0
5
4
  - 2.1
6
5
  - 2.2
6
+ - 2.3
7
7
  gemfile:
8
8
  - gemfiles/rails3.gemfile
9
9
  - gemfiles/rails4.gemfile
10
10
  matrix:
11
11
  exclude:
12
- - rvm: 1.9
13
- gemfile: gemfiles/rails4.gemfile
14
12
  - rvm: 2.2
15
13
  gemfile: gemfiles/rails3.gemfile
14
+ - rvm: 2.3
15
+ gemfile: gemfiles/rails3.gemfile
16
16
  script: "bundle exec rake coverage"
17
17
  before_install:
18
18
  - gem install bundler
19
-
20
19
  bundler_args: --retry 5
20
+ sudo: false
21
21
  cache: bundler
@@ -1,3 +1,27 @@
1
+ ## 2.3.0
2
+
3
+ * Drop ruby 1.9 and add 2.3 support
4
+ * Add an option to skip loading
5
+ * Remove excessive debug statement
6
+
7
+ ## 2.2.0
8
+
9
+ * Add rails config aenerator
10
+ * Add NOT NULL checks for latitude and longitude, otherwise nonsense
11
+ values are being returned for distance calculations involving such
12
+ objects.
13
+ * Fix inconsistent case where retrieve_location_from_cookie_or_services
14
+ returned a Hash instead of a GeoLoc
15
+ * Speed up SQL with bounding box
16
+ * Tests against rails 4 & 5
17
+
18
+ ## 2.1.0
19
+
20
+ * Add OracleEnhanced adapter
21
+ * Fix bug with custom latitude/longitude names
22
+ * BREAKING: Nearest and fathest return scopes not arrays
23
+ * Drop support for ruby 1.8/1.9
24
+
1
25
  ## 2.0.1
2
26
 
3
27
  * Fix GeoKit naming compatibility
@@ -32,8 +32,15 @@ Then tell bundler to update the gems :
32
32
  ```sh
33
33
  $ bundle install
34
34
  ```
35
+ Generate the configuration initializer:
36
+
37
+ ```sh
38
+ $ rails g geokit_rails:install
39
+ ```
40
+
41
+ Now, if you wish to use the various geocoding services, you can add your keys to the new initializer.
42
+
35
43
 
36
- Last, consult the `important post-installation notes` section at the end of this document.
37
44
 
38
45
  If you want to use geokit-rails in a Rails 2 application, just use the good old plugin ([geokit-rails](https://github.com/andre/geokit-rails)).
39
46
 
@@ -113,27 +120,21 @@ Once you've specified `acts_as_mappable`, a few scopes are available :
113
120
  * `closest` and `farthest` find the closest or farthest record from the origin point
114
121
  * `by_distance` finds records ordered by distance from the origin point
115
122
 
116
- All these scopes are the porcelain for a lower level scope named `geo_scope` that take a hash of options.
117
- Their first parameter is simply one of the possible options, without the name
123
+ All of these scopes take a hash of options where the first parameter is simply
124
+ one of the possible options, without the name.
118
125
 
119
126
  A few examples :
120
127
 
121
128
  ```ruby
122
129
  Location.within(5, :origin => @somewhere)
123
- # is the same as
124
- Location.geo_scope(:within => 5, :origin => @somewhere)
125
130
  ```
126
131
 
127
132
  ```ruby
128
133
  Location.in_range(2..5, :origin => @somewhere)
129
- # is the same as
130
- Location.geo_scope(:range => 2..5, :origin => @somewhere)
131
134
  ```
132
135
 
133
136
  ```ruby
134
137
  Location.in_bounds([@south_west_point, @north_east_point], :origin => @somewhere)
135
- # is the same as
136
- Location.geo_scope(:bounds => [@south_west_point, @north_east_point], :origin => @somewhere)
137
138
  ```
138
139
 
139
140
  The options can be :
@@ -141,13 +142,13 @@ The options can be :
141
142
  `:origin` as a two-element array of latitude/longitude:
142
143
 
143
144
  ```ruby
144
- Location.geo_scope(:origin => [37.792,-122.393])
145
+ Location.by_distance(:origin => [37.792,-122.393])
145
146
  ```
146
147
 
147
148
  `:origin` as a geocodeable string:
148
149
 
149
150
  ```ruby
150
- Location.geo_scope(:origin => '100 Spear st, San Francisco, CA')
151
+ Location.by_distance(:origin => '100 Spear st, San Francisco, CA')
151
152
  ```
152
153
 
153
154
  `:origin` as an object which responds to `lat` and `lng` methods,
@@ -174,7 +175,7 @@ Location.within(5, :units => :kms, :origin => @somewhere)
174
175
  @sw = Geokit::LatLng.new(32.91663,-96.982841)
175
176
  @ne = Geokit::LatLng.new(32.96302,-96.919495)
176
177
  @somewhere = Location.find(123456)
177
- Location.geo_scope(:bounds => [@sw, @ne], :origin => @somewhere)
178
+ Location.within(:bounds => [@sw, @ne], :origin => @somewhere)
178
179
  ```
179
180
 
180
181
  `:bounds` as a Geokit::Bounds object
@@ -182,7 +183,7 @@ Location.geo_scope(:bounds => [@sw, @ne], :origin => @somewhere)
182
183
  ```ruby
183
184
  @bounds = Geokit::Bounds.new([32.91663,-96.982841], [32.96302,-96.919495])
184
185
  @somewhere = Location.find(123456)
185
- Location.geo_scope(:bounds => [@sw, @ne], :origin => @somewhere)
186
+ Location.within(:bounds => [@sw, @ne], :origin => @somewhere)
186
187
  ```
187
188
 
188
189
  When using a point of reference or bounds, you leverage the power of Geokit
@@ -207,7 +208,7 @@ You can then chain these scope with any other or use a "calling" method like `fi
207
208
  ```ruby
208
209
  Location.within(5, :origin => @somewhere).all
209
210
  Location.within(5, :origin => @somewhere).count
210
- Location.geo_scope(:origin => [37.792,-122.393]).first
211
+ Location.by_distance(:origin => [37.792,-122.393]).first
211
212
  ```
212
213
 
213
214
  You can add `order` clauses in the chain as for any ActiveRecord query
@@ -226,10 +227,10 @@ Idem for the `limit` clause. In fact, `closest` and `farthest` are defined like
226
227
 
227
228
  ```ruby
228
229
  def closest(options = {})
229
- geo_scope(options).order("#{distance_column_name} asc").limit(1)
230
+ by_distance(options).limit(1)
230
231
  end
231
232
  def farthest(options = {})
232
- geo_scope(options).order("#{distance_column_name} desc").limit(1)
233
+ by_distance({:reverse => true}.merge(options)).limit(1)
233
234
  end
234
235
  ```
235
236
 
@@ -241,7 +242,7 @@ using the _distance_ column. I've tried many different ways to do this and didn'
241
242
  One would expect to build a query like this :
242
243
 
243
244
  ```ruby
244
- scoped = Location.geo_scope(:origin => @somewhere)
245
+ scoped = Location.by_distance(:origin => @somewhere)
245
246
  scoped = scoped.where('distance <= 5')
246
247
  results = scoped.all
247
248
  ```
@@ -717,11 +718,3 @@ GeoLoc represents an address or location which
717
718
  has been geocoded. You can get the city, zipcode, street address, etc.
718
719
  from a GeoLoc object. GeoLoc extends LatLng, so you also get lat/lng
719
720
  AND the Mappable module goodness for free.
720
-
721
- ## IMPORTANT POST-INSTALLATION NOTES:
722
-
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. You can generate a sample initializer file by run:
725
- ```sh
726
- $ rails g geokit_rails:install
727
- ```
@@ -11,6 +11,8 @@ module Geokit
11
11
  extend ActiveSupport::Concern
12
12
 
13
13
  module ClassMethods # :nodoc:
14
+ OPTION_SYMBOLS = [ :distance_column_name, :default_units, :default_formula, :lat_column_name, :lng_column_name, :qualified_lat_column_name, :qualified_lng_column_name, :skip_loading ]
15
+
14
16
  def acts_as_mappable(options = {})
15
17
  metaclass = (class << self; self; end)
16
18
 
@@ -21,20 +23,21 @@ module Geokit
21
23
 
22
24
  if reflection = Geokit::ActsAsMappable.end_of_reflection_chain(self.through, self)
23
25
  metaclass.instance_eval do
24
- [ :distance_column_name, :default_units, :default_formula, :lat_column_name, :lng_column_name, :qualified_lat_column_name, :qualified_lng_column_name ].each do |method_name|
26
+ OPTION_SYMBOLS.each do |method_name|
25
27
  define_method method_name do
26
28
  reflection.klass.send(method_name)
27
29
  end
28
30
  end
29
31
  end
30
32
  else
31
- cattr_accessor :distance_column_name, :default_units, :default_formula, :lat_column_name, :lng_column_name, :qualified_lat_column_name, :qualified_lng_column_name
33
+ cattr_accessor *OPTION_SYMBOLS
32
34
 
33
35
  self.distance_column_name = options[:distance_column_name] || 'distance'
34
36
  self.default_units = options[:default_units] || Geokit::default_units
35
37
  self.default_formula = options[:default_formula] || Geokit::default_formula
36
38
  self.lat_column_name = options[:lat_column_name] || 'lat'
37
39
  self.lng_column_name = options[:lng_column_name] || 'lng'
40
+ self.skip_loading = options[:skip_loading]
38
41
  self.qualified_lat_column_name = "#{table_name}.#{lat_column_name}"
39
42
  self.qualified_lng_column_name = "#{table_name}.#{lng_column_name}"
40
43
 
@@ -105,7 +108,7 @@ module Geokit
105
108
  # Re-init the klass after require
106
109
  klass = Adapters.const_get(connection.adapter_name.camelcase)
107
110
  end
108
- klass.load(self) unless klass.loaded
111
+ klass.load(self) unless klass.loaded || skip_loading
109
112
  klass.new(self)
110
113
  rescue LoadError
111
114
  raise UnsupportedAdapter, "`#{connection.adapter_name.downcase}` is not a supported adapter."
@@ -117,7 +120,7 @@ module Geokit
117
120
  # Add bounding box to speed up SQL request.
118
121
  bounds = formulate_bounds_from_distance(
119
122
  options,
120
- normalize_point_to_lat_lng(options[:origin]),
123
+ normalize_point_to_lat_lng(options[:origin]),
121
124
  options[:units] || default_units)
122
125
  with_latlng.where(bound_conditions(bounds)).
123
126
  where(distance_conditions(options))
@@ -1,28 +1,30 @@
1
1
  module Geokit
2
2
  module Adapters
3
3
  class SQLServer < Abstract
4
-
4
+
5
5
  class << self
6
-
6
+
7
7
  def load(klass)
8
- klass.connection.execute <<-EOS
9
- if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[geokit_least]') and xtype in (N'FN', N'IF', N'TF'))
10
- drop function [dbo].[geokit_least]
11
- EOS
12
-
13
- klass.connection.execute <<-EOS
14
- CREATE FUNCTION [dbo].geokit_least (@value1 float,@value2 float) RETURNS float AS BEGIN
15
- return (SELECT CASE WHEN @value1 < @value2 THEN @value1 ELSE @value2 END) END
16
- EOS
8
+ klass.transaction do
9
+ klass.connection.execute <<-EOS
10
+ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[geokit_least]') and xtype in (N'FN', N'IF', N'TF'))
11
+ drop function [dbo].[geokit_least]
12
+ EOS
13
+
14
+ klass.connection.execute <<-EOS
15
+ CREATE FUNCTION [dbo].geokit_least (@value1 float,@value2 float) RETURNS float AS BEGIN
16
+ return (SELECT CASE WHEN @value1 < @value2 THEN @value1 ELSE @value2 END) END
17
+ EOS
18
+ end
17
19
  self.loaded = true
18
20
  end
19
-
21
+
20
22
  end
21
-
23
+
22
24
  def initialize(*args)
23
25
  super(*args)
24
26
  end
25
-
27
+
26
28
  def sphere_distance_sql(lat, lng, multiplier)
27
29
  %|
28
30
  (ACOS([dbo].geokit_least(1,COS(#{lat})*COS(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*COS(RADIANS(#{qualified_lng_column_name}))+
@@ -30,14 +32,14 @@ module Geokit
30
32
  SIN(#{lat})*SIN(RADIANS(#{qualified_lat_column_name}))))*#{multiplier})
31
33
  |
32
34
  end
33
-
35
+
34
36
  def flat_distance_sql(origin, lat_degree_units, lng_degree_units)
35
37
  %|
36
38
  SQRT(POWER(#{lat_degree_units}*(#{origin.lat}-#{qualified_lat_column_name}),2)+
37
39
  POWER(#{lng_degree_units}*(#{origin.lng}-#{qualified_lng_column_name}),2))
38
40
  |
39
41
  end
40
-
42
+
41
43
  end
42
44
  end
43
- end
45
+ end
@@ -3,18 +3,17 @@ require 'active_support/concern'
3
3
  module Geokit
4
4
  module GeocoderControl
5
5
  extend ActiveSupport::Concern
6
-
6
+
7
7
  included do
8
- if self.respond_to? :before_action
9
- self.send :before_action, :set_geokit_domain
10
- elsif self.respond_to? :before_filter
11
- self.send :before_filter, :set_geokit_domain
8
+ if respond_to? :before_action
9
+ send :before_action, :set_geokit_domain
10
+ elsif respond_to? :before_filter
11
+ send :before_filter, :set_geokit_domain
12
12
  end
13
13
  end
14
-
14
+
15
15
  def set_geokit_domain
16
16
  Geokit::Geocoders::domain = request.domain
17
- logger.debug("Geokit is using the domain: #{Geokit::Geocoders::domain}")
18
17
  end
19
18
  end
20
19
  end
@@ -1,3 +1,3 @@
1
1
  module GeokitRails
2
- VERSION = "2.2.0"
2
+ VERSION = "2.3.0"
3
3
  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.2.0
4
+ version: 2.3.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: 2016-07-13 00:00:00.000000000 Z
14
+ date: 2017-08-08 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -293,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
293
293
  version: '0'
294
294
  requirements: []
295
295
  rubyforge_project:
296
- rubygems_version: 2.4.8
296
+ rubygems_version: 2.5.2
297
297
  signing_key:
298
298
  specification_version: 4
299
299
  summary: Geokit helpers for rails apps.