mongoid_geo 0.5.4.1 → 0.6.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.
Files changed (57) hide show
  1. data/.rspec +1 -0
  2. data/Changelog.textile +18 -0
  3. data/Gemfile +17 -0
  4. data/README.textile +45 -4
  5. data/Rakefile +41 -11
  6. data/VERSION +1 -0
  7. data/lib/mongoid/geo/index.rb +14 -2
  8. data/sandbox/haversine.rb +17 -0
  9. data/sandbox/location.rb +38 -0
  10. data/sandbox/test.rb +12 -0
  11. data/spec/dummy/Rakefile +7 -0
  12. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  13. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  14. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  15. data/spec/dummy/config.ru +4 -0
  16. data/spec/dummy/config/application.rb +44 -0
  17. data/spec/dummy/config/boot.rb +10 -0
  18. data/spec/dummy/config/environment.rb +5 -0
  19. data/spec/dummy/config/environments/development.rb +26 -0
  20. data/spec/dummy/config/environments/production.rb +49 -0
  21. data/spec/dummy/config/environments/test.rb +35 -0
  22. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  23. data/spec/dummy/config/initializers/inflections.rb +10 -0
  24. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  25. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  26. data/spec/dummy/config/initializers/session_store.rb +8 -0
  27. data/spec/dummy/config/locales/en.yml +5 -0
  28. data/spec/dummy/config/mongoid.yml +23 -0
  29. data/spec/dummy/config/routes.rb +58 -0
  30. data/spec/dummy/public/404.html +26 -0
  31. data/spec/dummy/public/422.html +26 -0
  32. data/spec/dummy/public/500.html +26 -0
  33. data/spec/dummy/public/favicon.ico +0 -0
  34. data/spec/dummy/public/javascripts/application.js +2 -0
  35. data/spec/dummy/public/javascripts/controls.js +965 -0
  36. data/spec/dummy/public/javascripts/dragdrop.js +974 -0
  37. data/spec/dummy/public/javascripts/effects.js +1123 -0
  38. data/spec/dummy/public/javascripts/prototype.js +6001 -0
  39. data/spec/dummy/public/javascripts/rails.js +175 -0
  40. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  41. data/spec/dummy/script/rails +6 -0
  42. data/spec/integration/navigation_spec.rb +9 -0
  43. data/spec/models/address.rb +23 -0
  44. data/spec/models/person.rb +9 -0
  45. data/spec/mongoid/db_v1_8/geo_near_places_spec.rb +30 -0
  46. data/spec/mongoid/db_v1_8/geo_near_spec.rb +55 -0
  47. data/spec/mongoid/db_v1_8/geonear_benchmark_spec.rb +48 -0
  48. data/spec/mongoid/db_v1_8/spherical_calc_spec.rb +149 -0
  49. data/spec/mongoid/geo/geo_fields_spec.rb +140 -0
  50. data/spec/mongoid/geo/geo_inclusions_spec.rb +20 -0
  51. data/spec/mongoid/geo/geo_inflections_spec.rb +237 -0
  52. data/spec/mongoid/geo/geo_near_spec.rb +58 -0
  53. data/spec/mongoid/geo/geo_near_to_model_spec.rb +74 -0
  54. data/spec/mongoid/geo/geo_spherical_mode_spec.rb +137 -0
  55. data/spec/mongoid/spec_helper.rb +23 -0
  56. data/spec/spec_helper.rb +31 -0
  57. metadata +174 -29
