mongoid_geospatial 2.8.3 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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