mongoid_geospatial 2.8.3 → 3.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff35a5a79d20c1dd655b49bb626bdce8b8c2e6b4
4
- data.tar.gz: 0d4041b8ec06429c6db10a9ecd9da1d28a5afa7d
3
+ metadata.gz: f481eb153c311039d3c9ab431dd181481b51a97b
4
+ data.tar.gz: 3d1fa8021e6b79c79e85463a468ea865e53cdd99
5
5
  SHA512:
6
- metadata.gz: 2cb1cd1a60cd4641a184a94c5a3336d306e61dd0202fb9b7b270a49d13e7367a5dde932545b2b449c78b7ed9b3b40528cbdf2c002903c62a86f911d9052715be
7
- data.tar.gz: dd5fb4f2a67516d97e444d679b3c454e8cc55a09a5edaba462cdd34ff32dc94eda20f2db6f810cbfbc75e7352f2ed955c74ea1f2464a2a95d2149abc69a240ca
6
+ metadata.gz: bc40ac5a0f57a48a1d83c4c940b86ca381252aafa17b2eb90a1943fc27303007230e66a3ff1b98420735dadfc5b58f0d1e2478c58c1e58c7d73b66e3f5a8e433
7
+ data.tar.gz: d5264c6beec42461c03d803892b2b46270e17e9bdbdd6f9f160cdcabc9cd2230d162bfbf39f59889b4b809e6d52da67247ad7346a1ee12e3ceac874d62cd6dab
data/Gemfile CHANGED
@@ -2,6 +2,8 @@ source 'http://rubygems.org'
2
2
  gemspec # Specify gem's dependencies in mongoid_geospatial.gemspec
3
3
 
4
4
  gem 'rake'
5
+ gem 'mongoid', github: 'mongoid/mongoid'
6
+
5
7
 
6
8
  group :development do
7
9
  gem 'pry'
data/Guardfile CHANGED
@@ -1,9 +1,21 @@
1
1
  # A sample Guardfile
2
2
  # More info at https://github.com/guard/guard#readme
3
- require 'guard'
3
+ ignore /\/.#.+/
4
4
 
5
- guard 'rspec' do
5
+ guard :rspec do
6
6
  watch(%r{^spec/.+_spec\.rb$})
7
- watch(%r{^lib/(.+)\.rb$}) { "spec" } # { |m| "spec spec/lib/#{m[1]}_spec.rb" }
7
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
8
8
  watch('spec/spec_helper.rb') { "spec" }
9
9
  end
10
+
11
+
12
+ # guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do
13
+ # watch('config/application.rb')
14
+ # watch('config/environment.rb')
15
+ # watch('config/environments/test.rb')
16
+ # watch(%r{^config/initializers/.+\.rb$})
17
+ # watch('Gemfile.lock')
18
+ # watch('spec/spec_helper.rb') { :rspec }
19
+ # watch('test/test_helper.rb') { :test_unit }
20
+ # watch(%r{features/support/}) { :cucumber }
21
+ # end
data/README.md CHANGED
@@ -19,7 +19,7 @@ Quick Start
19
19
  -----------
20
20
 
21
21
  This gem focus on (making helpers for) spatial features MongoDB has.
22
- You can also use an external Geometric/Spatial alongside.
22
+ You may also use an external Geometric/Spatial gem alongside.
23
23
 
24
24
  # Gemfile
25
25
  gem 'mongoid_geospatial'
@@ -47,13 +47,10 @@ You can also use an external Geometric/Spatial alongside.
47
47
  For geo points, an extra macro `geo_field` is available
48
48
 
49
49
 
50
- class Place
51
- include Mongoid::Document
52
- include Mongoid::Geospatial
53
-
54
- # field :location, type: Point, spatial: true
55
50
  geo_field :location
56
- end
51
+ # Will generate:
52
+ field :location, type: Point, spatial: true
53
+
57
54
 
58
55
 
59
56
  Generate indexes on MongoDB:
@@ -104,11 +101,14 @@ Now to access this spatial information we can do this
104
101
 
105
102
  If you need a hash
106
103
 
107
- hudson.mouth.to_hsh # => { x: -74.026667, y: 40.703056 }
104
+ hudson.mouth.to_hsh # => { x: -74.026667, y: 40.703056 }
108
105
 