@@ -0,0 +1,74 @@
1
+ require "mongoid/spec_helper"
2
+
3
+ Address.collection.create_index([['location', Mongo::GEO2D]], :min => -180, :max => 180)
4
+
5
+ describe Mongoid::Geo::Near do
6
+
7
+ let(:address) do
8
+ Address.new
9
+ end
10
+
11
+ before(:each) do
12
+ Address.create(:location => [45, 11], :city => 'Munich')
13
+ Address.create(:location => [46, 12], :city => 'Berlin')
14
+ Address.create(:location => [46, 11], :city => 'Berlin')
15
+ end
16
+
17
+ describe "geoNear" do
18
+ describe 'Mongo DB version 1.7+ uses internal distance calculations' do
19
+ it "should return models with distances not calculated by haversine" do
20
+ Mongoid::Geo.mongo_db_version = 1.7
21
+
22
+ address.location = "23.5, -47"
23
+ results = Address.geoNear(address, :location)
24
+ results.first.lat.should == 45
25
+
26
+ # if Mongo DB < 1.7 installed but Mongoid Geo configured for 1.7
27
+ #models.map(&:distance).first.should == nil
28
+
29
+ # if Mongo DB 1.7 installed but Mongoid Geo configured for 1.7
30
+ results.map(&:distance).first.should be_within(0.0001).of(61.85669195123871)
31
+ end
32
+ end
33
+
34
+ context "mongo_db_version is 1.5" do
35
+
36
+ before(:each) do
37
+ Mongoid::Geo.mongo_db_version = 1.5
38
+ address.location = "23.5, -47"
39
+ @hashies = Address.geoNear(address, :location)
40
+ end
41
+ describe '#to_models' do
42
+ it "should return models" do
43
+ pending "I'm current useing mongodb > 1.5,so can't make this pass"
44
+ models = @hashies.to_models
45
+ models.first.distance.should == @hashies.first.distance
46
+ models.first.lat.should == 45
47
+ models.map(&:distance).first.should > 1
48
+ end
49
+ end
50
+
51
+ describe '#to_model' do
52
+ it "should return model" do
53
+ pending "I'm current useing mongodb > 1.5,so can't make this pass"
54
+ hashie = @hashies.first
55
+
56
+ my_model = hashie.to_model
57
+
58
+ my_model.distance.should == hashie.distance
59
+
60
+ my_model.lat.should == 45
61
+ first_dist = my_model.distance
62
+ my_model.distance.should > 1
63
+ lambda {my_model.distance = 500}.should raise_error
64
+ my_model.distance.should > 1
65
+
66
+ address.location = "27.5, 12"
67
+ my_model = Address.geoNear(address, :location, :num => 1).first.to_model
68
+ my_model.distance.should_not == first_dist
69
+ end
70
+ end
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,137 @@
1
+ require "mongoid/spec_helper"
2
+
3
+ describe 'Mongoid Spherical mode' do
4
+
5
+ let(:address) do
6
+ Address.new
7
+ end
8
+
9
+ let(:point) do
10
+ b = (Struct.new :lat, :lng).new
11
+ b.lat = 72
12
+ b.lng = -44
13
+ b
14
+ end
15
+
16
+ let(:location) do
17
+ a = (Struct.new :location).new
18
+ a.location = point
19
+ a
20
+ end
21
+
22
+ let(:position) do
23
+ a = (Struct.new :position).new
24
+ a.position = point
25
+ a
26
+ end
27
+
28
+
29
+ let(:other_point) do
30
+ b = (Struct.new :latitude, :longitude).new
31
+ b.latitude = 72
32
+ b.longitude = -44
33
+ b
34
+ end
35
+
36
+
37
+ describe "Special geo Array setter" do
38
+ it "should split a String into parts and convert to floats" do
39
+ Mongoid::Geo.spherical.should be_false
40
+ Mongoid::Geo.spherical_mode do
41
+ Mongoid::Geo.spherical.should be_true
42
+ Mongoid::Geo.lat_index.should == 1
43
+ Mongoid::Geo.lng_index.should == 0
44
+ address.location = "23.5, -47"
45
+ address.location.should == [23.5, -47].reverse
46
+ end
47
+ Mongoid::Geo.spherical.should be_false
48
+ end
49
+
50
+ context 'Spherical mode' do
51
+ before :each do
52
+ Mongoid::Geo.spherical = true
53
+ end
54
+
55
+ after :each do
56
+ Mongoid::Geo.spherical = false
57
+ end
58
+
59
+ it "should split a String into parts and convert to floats" do
60
+ address.location = "23.5, -47"
61
+ address.location.should == [23.5, -47].reverse
62
+ end
63
+
64
+ it "should work with point Hash, keys :lat, :lng" do
65
+ address.location = {:lat => 23.5, :lng => -49}
66
+ address.location.should == [23.5, -49].reverse
67
+ end
68
+
69
+ it "should work with point Hash, keys :latitude, :longitude" do
70
+ address.location = {:latitude => 23.5, :longitude => -49}
71
+ address.location.should == [23.5, -49].reverse
72
+ end
73
+
74
+
75
+ it "should work with point hashes using the first point only" do
76
+ address.location = [{:lat => 23.5, :lng => -49}, {:lat => 72, :lng => -49}]
77
+ address.location.should == [23.5, -49].reverse
78
+ end
79
+
80
+ it "should work with point object has #lat and #lng methods" do
81
+ address.location = point
82
+ address.location.should == [72, -44].reverse
83
+ end
84
+
85
+ it 'should work with point object that has location attribute' do
86
+ address.location = location
87
+ address.location.should == [72, -44].reverse
88
+ end
89
+
90
+ it 'should work with point object that has position attribute add should add #lat and #lng methods' do
91
+ address.location = position
92
+ address.location.should == [72, -44].reverse
93
+ address.lat.should == 72
94
+ address.lng.should == -44
95
+ end
96
+
97
+ it 'should work with point object that has position attribute and should add #latitude and #longitude methods' do
98
+ address.pos = position
99
+ address.pos.should == [72, -44].reverse
100
+ address.latitude.should == 72
101
+ address.latitude = 45
102
+ address.latitude.should == 45
103
+ address.longitude.should == -44
104
+ end
105
+
106
+ it 'should work with point object that has #latitude and #longitude methods' do
107
+ address.location = other_point
108
+ address.location.should == [72, -44].reverse
109
+ end
110
+
111
+ it "should work with point objects using the first point only" do
112
+ address.location = [point, {:lat => 72, :lng => -49}]
113
+ address.location.should == [72, -44].reverse
114
+ end
115
+
116
+ it "should drop nils" do
117
+ address.location = [nil, point, {:lat => 72, :lng => -49}]
118
+ address.location.should == [72, -44].reverse
119
+ end
120
+
121
+ it "should default to normal behavior" do
122
+ address.location = 23.5, -49
123
+ address.location.should == [23.5, -49].reverse
124
+
125
+ address.location = [23.5, -50]
126
+ address.location.should == [23.5, -50].reverse
127
+ end
128
+
129
+ it "should handle nil values" do
130
+ address.location = nil
131
+ address.location.should be_nil
132
+ address.lat.should be_nil
133
+ address.lng.should be_nil
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,23 @@
1
+ require 'rspec'
2
+ require 'mongoid'
3
+ require 'mongoid_geo'
4
+
5
+ Mongoid.configure.master = Mongo::Connection.new.db('mongoid-geo')
6
+
7
+ Mongoid.database.collections.each do |coll|
8
+ coll.remove
9
+ end
10
+
11
+ # require 'mongoid/geo/fields'
12
+ require 'models/address'
13
+ require 'models/person'
14
+
15
+ RSpec.configure do |config|
16
+ config.after :each do
17
+ Mongoid.database.collections.each do |coll|
18
+ coll.remove
19
+ end
20
+ end
21
+ end
22
+
23
+
@@ -0,0 +1,31 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+ require "rspec/rails"
7
+
8
+ ActionMailer::Base.delivery_method = :test
9
+ ActionMailer::Base.perform_deliveries = true
10
+ ActionMailer::Base.default_url_options[:host] = "test.com"
11
+
12
+ Rails.backtrace_cleaner.remove_silencers!
13
+
14
+ # Configure capybara for integration testing
15
+ require "capybara/rails"
16
+ Capybara.default_driver = :rack_test
17
+ Capybara.default_selector = :css
18
+
19
+ # Load support files
20
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
21
+
22
+ RSpec.configure do |config|
23
+ # Remove this line if you don't want RSpec's should and should_not
24
+ # methods or matchers
25
+ require 'rspec/expectations'
26
+ config.include RSpec::Matchers
27
+
28
+ # == Mock Framework
29
+ config.mock_with :rspec
30
+ end
31
+
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.4.1
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,33 +9,110 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-05-19 00:00:00.000000000Z
12
+ date: 2011-05-21 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rspec
16
- requirement: &2152630280 !ruby/object:Gem::Requirement
15
+ name: mongoid
16
+ requirement: &2155643760 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>'
20
+ - !ruby/object:Gem::Version
21
+ version: '2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2155643760
25
+ - !ruby/object:Gem::Dependency
26
+ name: bson
27
+ requirement: &2155643160 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '1.3'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2155643160
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: &2155642540 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>'
42
+ - !ruby/object:Gem::Version
43
+ version: '3'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *2155642540
47
+ - !ruby/object:Gem::Dependency
48
+ name: hashie
49
+ requirement: &2155641820 !ruby/object:Gem::Requirement
17
50
  none: false
