mongoid_geo 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.textile CHANGED
@@ -5,10 +5,13 @@ A Geo extension for Mongoid.
5
5
  "MongoDB Geospatial Indexing":http://www.mongodb.org/display/DOCS/Geospatial+Indexing
6
6
 
7
7
  * Supports Mongo DB 1.7+ sphere distance calculations
8
- * Adds nearSphere inclusion method
9
- * Adds a set of geo related inflections
10
- * Adds an exta option for defining a "geo" field, to have the generated attr_writer parse and convert strings etc. to float arrays.
11
- * Calculate locations near a given point (geoNear)
8
+ * Extra geo calculation methods such as #near_sphere etc.
9
+ * Add concept of a special "geo" field (for setting the location point)
10
+ * Calculate locations near a given point and return as criteria, sorted by distance
11
+
12
+ h2. Status update (May 18, 2011)
13
+
14
+ Created alias methods such as _#near_sphere_ for _#nearSphere_ etc. to make the DSL much more 'rubyish'!
12
15
 
13
16
  h2. Mongoid 2 geo features
14
17
 
@@ -134,6 +137,12 @@ Usage example:
134
137
  address.location.should == [23.5, -47].reverse
135
138
  </pre>
136
139
 
140
+ h3. Future ideas...
141
+
142
+ I have recently created a new geo *geo_calc* which includes the concept of a GeoPoint that is much more powerful than the current #to_point implementation in this gem.
143
+ I plan to substitute this functionality accordingly. Also I plan to include support for Geo vectors (see my *geo_vectors* gem) that I'm currently implementing.
144
+ Stay tuned!
145
+
137
146
  h2. geoNear
138
147
 
139
148
  <pre>
@@ -201,38 +210,37 @@ h2. Mongoid Geo extra inclusions
201
210
  Find addresses near a point using spherical distance calculation
202
211
 
203
212
  <pre>
204
- Address.nearSphere(:location => [ 72, -44 ])
213
+ Address.near_sphere(:location => [ 72, -44 ])
205
214
  </pre>
206
215
 
207
-
208
216
  h2. Mongoid Geo extra inflections
209
217
 
210
- h3. nearSphere
218
+ h3. near_sphere
211
219
 
212
220
  <pre>
213
- base.where(:location.nearSphere => [ 72, -44 ])
221
+ base.where(:location.near_sphere => [ 72, -44 ])
214
222
  # => :location => { "$nearSphere" : [ 72, -44 ] }
215
223
  </pre>
216
224
 
217
- h3. nearMax
225
+ h3. near_max
218
226
 
219
227
  Find points near a given point within a maximum distance
220
228
 
221
229
  <pre>
222
- base.where(:location.nearMax => [[ 72, -44 ], 5])
230
+ base.where(:location.near_max => [[ 72, -44 ], 5])
223
231
  # => { $near: [50, 40] , $maxDistance: 3 }
224
232
 
225
- base.where(:location.nearMax(:sphere) => [[ 72, -44 ], 5])
233
+ base.where(:location.near_max(:sphere) => [[ 72, -44 ], 5])
226
234
  # => { $nearSphere: [50, 40] , $maxDistanceSphere: 3 }
227
235
 
228
- base.where(:location.nearMax(:sphere, :flat) => [[ 72, -44 ], 5])
236
+ base.where(:location.near_max(:sphere, :flat) => [[ 72, -44 ], 5])
229
237
  # => { $nearSphere: [50, 40] , $maxDistance: 3 }
230
238
  </pre>
231
239
 
232
240
  You can also use a Hash to define the nearMax
233
241
 
234
242
  <pre>
235
- places.where(:location.nearMax => {:point => [ 72, -44 ], :distance => 5})
243
+ places.where(:location.near_max => {:point => [ 72, -44 ], :distance => 5})
236
244
  </pre>
237
245
 
