elastic_searchable 0.4.0 → 0.5.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.
- data/VERSION +1 -1
- data/elastic_searchable.gemspec +2 -2
- data/lib/elastic_searchable/queries.rb +17 -4
- data/test/test_elastic_searchable.rb +32 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/elastic_searchable.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{elastic_searchable}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ryan Sonnek"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-03-04}
|
13
13
|
s.description = %q{integrate the elastic search engine with rails}
|
14
14
|
s.email = %q{ryan@codecrate.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -2,17 +2,19 @@ require 'will_paginate/collection'
|
|
2
2
|
|
3
3
|
module ElasticSearchable
|
4
4
|
module Queries
|
5
|
+
PER_PAGE_DEFAULT = 20
|
6
|
+
|
5
7
|
# search returns a will_paginate collection of ActiveRecord objects for the search results
|
6
|
-
# options:
|
7
|
-
# :
|
8
|
-
# :page
|
8
|
+
# supported options:
|
9
|
+
# :page - page of results to search for
|
10
|
+
# :per_page - number of results per page
|
9
11
|
#
|
10
12
|
# http://www.elasticsearch.com/docs/elasticsearch/rest_api/search/
|
11
13
|
def search(query, options = {})
|
12
14
|
page = (options.delete(:page) || 1).to_i
|
13
15
|
options[:fields] ||= '_id'
|
14
16
|
options[:q] ||= query
|
15
|
-
options[:size] ||= (options
|
17
|
+
options[:size] ||= per_page_for_search(options)
|
16
18
|
options[:from] ||= options[:size] * (page - 1)
|
17
19
|
|
18
20
|
response = ElasticSearchable.request :get, index_type_path('_search'), :query => options
|
@@ -24,5 +26,16 @@ module ElasticSearchable
|
|
24
26
|
page.replace results
|
25
27
|
page
|
26
28
|
end
|
29
|
+
|
30
|
+
private
|
31
|
+
# determine the number of search results per page
|
32
|
+
# supports will_paginate configuration by using:
|
33
|
+
# Model.per_page
|
34
|
+
# Model.max_per_page
|
35
|
+
def per_page_for_search(options = {})
|
36
|
+
per_page = options.delete(:per_page) || (self.respond_to?(:per_page) ? self.per_page : nil) || ElasticSearchable::Queries::PER_PAGE_DEFAULT
|
37
|
+
per_page = [per_page.to_i, self.max_per_page].min if self.respond_to?(:max_per_page)
|
38
|
+
per_page
|
39
|
+
end
|
27
40
|
end
|
28
41
|
end
|
@@ -20,6 +20,9 @@ class TestElasticSearchable < Test::Unit::TestCase
|
|
20
20
|
create_table :books, :force => true do |t|
|
21
21
|
t.column :title, :string
|
22
22
|
end
|
23
|
+
create_table :max_page_size_classes, :force => true do |t|
|
24
|
+
t.column :name, :string
|
25
|
+
end
|
23
26
|
end
|
24
27
|
|
25
28
|
def setup
|
@@ -282,5 +285,34 @@ class TestElasticSearchable < Test::Unit::TestCase
|
|
282
285
|
end
|
283
286
|
end
|
284
287
|
end
|
288
|
+
|
289
|
+
class MaxPageSizeClass < ActiveRecord::Base
|
290
|
+
elastic_searchable
|
291
|
+
def self.max_per_page
|
292
|
+
1
|
293
|
+
end
|
294
|
+
end
|
295
|
+
context 'with 2 MaxPageSizeClass instances' do
|
296
|
+
setup do
|
297
|
+
MaxPageSizeClass.create_index
|
298
|
+
@first = MaxPageSizeClass.create! :name => 'foo one'
|
299
|
+
@second = MaxPageSizeClass.create! :name => 'foo two'
|
300
|
+
MaxPageSizeClass.refresh_index
|
301
|
+
end
|
302
|
+
context 'MaxPageSizeClass.search with default options' do
|
303
|
+
setup do
|
304
|
+
@results = MaxPageSizeClass.search 'foo'
|
305
|
+
end
|
306
|
+
should 'have one per page' do
|
307
|
+
assert_equal 1, @results.per_page
|
308
|
+
end
|
309
|
+
should 'return one instance' do
|
310
|
+
assert_equal 1, @results.length
|
311
|
+
end
|
312
|
+
should 'have second page' do
|
313
|
+
assert_equal 2, @results.total_entries
|
314
|
+
end
|
315
|
+
end
|
316
|
+
end
|
285
317
|
end
|
286
318
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elastic_searchable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 5
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Sonnek
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-03-04 00:00:00 -06:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|