109
106
  If you are using GeoRuby or RGeo
110
107
 
111
- hudson.mouth.to_geo # => NiceGeolib::Point
108
+ hudson.mouth.to_geo # => GeoRuby::Point
109
+
110
+ hudson.mouth.to_rgeo # => RGeo::Point
111
+
112
112
 
113
113
  Conventions:
114
114
 
@@ -205,8 +205,10 @@ Geometry Helpers
205
205
  ----------------
206
206
 
207
207
  We currently support GeoRuby and RGeo.
208
- If you require one of those, a #to_geo method will be available to all
209
- spatial fields, returning the external library corresponding object.
208
+ If you require one of those, a #to_geo and #to_rgeo, respectivelly,
209
+ method(s) will be available to all spatial fields, returning the
210
+ external library corresponding object.
211
+
210
212
  To illustrate:
211
213
 
212
214
  class Person
@@ -224,7 +226,7 @@ To illustrate:
224
226
 
225
227
  # Example with RGeo
226
228
  point.class # Mongoid::Geospatial::Point
227
- point.to_geo.class # RGeo::Geographic::SphericalPointImpl
229
+ point.to_rgeo.class # RGeo::Geographic::SphericalPointImpl
228
230
 
229
231
 
230
232
  Configure
@@ -234,14 +236,14 @@ Assemble it as you need (use a initializer file):
234
236
 
235
237
  With RGeo
236
238
 
237
- Mongoid::Geospatial.use_rgeo
239
+ Mongoid::Geospatial.with_rgeo!
238
240
  # Optional
239
241
  # Mongoid::Geospatial.factory = RGeo::Geographic.spherical_factory
240
242
 
241
243
 
242
244
  With GeoRuby
243
245
 
244
- Mongoid::Geospatial.use_georuby
246
+ Mongoid::Geospatial.with_georuby!
245
247
 
246
248
 