18
51
  requirements:
19
52
  - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.0
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *2155641820
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: &2155641140 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>'
20
64
  - !ruby/object:Gem::Version
21
65
  version: '2.4'
22
66
  type: :development
23
67
  prerelease: false
24
- version_requirements: *2152630280
68
+ version_requirements: *2155641140
25
69
  - !ruby/object:Gem::Dependency
26
- name: mongoid
27
- requirement: &2152629620 !ruby/object:Gem::Requirement
70
+ name: bundler
71
+ requirement: &2155640520 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>'
75
+ - !ruby/object:Gem::Version
76
+ version: '1'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2155640520
80
+ - !ruby/object:Gem::Dependency
81
+ name: jeweler
82
+ requirement: &2155639820 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>'
86
+ - !ruby/object:Gem::Version
87
+ version: '1.5'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *2155639820
91
+ - !ruby/object:Gem::Dependency
92
+ name: rdoc
93
+ requirement: &2155629500 !ruby/object:Gem::Requirement
28
94
  none: false
29
95
  requirements:
30
96
  - - ! '>='
31
97
  - !ruby/object:Gem::Version
32
- version: 2.0.1
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *2155629500
102
+ - !ruby/object:Gem::Dependency
103
+ name: mongoid
104
+ requirement: &2155628820 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>'
108
+ - !ruby/object:Gem::Version
109
+ version: '2'
33
110
  type: :runtime