238
246
  Or use an Object (which must have the methods @#point@ and @#distance@ that return the point and max distance from that point)
@@ -242,7 +250,7 @@ Or use an Object (which must have the methods @#point@ and @#distance@ that retu
242
250
  near_max.point = [50, 40]
243
251
  near_max.distance = [30,55]
244
252
 
245
- places.where(:location.nearMax => near_max)
253
+ places.where(:location.near_max => near_max)
246
254
  </pre>
247
255
 
248
256
  Note: For the points, you can also use a hash or an object with the methods/keys, either @:lat, :lng@ or @:latitude, :longitude@
@@ -253,32 +261,32 @@ Example:
253
261
  center = (Struct.new :lat, :lng).new
254
262
  center.lat = 72
255
263
  center.lng = -44
256
- places.where(:location.withinCenter => [center, radius])
264
+ places.where(:location.within_center => [center, radius])
257
265
 
258
266
  # OR
259
267
 
260
- places.where(:location.withinCenter => [{:lat => 72, :lng => -44}, radius])
268
+ places.where(:location.within_center => [{:lat => 72, :lng => -44}, radius])
261
269
  </pre>
262
270
 
263
- h3. withinBox
271
+ h3. within_box
264
272
 
265
273
  <pre>
266
274
  box = [[50, 40], [30,55]]
267
- base.where(:location.withinBox => box)
275
+ base.where(:location.within_box => box)
268
276
  # => locations: {"$within" : {"$box" : [[50, 40], [30,55]]}
269
277
 
270
- base.where(:location.withinBox(:sphere) => box)
278
+ base.where(:location.within_box(:sphere) => box)
271
279
  # => locations: {"$within" : {"$boxSphere" : [[50, 40], [30,55]]}
272
280
  </pre>
273
281
 
274
282
  You can also use a Hash to define the box
275
283
 
276
284
  <pre>
277
- places.where(:location.withinBox => {:lower_left => [50, 40], :upper_right => [30,55]})
285
+ places.where(:location.within_box => {:lower_left => [50, 40], :upper_right => [30,55]})
278
286
 
279
287
  # or mix and match
280
288
 
281
- places.where(:location.withinBox => {:lower_left => {:lat => 50, :lng => 40}, :upper_right => [30,55] } )
289
+ places.where(:location.within_box => {:lower_left => {:lat => 50, :lng => 40}, :upper_right => [30,55] } )
282
290
  </pre>
283
291
 
284
292
  Or use an object (which must have the methods @#lower_left@ and @#upper_right@ that return the points of the bounding box)
@@ -288,26 +296,26 @@ Or use an object (which must have the methods @#lower_left@ and @#upper_right@ t
288
296
  box.lower_left = [50, 40]
289
297
  box.upper_right = [30, 55]
290
298
 
291
- places.where(:location.withinBox => box)
299
+ places.where(:location.within_box => box)
292
300
  </pre>
293
301
 
294
- h3. withinCenter
302
+ h3. within_center
295
303
 
296
304
  <pre>
297
305
  center = [50, 40]
298
306
  radius = 4
299
307
 
300
- places.where(:location.withinCenter => [center, radius])
308
+ places.where(:location.within_center => [center, radius])
301
309
  # => places: {"$within" : {"$center" : [[50, 40], 4]}
302
310
 
303
- places.where(:location.withinCenter(:sphere) => [center, radius])
311
+ places.where(:location.within_center(:sphere) => [center, radius])
304
312
  # => places: {"$within" : {"$centerSphere" : [[50, 40], 4]}
305
313
  </pre>
306
314
 
307
315
  You can also use a hash to define the circle, with @:center@ and @:radius@ keys
308
316
 
309
317
  <pre>
310
- places.where(:location.withinCenter => {:center => [50, 40], :radius => 4})
318
+ places.where(:location.within_center => {:center => [50, 40], :radius => 4})
311
319
  </pre>
312
320
 
313
321
  Or use an object (which must have the methods #lower_left and #upper_right that return the points of the bounding box)
@@ -317,5 +325,5 @@ Or use an object (which must have the methods #lower_left and #upper_right that
317
325
  circle.center = [50, 40]
318
326
  circle.radius = 4
319
327
 
320
- places.where(:location.withinCenter => circle)
328
+ places.where(:location.within_center => circle)
321
329
  </pre>
@@ -68,6 +68,7 @@ module Mongoid
68
68
  query = create_query(self, center, options)
69
69
  create_result(query_result(self, query, center, location_attribute, options)).extend(Mongoid::Geo::Models).as_criteria(options[:dist_order])
70
70
  end
71
+ alias_method :geo_near, :geoNear
71
72
 
72
73
  protected
73
74
 
@@ -15,12 +15,14 @@ module Mongoid #:nodoc:
15
15
  def geoNear
16
16
  Criterion::Complex.new(:operator => 'geoNearSphere', :key => self)
17
17
  end
18
+ alias_method :geo_near, :geoNear
18
19
 
19
20
  def nearSphere
20
21
  Mongoid::Geo.spherical_mode do
21
22
  Criterion::Complex.new(:operator => 'nearSphere', :key => self)
22
23
  end
23
24
  end
25
+ alias_method :near_sphere, :nearSphere
24
26
 
25
27
  def nearMax *calcs
26
28
  calcs = (!calcs || calcs.empty?) ? [:flat] : calcs
@@ -33,14 +35,17 @@ module Mongoid #:nodoc:
33
35
  raise "method nearMax takes one or two symbols as arguments, each symbol must be either :flat or :sphere"
34
36
  end
35
37
  end
38
+ alias_method :near_max, :nearMax
36
39
 
37
40
  def withinBox calc = :flat
38
41
  Criterion::OuterOperator.new(:outer_op => 'within', :operator => get_op(calc, 'box'), :key => self)
39
42
  end
43
+ alias_method :within_box, :withinBox
40
44
 
41
45
  def withinCenter calc = :flat
42
46
  Criterion::OuterOperator.new(:outer_op => 'within', :operator => get_op(calc, 'center'), :key => self)
43
47
  end
48
+ alias_method :within_center, :withinCenter
44
49
 
45
50
  private
46
51
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_geo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-05-09 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2152535520 !ruby/object:Gem::Requirement
16
+ requirement: &2157121480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '2.4'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2152535520
24
+ version_requirements: *2157121480
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mongoid
27
- requirement: &2152535060 !ruby/object:Gem::Requirement
27
+ requirement: &2157121020 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.0.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2152535060
35
+ version_requirements: *2157121020
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bson
38
- requirement: &2152534600 !ruby/object:Gem::Requirement
38
+ requirement: &2157120560 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '1.3'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2152534600
46
+ version_requirements: *2157120560
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &2152534140 !ruby/object:Gem::Requirement
49
+ requirement: &2157120100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 3.0.4
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2152534140
57
+ version_requirements: *2157120100
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hashie
60
- requirement: &2152533680 !ruby/object:Gem::Requirement
60
+ requirement: &2157119640 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 0.4.0
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2152533680
68
+ version_requirements: *2157119640
69
69
  description: Geo spatial extension on Mongoid 2, to add more geo-spatial capabilities
70
70
  email:
71
71
  - kmandrup@gmail.com