mongoid_spacial 0.2.7 → 0.2.8
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.md +1 -2
- data/VERSION +1 -1
- data/lib/mongoid_spacial/spacial/geo_near_results.rb +30 -36
- data/mongoid_spacial.gemspec +2 -2
- data/spec/functional/mongoid/spacial/geo_near_results_spec.rb +30 -7
- metadata +3 -3
data/README.md
CHANGED
@@ -138,9 +138,8 @@ River.geo_near([-73.99756,40.73083], :page => 1)
|
|
138
138
|
#
|
139
139
|
# both return a GeoNearResults, which is really just a modified Array
|
140
140
|
# #per really just #page but just moves the options around
|
141
|
-
rivers = River.geo_near([-73.99756,40.73083]).sort_by!{|r| r.
|
141
|
+
rivers = River.geo_near([-73.99756,40.73083]).sort_by!{|r| r.geo[:distance] * r.multiplier }
|
142
142
|
rivers = rivers.per(25).page(1)
|
143
|
-
rivers = rivers.page(5, :original => 1) # by adding the original option you can re-paginate to any area.
|
144
143
|
rivers.reset! # resets the object to it is original state right after query.
|
145
144
|
```
|
146
145
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.8
|
@@ -1,18 +1,17 @@
|
|
1
1
|
module Mongoid
|
2
2
|
module Spacial
|
3
3
|
class GeoNearResults < Array
|
4
|
-
attr_reader :stats, :document, :_original_array
|
4
|
+
attr_reader :stats, :document, :_original_array, :_original_opts
|
5
5
|
attr_accessor :opts
|
6
6
|
|
7
7
|
def initialize(document,results,opts = {})
|
8
8
|
raise "class must include Mongoid::Spacial::Document" unless document.respond_to?(:spacial_fields_indexed)
|
9
9
|
@document = document
|
10
10
|
@opts = opts
|
11
|
+
@_original_opts = opts.clone
|
11
12
|
@stats = results['stats'] || {}
|
12
13
|
@opts[:skip] ||= 0
|
13
14
|
@opts[:total_entries] = opts[:query]["num"] || @stats['nscanned']
|
14
|
-
@limit_value = opts[:per_page]
|
15
|
-
@current_page = opts[:page]
|
16
15
|
|
17
16
|
@_original_array = results['results'].collect do |result|
|
18
17
|
res = Mongoid::Factory.from_db(@document, result.delete('obj'))
|
@@ -40,10 +39,10 @@ module Mongoid
|
|
40
39
|
end
|
41
40
|
res
|
42
41
|
end
|
43
|
-
|
44
42
|
if @opts[:page]
|
45
43
|
start = (@opts[:page]-1)*@opts[:per_page] # assuming current_page is 1 based.
|
46
|
-
|
44
|
+
@_paginated_array = @_original_array.clone
|
45
|
+
super(@_paginated_array[@opts[:skip]+start, @opts[:per_page]] || [])
|
47
46
|
else
|
48
47
|
super(@_original_array[@opts[:skip]..-1] || [])
|
49
48
|
end
|
@@ -51,36 +50,20 @@ module Mongoid
|
|
51
50
|
|
52
51
|
def page(page, options = {})
|
53
52
|
new_collection = self.clone
|
53
|
+
original = options.delete(:original)
|
54
|
+
new_collection.opts.merge!(options)
|
55
|
+
new_collection.opts[:paginator] ||= Mongoid::Spacial.paginator
|
54
56
|
|
55
|
-
|
56
|
-
|
57
|
-
options[:page] = (page) ? page.to_i : 1
|
58
|
-
|
59
|
-
options[:paginator] ||= Mongoid::Spacial.paginator()
|
60
|
-
|
61
|
-
options[:per_page] ||= case options[:paginator]
|
62
|
-
when :will_paginate
|
63
|
-
@document.per_page
|
64
|
-
when :kaminari
|
65
|
-
Kaminari.config.default_per_page
|
66
|
-
else
|
67
|
-
Mongoid::Spacial.default_per_page
|
68
|
-
end
|
69
|
-
|
70
|
-
options[:per_page] = options[:per_page].to_i
|
57
|
+
start = (new_collection.current_page-1)*new_collection.limit_value # assuming current_page is 1 based.
|
71
58
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
new_collection.replace(@_original_array[@opts[:skip]+start, options[:per_page]] || [])
|
59
|
+
if original
|
60
|
+
@_paginated_array = @_original_array.clone
|
61
|
+
new_collection.replace(@_original_array[new_collection.opts[:skip]+start, new_collection.limit_value] || [])
|
76
62
|
else
|
77
|
-
|
63
|
+
@_paginated_array ||= self.to_a
|
64
|
+
new_collection.replace(@_paginated_array[new_collection.opts[:skip]+start, new_collection.limit_value])
|
78
65
|
end
|
79
66
|
|
80
|
-
new_collection.opts[:page] = options[:page]
|
81
|
-
new_collection.opts[:paginator] = options[:paginator]
|
82
|
-
new_collection.opts[:per_page] = options[:per_page]
|
83
|
-
|
84
67
|
new_collection
|
85
68
|
end
|
86
69
|
|
@@ -90,10 +73,9 @@ module Mongoid
|
|
90
73
|
|
91
74
|
def reset!
|
92
75
|
self.replace(@_original_array)
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
self
|
76
|
+
@opts = @_original_opts
|
77
|
+
@_paginated_array = nil
|
78
|
+
true
|
97
79
|
end
|
98
80
|
|
99
81
|
def reset
|
@@ -107,11 +89,23 @@ module Mongoid
|
|
107
89
|
end
|
108
90
|
|
109
91
|
def current_page
|
110
|
-
@opts[:page]
|
92
|
+
page = (@opts[:page]) ? @opts[:page].to_i.abs : 1
|
93
|
+
(@opts[:page] < 1) ? 1 : page
|
111
94
|
end
|
112
95
|
|
113
96
|
def limit_value
|
114
|
-
@opts[:per_page]
|
97
|
+
if @opts[:per_page]
|
98
|
+
@opts[:per_page] = @opts[:per_page].to_i.abs
|
99
|
+
else
|
100
|
+
@opts[:per_page] = case new_collection.opts[:paginator]
|
101
|
+
when :will_paginate
|
102
|
+
@document.per_page
|
103
|
+
when :kaminari
|
104
|
+
Kaminari.config.default_per_page
|
105
|
+
else
|
106
|
+
Mongoid::Spacial.default_per_page
|
107
|
+
end
|
108
|
+
end
|
115
109
|
end
|
116
110
|
alias_method :per_page, :limit_value
|
117
111
|
|
data/mongoid_spacial.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid_spacial}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = [%q{Ryan Ong}]
|
12
|
-
s.date = %q{2011-07-
|
12
|
+
s.date = %q{2011-07-18}
|
13
13
|
s.description = %q{A Mongoid Extention that simplifies and adds support for MongoDB Geo Spacial Calculations.}
|
14
14
|
s.email = %q{ryanong@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -5,29 +5,52 @@ describe Mongoid::Spacial::GeoNearResults do
|
|
5
5
|
Bar.delete_all
|
6
6
|
Bar.create_indexes
|
7
7
|
|
8
|
-
50.times do
|
9
|
-
Bar.create(
|
8
|
+
50.times do |i|
|
9
|
+
Bar.create(:name => i.to_s, :location => [rand(358)-179,rand(358)-179])
|
10
10
|
end
|
11
|
+
end
|
12
|
+
|
13
|
+
before(:each) do
|
11
14
|
while Bar.count < 50
|
12
15
|
end
|
13
16
|
end
|
17
|
+
|
14
18
|
context ":paginator :array" do
|
15
|
-
[
|
19
|
+
let!(:bars) { Bar.geo_near([1,1]) }
|
20
|
+
let!(:sorted_bars) { Bar.geo_near([1,1]).sort_by {|b| b.name.to_i}}
|
21
|
+
[nil,1,2].each do |page|
|
16
22
|
it "page=#{page} should have 25" do
|
17
|
-
|
23
|
+
bars.page(page).size.should == 25
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
[1,2].each do |page|
|
28
|
+
it "modified result should keep order after pagination" do
|
29
|
+
sorted_bars.page(page).should == sorted_bars.slice((page-1)*25,25)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
{ nil => 25, 20 => 20 , 30 => 20, 50 => 0}.each do |per, total|
|
34
|
+
it "page=2 per=#{per} should have #{total}" do
|
35
|
+
bars.per(per).page(2).size.should == total
|
36
|
+
bars.page(2).per(per).size.should == total
|
18
37
|
end
|
19
38
|
end
|
20
39
|
|
21
40
|
it "page=3 should have 0" do
|
22
|
-
|
41
|
+
bars.page(3).size.should == 0
|
23
42
|
end
|
24
43
|
|
25
44
|
it "per=5" do
|
26
|
-
|
45
|
+
bars.per(5).size.should == 5
|
46
|
+
end
|
47
|
+
|
48
|
+
it "page=10 per=5" do
|
49
|
+
bars.per(5).page(10).should == bars[45..50]
|
27
50
|
end
|
28
51
|
end
|
29
52
|
|
30
|
-
context ":paginator :kaminari" do
|
53
|
+
context ":paginator :kaminari" do
|
31
54
|
let!(:near) {Bar.geo_near([1,1]).page(1)}
|
32
55
|
it "should have current_page" do
|
33
56
|
near.current_page.should == 1
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mongoid_spacial
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ryan Ong
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-18 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongoid
|
@@ -264,7 +264,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
264
264
|
requirements:
|
265
265
|
- - ">="
|
266
266
|
- !ruby/object:Gem::Version
|
267
|
-
hash:
|
267
|
+
hash: -3478690375054845577
|
268
268
|
segments:
|
269
269
|
- 0
|
270
270
|
version: "0"
|