247
249
  Defaults (change if you know what you're doing)
@@ -0,0 +1,12 @@
1
+ module GeoRuby
2
+ module SimpleFeatures
3
+ # GeoRuby Point
4
+ class Point
5
+
6
+ def mongoize
7
+ [x, y]
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -1,13 +1,20 @@
1
1
  module RGeo
2
2
  module Geographic
3
+ # RGeo Point
3
4
  class SphericalPointImpl
5
+
6
+ def mongoize
7
+ [x, y]
8
+ end
9
+
4
10
  def to_a
5
11
  [x, y, z]
6
12
  end
7
13
 
8
- def [] index
14
+ def [](index)
9
15
  to_a[index]
10
16
  end
17
+
11
18
  end
12
19
  end
13
20
  end
@@ -2,10 +2,12 @@ module Mongoid
2
2
  module Geospatial
3
3
  class Point
4
4
  include Enumerable
5
- attr_accessor :x, :y
5
+ attr_reader :x, :y
6
6
 
7
- def initialize(x=nil, y=nil)
8
- @x, @y = x, y
7
+ def initialize(x = nil, y = nil)
8
+ return unless x
9
+ ll = y ? [x, y] : x.split(/,|\s/).reject(&:empty?)
10
+ @x, @y = ll.map(&:to_f)
9
11
  end
10
12
 
11
13
  # Object -> Database
@@ -24,6 +26,10 @@ module Mongoid
24
26
  yield y
25
27
  end
26
28
 
29
+ def to_s
30
+ "#{x}, #{y}"
31
+ end
32
+
27
33
  def to_hsh xl = :x, yl = :y
28
34
  {xl => x, yl => y}
29
35
  end
@@ -64,16 +70,15 @@ module Mongoid
64
70
 
65
71
  # Database -> Object
66
72
  def demongoize(object)
67
- return unless object
68
- Point.new(*object)
73
+ Point.new(*object) if object
69
74
  end
70
75
 
71
76
  def mongoize(object)
72
77
  case object
73
78
  when Point then object.mongoize
74
- when Array then object.to_xy
75
- when Hash then object.to_xy
76
- else object
79
+ when Array then Geospatial.from_array(object)
80
+ when Hash then Geospatial.from_hash(object)
81
+ else object.mongoize
77
82
  end
78
83
  end
79
84
 
@@ -32,11 +32,11 @@ module Mongoid
32
32
  self.spatial_fields_indexed = []
33
33
  end
34
34
 
35
- def self.use_rgeo
35
+ def self.with_rgeo!
36
36
  require 'mongoid_geospatial/wrappers/rgeo'
37
37
  end
38
38
 
39
- def self.use_georuby
39
+ def self.with_georuby!
40
40
  require 'mongoid_geospatial/wrappers/georuby'
41
41
  end
42
42
 
@@ -0,0 +1,28 @@
1
+ module Mongoid
2
+ module Geospatial
3
+
4
+ def self.from_array(ary)
5
+ ary[0..1].map(&:to_f)
6
+ end
7
+
8
+ def self.from_hash(hsh)
9
+ raise "Hash must have at least 2 items" if hsh.size < 2
10
+ [from_hash_x(hsh), from_hash_y(hsh)]
11
+ end
12
+
13
+ def self.from_hash_y(hsh)
14
+ v = (Mongoid::Geospatial.lat_symbols & hsh.keys).first
15
+ return hsh[v].to_f if !v.nil? && hsh[v]
16
+ fail "Hash must contain #{Mongoid::Geospatial.lat_symbols.inspect} if ruby version is less than 1.9" if RUBY_VERSION.to_f < 1.9
17
+ fail "Hash cannot contain #{Mongoid::Geospatial.lng_symbols.inspect} as the second item if there is no #{Mongoid::Geospatial.lat_symbols.inspect}" if Mongoid::Geospatial.lng_symbols.index(hsh.keys[1])
18
+ hsh.values[1].to_f
19
+ end
20
+
21
+ def self.from_hash_x(hsh)
22
+ v = (Mongoid::Geospatial.lng_symbols & hsh.keys).first
23
+ return hsh[v].to_f if !v.nil? && hsh[v]
24
+ fail "Hash cannot contain #{Mongoid::Geospatial.lat_symbols.inspect} as the first item if there is no #{Mongoid::Geospatial.lng_symbols.inspect}" if Mongoid::Geospatial.lat_symbols.index(keys[0])
25
+ values[0].to_f
26
+ end
27
+ end
28
+ end
@@ -15,4 +15,5 @@ Mongoid::Fields.option :spatial do |model, field, options|
15
15
  spatial_index field.name
16
16
 
17
17
  end
18
+
18
19
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Geospatial
3
- VERSION = "2.8.3"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  require 'geo_ruby'
2
- # require 'mongoid_geospatial/extensions/georuby'
2
+ require 'mongoid_geospatial/extensions/georuby_point'
3
3
 
4
4
  module Mongoid
5
5
  module Geospatial
@@ -11,26 +11,16 @@ module Mongoid
11
11
  GeoRuby::SimpleFeatures::Point.xy(x, y)
12
12
  end
13
13
 
14
- def distance other
14
+ def geo_distance other
15
15
  to_geo.spherical_distance(other.to_geo)
16
16
  end
17
17
 
18
- def self.mongoize(obj)
19
- case obj
20
- when GeoRuby::SimpleFeatures::Point then [obj.x, obj.y]
21
- when Point then obj.mongoize
22
- when Array then obj.to_xy
23
- when Hash then obj.to_xy
24
- else obj
25
- end
26
- end
27
18
  end
28
19
 
29
-
30
20
  class Line < GeometryField
31
21
 
32
22
  def to_geo
33
- GeoRuby::SimpleFeatures::LineString.from_coordinates([self])
23
+ GeoRuby::SimpleFeatures::LineString.from_coordinates(self)
34
24
  end
35
25
 
36
26
  end
@@ -38,7 +28,7 @@ module Mongoid
38
28
  class Polygon < GeometryField
39
29
 
40
30
  def to_geo
41
- GeoRuby::SimpleFeatures::Polygon.from_coordinates([self])
31
+ GeoRuby::SimpleFeatures::Polygon.from_coordinates(self)
42
32
  end
43
33
 
44
34
  end
@@ -5,23 +5,14 @@ module Mongoid
5
5
  module Geospatial
6
6
 
7
7
  class Point
8
- def to_geo
8
+ def to_rgeo
9
9
  RGeo::Geographic.spherical_factory.point x, y
10
10
  end
11
11
 
12
- def distance other
13
- to_geo.distance other.to_geo
12
+ def rgeo_distance other
13
+ to_rgeo.distance other.to_rgeo
14
14
  end
15
15
 
16
- def self.mongoize(obj)
17
- case obj
18
- when RGeo::Geographic::SphericalPointImpl then [obj.x, obj.y]
19
- when Point then obj.mongoize
20
- when Array then obj.to_xy
21
- when Hash then obj.to_xy
22
- else obj
23
- end
24
- end
25
16
  end
26
17
 
27
18
  class GeometryField
@@ -34,17 +25,19 @@ module Mongoid
34
25
  end
35
26
 
36
27
  class Line < GeometryField
37
- def to_geo
28
+ def to_rgeo
38
29
  RGeo::Geographic.spherical_factory.line_string points
39
30
  end
40
31
 
41
32
  end
42
33
 
43
34
  class Polygon < GeometryField
44
- def to_geo
35
+ def to_rgeo
45
36
  ring = RGeo::Geographic.spherical_factory.linear_ring points
46
37
  RGeo::Geographic.spherical_factory.polygon ring
47
38
  end
48
39
  end
40
+
49
41
  end
42
+
50
43
  end
@@ -2,8 +2,8 @@ require 'mongoid'
2
2
  require 'active_support/core_ext/string/inflections'
3
3
  require 'active_support/concern'
4
4
  require 'mongoid_geospatial/geospatial'
5
- require 'mongoid_geospatial/extensions/core_ext'
6
5
  require 'mongoid_geospatial/extensions/rgeo_spherical_point_impl'
6
+ require 'mongoid_geospatial/helpers/core'
7
7
  require 'mongoid_geospatial/helpers/spatial'
8
8
  require 'mongoid_geospatial/helpers/sphere'
9
9
  require 'mongoid_geospatial/helpers/delegate'
@@ -4,7 +4,7 @@ require File.expand_path('../lib/mongoid_geospatial/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Ryan Ong", "Marcos Piccinini"]
6
6
  gem.email = ["use@git.hub.com"]
7
- gem.description = "Mongoid Extension that simplifies MongoDB operations and autocast for spatial Ruby objects."
7
+ gem.description = "Mongoid Extension that simplifies MongoDB casting and operations on spatial Ruby objects."
8
8
  gem.summary = "Mongoid Extension that simplifies MongoDB Geospatial Operations."
9
9
  gem.homepage = "https://github.com/nofxx/mongoid_geospatial"
10
10
 
data/spec/models/alarm.rb CHANGED
@@ -2,6 +2,7 @@ class Alarm
2
2
  include Mongoid::Document
3
3
  include Mongoid::Geospatial
4
4
 
5
+ field :name
5
6
  field :radius, type: Circle
6
7
  field :area, type: Box
7
8
  field :spot, type: Point, sphere: true
data/spec/models/bus.rb CHANGED
@@ -2,6 +2,7 @@ class Bus
2
2
  include Mongoid::Document
3
3
  include Mongoid::Geospatial
4
4
 
5
+ field :name
5
6
  field :plates, :type => String
6
7
  field :location, :type => Point, :delegate => true
7
8
 
@@ -1,8 +1,7 @@
1
1
  class Person
2
2
  include Mongoid::Document
3
- include Mongoid::MultiParameterAttributes
4
3
  include Mongoid::Timestamps
5
- include Mongoid::Versioning
4
+ # include Mongoid::Versioning
6
5
  include Mongoid::Geospatial
7
6
 
8
7
  attr_accessor :mode
@@ -22,7 +21,7 @@ class Person
22
21
  field :score, type: Integer
23
22
  field :owner_id, type: Integer
24
23
  field :reading, type: Object
25
- field :bson_id, type: bson_object_id_class
24
+ # field :bson_id, type: bson_object_id_class
26
25
  field :employer_id
27
26
  field :security_code
28
27
  field :blood_alcohol_content, type: Float, :default => lambda{ 0.0 }
@@ -42,7 +41,7 @@ class Person
42
41
 
43
42
  attr_reader :rescored
44
43
 
45
- attr_protected :security_code, :owner_id
44
+ # attr_protected :security_code, :owner_id
46
45
 
47
46
  embeds_many :addresses, :as => :addressable do
48
47
  def extension
data/spec/models/river.rb CHANGED
@@ -4,7 +4,7 @@ class River
4
4
 
5
5
  field :name, type: String
6
6
  field :length, type: Integer
7
- field :average_discharge, type: Integer
7
+ field :discharge, type: Integer
8
8
  field :course, type: Line, spatial: true
9
9
  # set return_array to true if you do not want a hash returned all the time
10
10
  field :source, type: Point, spatial: true
@@ -12,11 +12,37 @@ describe Mongoid::Geospatial::Point do
12
12
  bar.location.should be_nil
13
13
  end
14
14
 
15
+ it "should set point methodically" do
16
+ bar = Bar.create!(name: "Moe's", location: Mongoid::Geospatial::Point.new)
17
+ bar.location = Mongoid::Geospatial::Point.new(8,8)
18
+ bar.save.should be_true
19
+ Bar.first.location.x.should eq(8)
20
+ end
21
+
22
+ it "should set point with comma separated text" do
23
+ bar = Bar.create!(name: "Moe's", location: Mongoid::Geospatial::Point.new)
24
+ bar.location = Mongoid::Geospatial::Point.new("2.99,3.99")
25
+ bar.location.mongoize.should eq([2.99, 3.99])
26
+ end
27
+
28
+ it "should set point with space separated text" do
29
+ bar = Bar.create!(name: "Moe's", location: Mongoid::Geospatial::Point.new)
30
+ bar.location = Mongoid::Geospatial::Point.new("2.99 3.99")
31
+ bar.location.mongoize.should eq([2.99, 3.99])
32
+ end
33
+
34
+ it "should set point with space comma separated text" do
35
+ bar = Bar.create!(name: "Moe's", location: Mongoid::Geospatial::Point.new)
36
+ bar.location = Mongoid::Geospatial::Point.new("2.99 , 3.99")
37
+ bar.location.mongoize.should eq([2.99, 3.99])
38
+ end
39
+
15
40
  it "should set point to nil" do
16
41
  bar = Bar.create!(name: "Moe's", location: [1, 1])
17
42
  bar.location = nil
18
43
  bar.location.should be_nil
19
44
  bar.save.should be_true
45
+ Bar.first.location.should be_nil
20
46
  end
21
47
 
22
48
  describe "methods" do
@@ -20,12 +20,12 @@ describe Mongoid::Geospatial do
20
20
 
21
21
  it "should create a 2d index" do
22
22
  Bar.create_indexes
23
- Bar.index_options.keys.should include({:location => '2d'})
23
+ Bar.collection.indexes[:location => '2d'].should_not be_nil
24
24
  end
25
25
 
26
26
  it "should create a 2dsphere index" do
27
27
  Alarm.create_indexes
28
- Alarm.index_options.keys.should include({:spot => '2dsphere'})
28
+ Alarm.collection.indexes[:spot => '2dsphere'].should_not be_nil
29
29
  end
30
30
 
31
31
  end
@@ -0,0 +1,28 @@
1
+ module Mongoid
2
+ module Geospatial
3
+
4
+ def self.from_array(ary)
5
+ ary[0..1].map(&:to_f)
6
+ end
7
+
8
+ def self.from_hash(hsh)
9
+ raise "Hash must have at least 2 items" if hsh.size < 2
10
+ [from_hash_x(hsh), from_hash_y(hsh)]
11
+ end
12
+
13
+ def self.from_hash_y(hsh)
14
+ v = (Mongoid::Geospatial.lat_symbols & hsh.keys).first
15
+ return hsh[v].to_f if !v.nil? && hsh[v]
16
+ fail "Hash must contain #{Mongoid::Geospatial.lat_symbols.inspect} if ruby version is less than 1.9" if RUBY_VERSION.to_f < 1.9
17
+ fail "Hash cannot contain #{Mongoid::Geospatial.lng_symbols.inspect} as the second item if there is no #{Mongoid::Geospatial.lat_symbols.inspect}" if Mongoid::Geospatial.lng_symbols.index(hsh.keys[1])
18
+ hsh.values[1].to_f
19
+ end
20
+
21
+ def self.from_hash_x(hsh)
22
+ v = (Mongoid::Geospatial.lng_symbols & hsh.keys).first
23
+ return hsh[v].to_f if !v.nil? && hsh[v]
24
+ fail "Hash cannot contain #{Mongoid::Geospatial.lat_symbols.inspect} as the first item if there is no #{Mongoid::Geospatial.lng_symbols.inspect}" if Mongoid::Geospatial.lat_symbols.index(keys[0])
25
+ values[0].to_f
26
+ end
27
+ end
28
+ end
@@ -9,7 +9,7 @@ describe Mongoid::Fields do
9
9
  end
10
10
 
11
11
  it "should created indexes" do
12
- Bar.index_options.keys.should include({:location => '2d'})
12
+ Bar.collection.indexes[:location => '2d'].should_not be_nil
13
13
  end
14
14
 
15
15
  it "should set spatial fields" do
@@ -9,7 +9,7 @@ describe Mongoid::Fields do
9
9
  end
10
10
 
11
11
  it "should created indexes" do
12
- Alarm.index_options.keys.should include({:spot => '2dsphere'})
12
+ Alarm.collection.indexes[:spot => '2dsphere'].should_not be_nil
13
13
  end
14
14
 
15
15
  it "should set spatial fields" do
@@ -24,7 +24,7 @@ describe Mongoid::Geospatial::Point do
24
24
  describe "queryable" do
25
25
 
26
26
  before do
27
- Mongoid::Geospatial.use_georuby
27
+ Mongoid::Geospatial.with_georuby!
28
28
  Place.create_indexes
29
29
  end
30
30
 
@@ -54,7 +54,7 @@ describe Mongoid::Geospatial::Point do
54
54
  it "should calculate 3d distances by default" do
55
55
  bar = Place.create! location: [-73.77694444, 40.63861111 ]
56
56
  bar2 = Place.create! location: [-118.40, 33.94] #,:unit=>:mi, :spherical => true)
57
- bar.location.distance(bar2.location).to_i.should be_within(1).of(3973808)
57
+ bar.location.geo_distance(bar2.location).to_i.should be_within(1).of(3973808)
58
58
  end
59
59
 
60
60
  describe "simple features" do
@@ -60,7 +60,7 @@ describe "RGeo Wrapper" do
60
60
  describe "queryable" do
61
61
 
62
62
  before do
63
- Mongoid::Geospatial.use_rgeo
63
+ Mongoid::Geospatial.with_rgeo!
64
64
  Bar.create_indexes
65
65
  Farm.create_indexes
66
66
  River.create_indexes
@@ -72,15 +72,15 @@ describe "RGeo Wrapper" do
72
72
  it "should mongoize array" do
73
73
  geom = Bar.new(location: [10, -9]).location
74
74
  geom.class.should eql(Mongoid::Geospatial::Point)
75
- geom.to_geo.class.should eql(RGeo::Geographic::SphericalPointImpl)
75
+ geom.to_rgeo.class.should eql(RGeo::Geographic::SphericalPointImpl)
76
76
  geom.x.should be_within(0.1).of(10)
77
- geom.to_geo.y.should be_within(0.1).of(-9)
77
+ geom.to_rgeo.y.should be_within(0.1).of(-9)
78
78
  end
79
79
 
80
80
  it "should mongoize hash" do
81
81
  geom = Bar.new(location: {x: 10, y: -9}).location
82
82
  geom.class.should eql(Mongoid::Geospatial::Point)
83
- geom.to_geo.class.should eql(RGeo::Geographic::SphericalPointImpl)
83
+ geom.to_rgeo.class.should eql(RGeo::Geographic::SphericalPointImpl)
84
84
  end
85
85
 
86
86
  it "should accept an RGeo object" do
@@ -93,7 +93,7 @@ describe "RGeo Wrapper" do
93
93
  it "should calculate 3d distances by default" do
94
94
  bar = Bar.create! location: [-73.77694444, 40.63861111 ]
95
95
  bar2 = Bar.create! location: [-118.40, 33.94] #,:unit=>:mi, :spherical => true)
96
- bar.location.distance(bar2.location).to_i.should be_within(1).of(3978262)
96
+ bar.location.rgeo_distance(bar2.location).to_i.should be_within(1).of(3978262)
97
97
  end
98
98
  end
99
99
 
@@ -101,8 +101,8 @@ describe "RGeo Wrapper" do
101
101
  it "should mongoize array" do
102
102
  geom = Farm.create!(area: [[5,5],[6,5],[6,6],[5,6]]).area
103
103
  geom.class.should eql(Mongoid::Geospatial::Polygon)
104
- geom.to_geo.class.should eql(RGeo::Geographic::SphericalPolygonImpl)
105
- geom.to_geo.to_s.should eq "POLYGON ((5.0 5.0, 6.0 5.0, 6.0 6.0, 5.0 6.0, 5.0 5.0))"
104
+ geom.to_rgeo.class.should eql(RGeo::Geographic::SphericalPolygonImpl)
105
+ geom.to_rgeo.to_s.should eq "POLYGON ((5.0 5.0, 6.0 5.0, 6.0 6.0, 5.0 6.0, 5.0 5.0))"
106
106
  end
107
107
  end
108
108
 
@@ -110,8 +110,8 @@ describe "RGeo Wrapper" do
110
110
  it "should mongoize array" do
111
111
  geom = River.create!(course: [[5,5],[6,5],[6,6],[5,6]]).course
112
112
  geom.class.should eql(Mongoid::Geospatial::Line)
113
- geom.to_geo.class.should eql(RGeo::Geographic::SphericalLineStringImpl)
114
- geom.to_geo.to_s.should eq "LINESTRING (5.0 5.0, 6.0 5.0, 6.0 6.0, 5.0 6.0)"
113
+ geom.to_rgeo.class.should eql(RGeo::Geographic::SphericalLineStringImpl)
114
+ geom.to_rgeo.to_s.should eq "LINESTRING (5.0 5.0, 6.0 5.0, 6.0 6.0, 5.0 6.0)"
115
115
  end
116
116
  end
117
117
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_geospatial
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.3
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Ong
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-28 00:00:00.000000000 Z
12
+ date: 2013-11-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
@@ -53,8 +53,8 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '3.2'
56
- description: Mongoid Extension that simplifies MongoDB operations and autocast for
57
- spatial Ruby objects.
56
+ description: Mongoid Extension that simplifies MongoDB casting and operations on spatial
57
+ Ruby objects.
58
58
  email:
59
59
  - use@git.hub.com
60
60
  executables: []
@@ -70,7 +70,7 @@ files:
70
70
  - README.md
71
71
  - Rakefile
72
72
  - lib/mongoid_geospatial.rb
73
- - lib/mongoid_geospatial/extensions/core_ext.rb
73
+ - lib/mongoid_geospatial/extensions/georuby_point.rb
74
74
  - lib/mongoid_geospatial/extensions/rgeo_spherical_point_impl.rb
75
75
  - lib/mongoid_geospatial/fields/box.rb
76
76
  - lib/mongoid_geospatial/fields/circle.rb
@@ -79,6 +79,7 @@ files:
79
79
  - lib/mongoid_geospatial/fields/point.rb
80
80
  - lib/mongoid_geospatial/fields/polygon.rb
81
81
  - lib/mongoid_geospatial/geospatial.rb
82
+ - lib/mongoid_geospatial/helpers/core.rb
82
83
  - lib/mongoid_geospatial/helpers/delegate.rb
83
84
  - lib/mongoid_geospatial/helpers/spatial.rb
84
85
  - lib/mongoid_geospatial/helpers/sphere.rb
@@ -96,13 +97,13 @@ files:
96
97
  - spec/models/phone.rb
97
98
  - spec/models/place.rb
98
99
  - spec/models/river.rb
99
- - spec/mongoid_geospatial/extensions/core_ext_spec.rb
100
100
  - spec/mongoid_geospatial/fields/box_spec.rb
101
101
  - spec/mongoid_geospatial/fields/circle_spec.rb
102
102
  - spec/mongoid_geospatial/fields/line_spec.rb
103
103
  - spec/mongoid_geospatial/fields/point_spec.rb
104
104
  - spec/mongoid_geospatial/fields/polygon_spec.rb
105
105
  - spec/mongoid_geospatial/geospatial_spec.rb
106
+ - spec/mongoid_geospatial/helpers/core_spec.rb
106
107
  - spec/mongoid_geospatial/helpers/delegate_spec.rb
107
108
  - spec/mongoid_geospatial/helpers/spatial_spec.rb
108
109
  - spec/mongoid_geospatial/helpers/sphere_spec.rb
@@ -147,13 +148,13 @@ test_files:
147
148
  - spec/models/phone.rb
148
149
  - spec/models/place.rb
149
150
  - spec/models/river.rb
150
- - spec/mongoid_geospatial/extensions/core_ext_spec.rb
151
151
  - spec/mongoid_geospatial/fields/box_spec.rb
152
152
  - spec/mongoid_geospatial/fields/circle_spec.rb
153
153
  - spec/mongoid_geospatial/fields/line_spec.rb
154
154
  - spec/mongoid_geospatial/fields/point_spec.rb
155
155
  - spec/mongoid_geospatial/fields/polygon_spec.rb
156
156
  - spec/mongoid_geospatial/geospatial_spec.rb
157
+ - spec/mongoid_geospatial/helpers/core_spec.rb
157
158
  - spec/mongoid_geospatial/helpers/delegate_spec.rb
158
159
  - spec/mongoid_geospatial/helpers/spatial_spec.rb
159
160
  - spec/mongoid_geospatial/helpers/sphere_spec.rb
@@ -1,29 +0,0 @@
1
- class Array
2
- def to_xy
3
- self[0..1].map(&:to_f)
4
- end
5
- alias :to_lng_lat :to_xy
6
- end
7
-
8
- class Hash
9
- def to_xy
10
- raise "Hash must have at least 2 items" if self.size < 2
11
- [to_x, to_y]
12
- end
13
- alias :to_lng_lat :to_xy
14
-
15
- def to_y
16
- v = (Mongoid::Geospatial.lat_symbols & self.keys).first
17
- return self[v].to_f if !v.nil? && self[v]
18
- raise "Hash must contain #{Mongoid::Geospatial.lat_symbols.inspect} if ruby version is less than 1.9" if RUBY_VERSION.to_f < 1.9
19
- raise "Hash cannot contain #{Mongoid::Geospatial.lng_symbols.inspect} as the second item if there is no #{Mongoid::Geospatial.lat_symbols.inspect}" if Mongoid::Geospatial.lng_symbols.index(self.keys[1])
20
- self.values[1].to_f
21
- end
22
-
23
- def to_x
24
- v = (Mongoid::Geospatial.lng_symbols & self.keys).first
25
- return self[v].to_f if !v.nil? && self[v]
26
- raise "Hash cannot contain #{Mongoid::Geospatial.lat_symbols.inspect} as the first item if there is no #{Mongoid::Geospatial.lng_symbols.inspect}" if Mongoid::Geospatial.lat_symbols.index(self.keys[0])
27
- self.values[0].to_f
28
- end
29
- end
@@ -1,32 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "Core Extensions" do
4
-
5
- describe Array do
6
-
7
- it "should have a #to_xy method" do
8
- [1,2,3].to_xy.should eql([1.0, 2.0])
9
- end
10
-
11
- end
12
-
13
- describe Hash do
14
-
15
- it "converts hash with symbol keys x,y to array with x,y" do
16
- { x: 1.1, y: 2.1 }.to_xy.should eql([1.1, 2.1])
17
- end
18
-
19
- it "converts hash with symbol keys y,x to array with x,y" do
20
- { y: 2.1, x: 1.1 }.to_xy.should eql([1.1, 2.1])
21
- end
22
-
23
- it "converts hash with string keys x,y to array with x,y" do
24
- { 'x' => 1.1, 'y' => 2.1 }.to_xy.should eql([1.1, 2.1])
25
- end
26
-
27
- it "converts hash with string keys y,x to array with x,y" do
28
- { 'y' => 2.1, 'x' => 1.1 }.to_xy.should eql([1.1, 2.1])
29
- end
30
-
31
- end
32
- end