mwmitchell-rsolr 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +6 -1
- data/README.rdoc +1 -1
- data/lib/rsolr/query.rb +58 -0
- data/lib/rsolr.rb +2 -1
- data/test/query_helper_test.rb +30 -0
- data/test/test_helpers.rb +18 -0
- metadata +3 -1
data/CHANGES.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
0.7.1 - February 27, 2009
|
2
|
+
Added simple query helper module -> RSolr::Query
|
3
|
+
Added tests for RSolr::Query
|
4
|
+
Modified Test::Unit::TestCase in test/test_helpers.rb
|
5
|
+
|
1
6
|
0.7.0 - February 20, 2009
|
2
7
|
Removed all param mapping behavior, code and tests
|
3
8
|
- this stuff just gunks up rsolr and should be in an extension of some sort
|
@@ -17,7 +22,7 @@
|
|
17
22
|
updated comments for #search method
|
18
23
|
Updated tests
|
19
24
|
Bumped up version
|
20
|
-
|
25
|
+
|
21
26
|
0.6.8 - January 28, 2009
|
22
27
|
New method added to RSolr::Connection::Base - #find_values_for_facet
|
23
28
|
This method searches for facet values only, and sets the :rows param to 0
|
data/README.rdoc
CHANGED
@@ -55,7 +55,7 @@ Use the #query method to send requests to the /select handler:
|
|
55
55
|
response = solr.find_by_id(1)
|
56
56
|
|
57
57
|
==== Pagination
|
58
|
-
Pagination is simplified
|
58
|
+
Pagination is simplified by having a few helpful response methods:
|
59
59
|
|
60
60
|
response = solr.query(:start=>0, :rows=>10, :q=>'*:*')
|
61
61
|
response.per_page
|
data/lib/rsolr/query.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
module RSolr::Query
|
2
|
+
|
3
|
+
module HelperMethods
|
4
|
+
|
5
|
+
# returns a quoted or non-quoted string
|
6
|
+
# "value" should be a string
|
7
|
+
# "quote" should be true/false
|
8
|
+
def prep_value(value, quote)
|
9
|
+
quote ? %("#{value}") : value
|
10
|
+
end
|
11
|
+
|
12
|
+
# value can be a string, array, hash or symbol
|
13
|
+
# symbols are treated as strings
|
14
|
+
# arrays are recursed through #build_query
|
15
|
+
# keys for hashes are fields for fielded queries, the values are recused through #build_query
|
16
|
+
# strings/symbols are sent to #prep_value for possible quoting
|
17
|
+
#
|
18
|
+
# opts can have:
|
19
|
+
# :quote=>bool - default false
|
20
|
+
# :join=>string - default ' '
|
21
|
+
def build_query(value, opts={})
|
22
|
+
opts[:join]||=' '
|
23
|
+
opts[:quote]||=false
|
24
|
+
result = (
|
25
|
+
case value
|
26
|
+
when Array
|
27
|
+
value.collect do |item|
|
28
|
+
build_query item, opts
|
29
|
+
end.flatten
|
30
|
+
when String,Symbol
|
31
|
+
[prep_value(value.to_s, opts[:quote])]
|
32
|
+
when Hash
|
33
|
+
value.collect do |(k,v)|
|
34
|
+
"#{k}:#{build_query(v, opts)}"
|
35
|
+
end.flatten
|
36
|
+
else
|
37
|
+
[prep_value(value.to_s, opts[:quote])]
|
38
|
+
end
|
39
|
+
)
|
40
|
+
opts[:join] ? result.join(opts[:join]) : result
|
41
|
+
end
|
42
|
+
|
43
|
+
# start_for(2, 10)
|
44
|
+
# calculates the :start value for pagination etc..
|
45
|
+
def start_for(current_page, per_page)
|
46
|
+
page = current_page.to_s.to_i
|
47
|
+
page = page > 0 ? page : 1
|
48
|
+
((page - 1) * (per_page || 0))
|
49
|
+
end
|
50
|
+
|
51
|
+
end # end HelperMethods
|
52
|
+
|
53
|
+
# Easy access: RSolr::Query::Helper.start_for(page=1, per_page=10)
|
54
|
+
class Helper
|
55
|
+
extend HelperMethods
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/lib/rsolr.rb
CHANGED
@@ -7,13 +7,14 @@ proc {|base, files|
|
|
7
7
|
|
8
8
|
module RSolr
|
9
9
|
|
10
|
-
VERSION = '0.7.
|
10
|
+
VERSION = '0.7.1'
|
11
11
|
|
12
12
|
autoload :Message, 'rsolr/message'
|
13
13
|
autoload :Response, 'rsolr/response'
|
14
14
|
autoload :Connection, 'rsolr/connection'
|
15
15
|
autoload :Indexer, 'rsolr/indexer'
|
16
16
|
autoload :HTTPClient, 'rsolr/http_client'
|
17
|
+
autoload :Query, 'rsolr/query'
|
17
18
|
|
18
19
|
# factory for creating connections
|
19
20
|
# opts[:adapter] is either :http or :direct
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helpers.rb')
|
2
|
+
|
3
|
+
class RSolrQueryHelperTest < RSolrBaseTest
|
4
|
+
|
5
|
+
H = RSolr::Query::Helper
|
6
|
+
|
7
|
+
test 'pre_value' do
|
8
|
+
value = 'the man'
|
9
|
+
assert_equal 'the man', H.prep_value(value, false)
|
10
|
+
assert_equal "\"the man\"", H.prep_value(value, :quote=>true)
|
11
|
+
end
|
12
|
+
|
13
|
+
test 'build_query' do
|
14
|
+
assert_equal 'testing', H.build_query('testing')
|
15
|
+
assert_equal '"testing"', H.build_query('testing', :quote=>true)
|
16
|
+
assert_equal 'testing again', H.build_query(['testing', 'again'])
|
17
|
+
assert_equal '"testing" "again"', H.build_query(['testing', 'again'], :quote=>true)
|
18
|
+
assert_equal 'name:whatever', H.build_query({:name=>'whatever'})
|
19
|
+
assert_equal 'name:"whatever"', H.build_query({:name=>'whatever'}, :quote=>true)
|
20
|
+
assert_equal 'sam name:whatever i am', H.build_query(['sam', {:name=>'whatever'}, 'i', 'am'])
|
21
|
+
assert_equal 'testing AND blah', H.build_query(['testing', 'blah'], :join=>' AND ')
|
22
|
+
end
|
23
|
+
|
24
|
+
test 'start_for' do
|
25
|
+
per_page = 8
|
26
|
+
current_page = 2
|
27
|
+
assert_equal 8, H.start_for(current_page, per_page)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/test/test_helpers.rb
CHANGED
@@ -2,6 +2,24 @@ $: << File.dirname(__FILE__)
|
|
2
2
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'rsolr')
|
3
3
|
require 'test/unit'
|
4
4
|
|
5
|
+
#
|
6
|
+
class Test::Unit::TestCase
|
7
|
+
|
8
|
+
def self.test(name, &block)
|
9
|
+
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
10
|
+
defined = instance_method(test_name) rescue false
|
11
|
+
raise "#{test_name} is already defined in #{self}" if defined
|
12
|
+
if block_given?
|
13
|
+
define_method(test_name, &block)
|
14
|
+
else
|
15
|
+
define_method(test_name) do
|
16
|
+
flunk "No implementation provided for #{name}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
5
23
|
class RSolrBaseTest < Test::Unit::TestCase
|
6
24
|
|
7
25
|
def assert_class(expected, instance)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mwmitchell-rsolr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Mitchell
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- lib/rsolr/response/query.rb
|
57
57
|
- lib/rsolr/response/update.rb
|
58
58
|
- lib/rsolr/response.rb
|
59
|
+
- lib/rsolr/query.rb
|
59
60
|
- LICENSE
|
60
61
|
- Rakefile
|
61
62
|
- README.rdoc
|
@@ -97,6 +98,7 @@ test_files:
|
|
97
98
|
- test/http_client/util_test.rb
|
98
99
|
- test/indexer.rb
|
99
100
|
- test/message_test.rb
|
101
|
+
- test/query_helper_test.rb
|
100
102
|
- test/response/base_test.rb
|
101
103
|
- test/response/pagination_test.rb
|
102
104
|
- test/response/query_test.rb
|