mongoid_geo 0.5.4.1 → 0.6.0

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