34
111
  prerelease: false
35
- version_requirements: *2152629620
112
+ version_requirements: *2155628820
36
113
  - !ruby/object:Gem::Dependency
37
114
  name: bson
38
- requirement: &2152629120 !ruby/object:Gem::Requirement
115
+ requirement: &2155628100 !ruby/object:Gem::Requirement
39
116
  none: false
40
117
  requirements:
41
118
  - - ! '>='
@@ -43,21 +120,21 @@ dependencies:
43
120
  version: '1.3'
44
121
  type: :runtime
45
122
  prerelease: false
46
- version_requirements: *2152629120
123
+ version_requirements: *2155628100
47
124
  - !ruby/object:Gem::Dependency
48
125
  name: activesupport
49
- requirement: &2152622740 !ruby/object:Gem::Requirement
126
+ requirement: &2155627380 !ruby/object:Gem::Requirement
50
127
  none: false
51
128
  requirements:
52
- - - ! '>='
129
+ - - ! '>'
53
130
  - !ruby/object:Gem::Version
54
- version: 3.0.4
131
+ version: '3'
55
132
  type: :runtime
56
133
  prerelease: false
57
- version_requirements: *2152622740
134
+ version_requirements: *2155627380
58
135
  - !ruby/object:Gem::Dependency
59
136
  name: hashie
60
- requirement: &2152622280 !ruby/object:Gem::Requirement
137
+ requirement: &2155626680 !ruby/object:Gem::Requirement
61
138
  none: false
62
139
  requirements:
63
140
  - - ! '>='
@@ -65,14 +142,33 @@ dependencies:
65
142
  version: 0.4.0
66
143
  type: :runtime
67
144
  prerelease: false
68
- version_requirements: *2152622280
69
- description: Geo spatial extension on Mongoid 2, to add more geo-spatial capabilities
70
- email:
71
- - kmandrup@gmail.com
145
+ version_requirements: *2155626680
146
+ - !ruby/object:Gem::Dependency
147
+ name: rspec
148
+ requirement: &2155625980 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>'
152
+ - !ruby/object:Gem::Version
153
+ version: '2.4'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *2155625980
157
+ description: Makes it easy to use geo calculations with Mongoid
158
+ email: kmandrup@gmail.com
72
159
  executables: []
73
160
  extensions: []
74
- extra_rdoc_files: []
161
+ extra_rdoc_files:
162
+ - README.textile
75
163
  files:
164
+ - .rspec
165
+ - Changelog.textile
166
+ - Gemfile
167
+ - MIT-LICENSE
168
+ - README.textile
169
+ - Rakefile
170
+ - VERSION
171
+ - lib/mongoid/geo.rb
76
172
  - lib/mongoid/geo/criteria.rb
77
173
  - lib/mongoid/geo/criteria_helpers.rb
78
174
  - lib/mongoid/geo/criterion/complex.rb
@@ -86,13 +182,59 @@ files:
86
182
  - lib/mongoid/geo/inflections.rb
