tire 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/tire/results/pagination.rb +12 -5
- data/lib/tire/search.rb +4 -2
- data/lib/tire/version.rb +1 -1
- data/test/integration/active_record_searchable_test.rb +10 -10
- data/test/unit/search_test.rb +22 -0
- metadata +3 -3
@@ -8,20 +8,27 @@ module Tire
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def total_pages
|
11
|
-
|
12
|
-
result < 1 ? 1 : result.ceil
|
11
|
+
( @total.to_f / (@options[:per_page] || @options[:size] || 10 ).to_i ).ceil
|
13
12
|
end
|
14
13
|
|
15
14
|
def current_page
|
16
|
-
@options[:page]
|
15
|
+
if @options[:page]
|
16
|
+
@options[:page].to_i
|
17
|
+
else
|
18
|
+
(@options[:size].to_i + @options[:from].to_i) / @options[:size].to_i
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
22
|
def previous_page
|
20
|
-
|
23
|
+
current_page > 1 ? (current_page - 1) : nil
|
21
24
|
end
|
22
25
|
|
23
26
|
def next_page
|
24
|
-
|
27
|
+
current_page < total_pages ? (current_page + 1) : nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def out_of_bounds?
|
31
|
+
current_page > total_pages
|
25
32
|
end
|
26
33
|
|
27
34
|
end
|
data/lib/tire/search.rb
CHANGED
@@ -3,10 +3,10 @@ module Tire
|
|
3
3
|
|
4
4
|
class Search
|
5
5
|
|
6
|
-
attr_reader :indices, :url, :results, :response, :json, :query, :facets, :filters
|
6
|
+
attr_reader :indices, :url, :results, :response, :json, :query, :facets, :filters, :options
|
7
7
|
|
8
8
|
def initialize(*indices, &block)
|
9
|
-
@options = indices.
|
9
|
+
@options = indices.last.is_a?(Hash) ? indices.pop : {}
|
10
10
|
@indices = indices
|
11
11
|
raise ArgumentError, 'Please pass index or indices to search' if @indices.empty?
|
12
12
|
if @options
|
@@ -49,11 +49,13 @@ module Tire
|
|
49
49
|
|
50
50
|
def from(value)
|
51
51
|
@from = value
|
52
|
+
@options[:from] = value
|
52
53
|
self
|
53
54
|
end
|
54
55
|
|
55
56
|
def size(value)
|
56
57
|
@size = value
|
58
|
+
@options[:size] = value
|
57
59
|
self
|
58
60
|
end
|
59
61
|
|
data/lib/tire/version.rb
CHANGED
@@ -96,7 +96,7 @@ module Tire
|
|
96
96
|
|
97
97
|
assert_equal 2, results.total_pages
|
98
98
|
assert_equal 1, results.current_page
|
99
|
-
assert_equal
|
99
|
+
assert_equal nil, results.previous_page
|
100
100
|
assert_equal 2, results.next_page
|
101
101
|
|
102
102
|
assert_equal 'Test1', results.first.title
|
@@ -109,7 +109,7 @@ module Tire
|
|
109
109
|
assert_equal 2, results.total_pages
|
110
110
|
assert_equal 2, results.current_page
|
111
111
|
assert_equal 1, results.previous_page
|
112
|
-
assert_equal
|
112
|
+
assert_equal nil, results.next_page
|
113
113
|
|
114
114
|
assert_equal 'Test6', results.first.title
|
115
115
|
end
|
@@ -121,7 +121,7 @@ module Tire
|
|
121
121
|
assert_equal 2, results.total_pages
|
122
122
|
assert_equal 3, results.current_page
|
123
123
|
assert_equal 2, results.previous_page
|
124
|
-
assert_equal
|
124
|
+
assert_equal nil, results.next_page
|
125
125
|
|
126
126
|
assert_nil results.first
|
127
127
|
end
|
@@ -132,7 +132,7 @@ module Tire
|
|
132
132
|
setup { @q = 'test*' }
|
133
133
|
|
134
134
|
should "find first page with five results" do
|
135
|
-
results = ActiveRecordArticle.search
|
135
|
+
results = ActiveRecordArticle.search do |search|
|
136
136
|
search.query { |query| query.string @q }
|
137
137
|
search.sort { title }
|
138
138
|
search.from 0
|
@@ -142,14 +142,14 @@ module Tire
|
|
142
142
|
|
143
143
|
assert_equal 2, results.total_pages
|
144
144
|
assert_equal 1, results.current_page
|
145
|
-
assert_equal
|
145
|
+
assert_equal nil, results.previous_page
|
146
146
|
assert_equal 2, results.next_page
|
147
147
|
|
148
148
|
assert_equal 'Test1', results.first.title
|
149
149
|
end
|
150
150
|
|
151
151
|
should "find next page with five results" do
|
152
|
-
results = ActiveRecordArticle.search
|
152
|
+
results = ActiveRecordArticle.search do |search|
|
153
153
|
search.query { |query| query.string @q }
|
154
154
|
search.sort { title }
|
155
155
|
search.from 5
|
@@ -160,13 +160,13 @@ module Tire
|
|
160
160
|
assert_equal 2, results.total_pages
|
161
161
|
assert_equal 2, results.current_page
|
162
162
|
assert_equal 1, results.previous_page
|
163
|
-
assert_equal
|
163
|
+
assert_equal nil, results.next_page
|
164
164
|
|
165
165
|
assert_equal 'Test6', results.first.title
|
166
166
|
end
|
167
167
|
|
168
|
-
should "
|
169
|
-
results = ActiveRecordArticle.search
|
168
|
+
should "not find a missing page" do
|
169
|
+
results = ActiveRecordArticle.search do |search|
|
170
170
|
search.query { |query| query.string @q }
|
171
171
|
search.sort { title }
|
172
172
|
search.from 10
|
@@ -177,7 +177,7 @@ module Tire
|
|
177
177
|
assert_equal 2, results.total_pages
|
178
178
|
assert_equal 3, results.current_page
|
179
179
|
assert_equal 2, results.previous_page
|
180
|
-
assert_equal
|
180
|
+
assert_equal nil, results.next_page
|
181
181
|
|
182
182
|
assert_nil results.first
|
183
183
|
end
|
data/test/unit/search_test.rb
CHANGED
@@ -187,6 +187,28 @@ module Tire
|
|
187
187
|
assert_equal 3, hash['from']
|
188
188
|
end
|
189
189
|
|
190
|
+
should "set the size value in options" do
|
191
|
+
Results::Collection.any_instance.stubs(:total).returns(50)
|
192
|
+
s = Search::Search.new('index') do
|
193
|
+
size 5
|
194
|
+
end
|
195
|
+
|
196
|
+
assert_equal 5, s.options[:size]
|
197
|
+
end
|
198
|
+
|
199
|
+
should "set the from value in options" do
|
200
|
+
Results::Collection.any_instance.stubs(:total).returns(50)
|
201
|
+
s = Search::Search.new('index') do
|
202
|
+
from 5
|
203
|
+
end
|
204
|
+
|
205
|
+
assert_equal 5, s.options[:from]
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
context "when limiting returned fields" do
|
211
|
+
|
190
212
|
should "set the fields limit in request" do
|
191
213
|
s = Search::Search.new('index') do
|
192
214
|
fields :title
|
metadata
CHANGED