87
183
  - lib/mongoid/geo/point.rb
88
184
  - lib/mongoid/geo/unit.rb
89
- - lib/mongoid/geo.rb
90
185
  - lib/mongoid_geo.rb
91
- - MIT-LICENSE
92
- - Rakefile
93
- - README.textile
94
- homepage: https://github.com/kristianmandrup/mongoid-geo
95
- licenses: []
186
+ - sandbox/haversine.rb
187
+ - sandbox/location.rb
188
+ - sandbox/test.rb
189
+ - spec/dummy/Rakefile
190
+ - spec/dummy/app/controllers/application_controller.rb
191
+ - spec/dummy/app/helpers/application_helper.rb
192
+ - spec/dummy/app/views/layouts/application.html.erb
193
+ - spec/dummy/config.ru
194
+ - spec/dummy/config/application.rb
195
+ - spec/dummy/config/boot.rb
196
+ - spec/dummy/config/environment.rb
197
+ - spec/dummy/config/environments/development.rb
198
+ - spec/dummy/config/environments/production.rb
199
+ - spec/dummy/config/environments/test.rb
200
+ - spec/dummy/config/initializers/backtrace_silencers.rb
201
+ - spec/dummy/config/initializers/inflections.rb
202
+ - spec/dummy/config/initializers/mime_types.rb
203
+ - spec/dummy/config/initializers/secret_token.rb
204
+ - spec/dummy/config/initializers/session_store.rb
205
+ - spec/dummy/config/locales/en.yml
206
+ - spec/dummy/config/mongoid.yml
207
+ - spec/dummy/config/routes.rb
208
+ - spec/dummy/public/404.html
209
+ - spec/dummy/public/422.html
210
+ - spec/dummy/public/500.html
211
+ - spec/dummy/public/favicon.ico
212
+ - spec/dummy/public/javascripts/application.js
213
+ - spec/dummy/public/javascripts/controls.js
214
+ - spec/dummy/public/javascripts/dragdrop.js
215
+ - spec/dummy/public/javascripts/effects.js
216
+ - spec/dummy/public/javascripts/prototype.js
217
+ - spec/dummy/public/javascripts/rails.js
218
+ - spec/dummy/public/stylesheets/.gitkeep
219
+ - spec/dummy/script/rails
220
+ - spec/integration/navigation_spec.rb
221
+ - spec/models/address.rb
222
+ - spec/models/person.rb
223
+ - spec/mongoid/db_v1_8/geo_near_places_spec.rb
224
+ - spec/mongoid/db_v1_8/geo_near_spec.rb
225
+ - spec/mongoid/db_v1_8/geonear_benchmark_spec.rb
226
+ - spec/mongoid/db_v1_8/spherical_calc_spec.rb
227
+ - spec/mongoid/geo/geo_fields_spec.rb
228
+ - spec/mongoid/geo/geo_inclusions_spec.rb
229
+ - spec/mongoid/geo/geo_inflections_spec.rb
230
+ - spec/mongoid/geo/geo_near_spec.rb
231
+ - spec/mongoid/geo/geo_near_to_model_spec.rb
232
+ - spec/mongoid/geo/geo_spherical_mode_spec.rb
233
+ - spec/mongoid/spec_helper.rb
234
+ - spec/spec_helper.rb
235
+ homepage: http://github.com/kristianmandrup/mongoid_geo
236
+ licenses:
237
+ - MIT
96
238
  post_install_message:
97
239
  rdoc_options: []
98
240
  require_paths:
@@ -103,16 +245,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
245
  - - ! '>='
104
246
  - !ruby/object:Gem::Version
105
247
  version: '0'
248
+ segments:
249
+ - 0
250
+ hash: -1498625376764748443
106
251
  required_rubygems_version: !ruby/object:Gem::Requirement
107
252
  none: false
108
253
  requirements:
109
254
  - - ! '>='
110
255
  - !ruby/object:Gem::Version
111
- version: 1.3.6
256
+ version: '0'
112
257
  requirements: []
113
258
  rubyforge_project:
114
259
  rubygems_version: 1.8.0
115
260
  signing_key:
116
261
  specification_version: 3
117
- summary: Adds extra convenience methods for geo-spatial operations etc.
262
+ summary: Mongoid geo extensions with support for native Mongo DB calculations
118
263
  test_files: []