mwmitchell-rsolr 0.5.8 → 0.5.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +8 -0
- data/lib/rsolr/connection/search_ext.rb +9 -2
- data/lib/rsolr/response/index_info.rb +10 -0
- data/lib/rsolr.rb +1 -1
- data/test/response/base_test.rb +38 -0
- data/test/response/pagination_test.rb +58 -0
- data/test/response/query_test.rb +44 -0
- data/test/response/search_ext_test.rb +19 -0
- metadata +7 -5
data/CHANGES.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
0.5.9 - January 7, 2009
|
2
|
+
Finally brought in the ExtLib Mash classes for incoming params and response hashes from solr
|
3
|
+
- this gives the ability to access/set values for hashes using strings OR symbols (HashWithIndifferentAccess)
|
4
|
+
Organized response tests
|
5
|
+
Added more response tests
|
6
|
+
Simplified the RSolr::Response::Base class by supporting only raw/string ruby input
|
7
|
+
Added method to Response::IndexInfo for grabbing a Solr field list
|
8
|
+
|
1
9
|
0.5.7 - January 5, 2009
|
2
10
|
Changed name from Solr to RSolr, changed all references to Solr to RSolr
|
3
11
|
Added new tests for RSolr::Mapper and RSolr::Message
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module RSolr::Connection::SearchExt
|
2
2
|
|
3
|
+
# TODO : clean this thing up dude
|
4
|
+
|
3
5
|
def search(params={})
|
4
6
|
params = params.to_mash
|
5
7
|
if params[:fields]
|
@@ -12,14 +14,19 @@ module RSolr::Connection::SearchExt
|
|
12
14
|
phrase_filters = params.delete(:phrase_filters)
|
13
15
|
params[:filters] ||= {}
|
14
16
|
phrase_filters.each do |filter,values|
|
17
|
+
values = [values] unless values.is_a?(Array)
|
15
18
|
params[:filters][filter] ||= []
|
19
|
+
params[:filters][filter] = [params[:filters][filter]] unless params[:filters][filter].is_a?(Array)
|
16
20
|
values.each do |v|
|
17
|
-
params[:filters][filter] <<
|
21
|
+
params[:filters][filter] << %(\"#{v}\")
|
18
22
|
end
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
22
|
-
|
26
|
+
if params[:filters]
|
27
|
+
filter_params = params.delete(:filters)
|
28
|
+
params[:fq] = build_filters(filter_params)
|
29
|
+
end
|
23
30
|
facets = params.delete(:facets) if params[:facets]
|
24
31
|
|
25
32
|
if facets
|
@@ -20,4 +20,14 @@ class RSolr::Response::IndexInfo < RSolr::Response::Base
|
|
20
20
|
@version = @index[:version]
|
21
21
|
end
|
22
22
|
|
23
|
+
# Returns an array of fields from the index
|
24
|
+
# An optional rule can be used for "grepping" field names:
|
25
|
+
# field_list(/_facet$/)
|
26
|
+
def field_list(rule=nil)
|
27
|
+
@data[:fields].select do |k,v|
|
28
|
+
rule ? k =~ rule : true
|
29
|
+
end.collect{|k,v|k}
|
30
|
+
end
|
31
|
+
|
32
|
+
|
23
33
|
end
|
data/lib/rsolr.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helpers')
|
2
|
+
|
3
|
+
class ResponseBaseTest < RSolrBaseTest
|
4
|
+
|
5
|
+
def test_accessors
|
6
|
+
|
7
|
+
adapter_response = {:body=>mock_query_response}
|
8
|
+
|
9
|
+
r = RSolr::Response::Base.new(adapter_response)
|
10
|
+
|
11
|
+
assert_class Mash, r.data
|
12
|
+
assert_class Mash, r.params
|
13
|
+
assert_class Mash, r.header
|
14
|
+
|
15
|
+
# make sure the incoming adapter response is the same as the response.input
|
16
|
+
assert_equal adapter_response, r.input
|
17
|
+
|
18
|
+
assert_equal r.query_time, r.header[:QTime]
|
19
|
+
assert_equal r.query_time, r.header['QTime']
|
20
|
+
|
21
|
+
assert_equal r.params, r.header[:params]
|
22
|
+
assert_equal r.params, r.header['params']
|
23
|
+
|
24
|
+
assert_equal '*:*', r.params[:q]
|
25
|
+
assert_equal '*:*', r.params['q']
|
26
|
+
|
27
|
+
assert_equal 0, r.status
|
28
|
+
assert_equal r.status, r.header[:status]
|
29
|
+
assert_equal r.status, r.header['status']
|
30
|
+
|
31
|
+
assert_equal r.header, r.data[:responseHeader]
|
32
|
+
assert_equal r.header, r.data['responseHeader']
|
33
|
+
|
34
|
+
assert r.ok?
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helpers')
|
2
|
+
|
3
|
+
class ResponsePaginationTest < RSolrBaseTest
|
4
|
+
|
5
|
+
def create_response(params={})
|
6
|
+
response = RSolr::Response::Query::Base.new(mock_query_response)
|
7
|
+
response.params.merge! params
|
8
|
+
response
|
9
|
+
end
|
10
|
+
|
11
|
+
# test the Solr::Connection pagination methods
|
12
|
+
def test_connection_calculate_start
|
13
|
+
dummy_connection = RSolr::Connection::Base.new(nil)
|
14
|
+
assert_equal 15, dummy_connection.send(:calculate_start, 2, 15)
|
15
|
+
assert_equal 450, dummy_connection.send(:calculate_start, 10, 50)
|
16
|
+
assert_equal 0, dummy_connection.send(:calculate_start, 0, 50)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_connection_modify_params_for_pagination
|
20
|
+
dummy_connection = RSolr::Connection::Base.new(nil)
|
21
|
+
p = dummy_connection.send(:modify_params_for_pagination, {:page=>1})
|
22
|
+
assert_equal 0, p[:start]
|
23
|
+
assert_equal 10, p[:rows]
|
24
|
+
#
|
25
|
+
p = dummy_connection.send(:modify_params_for_pagination, {:page=>10, :per_page=>100})
|
26
|
+
assert_equal 900, p[:start]
|
27
|
+
assert_equal 100, p[:rows]
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_math
|
31
|
+
response = create_response({'rows'=>5})
|
32
|
+
assert_equal response.params['rows'], response.per_page
|
33
|
+
assert_equal 26, response.total
|
34
|
+
assert_equal 1, response.current_page
|
35
|
+
assert_equal 6, response.total_pages
|
36
|
+
|
37
|
+
# now switch the rows (per_page)
|
38
|
+
# total and current page should remain the same value
|
39
|
+
# page_count should change
|
40
|
+
|
41
|
+
response = create_response({'rows'=>2})
|
42
|
+
assert_equal response.params['rows'], response.per_page
|
43
|
+
assert_equal 26, response.total
|
44
|
+
assert_equal 1, response.current_page
|
45
|
+
assert_equal 13, response.total_pages
|
46
|
+
|
47
|
+
# now switch the start
|
48
|
+
|
49
|
+
response = create_response({'rows'=>3})
|
50
|
+
response.instance_variable_set '@start', 4
|
51
|
+
assert_equal response.params['rows'], response.per_page
|
52
|
+
assert_equal 26, response.total
|
53
|
+
# 2 per page, currently on the 10th item
|
54
|
+
assert_equal 2, response.current_page
|
55
|
+
assert_equal 9, response.total_pages
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helpers')
|
2
|
+
|
3
|
+
class ResponseQueryTest < RSolrBaseTest
|
4
|
+
|
5
|
+
def query_response
|
6
|
+
RSolr::Response::Query::Base.new(mock_query_response)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_accessors
|
10
|
+
r = query_response
|
11
|
+
assert r.response
|
12
|
+
assert_class Array, r.docs
|
13
|
+
|
14
|
+
# total and num_found are the same
|
15
|
+
assert_equal 26, r.num_found
|
16
|
+
assert_equal r.total, r.num_found
|
17
|
+
|
18
|
+
# start and offset are the same
|
19
|
+
assert_equal 0, r.start
|
20
|
+
assert_equal r.offset, r.start
|
21
|
+
end
|
22
|
+
|
23
|
+
# make sure the docs respond to key and symbol access (using the Mash class)
|
24
|
+
def test_doc_string_and_symbol_key_access
|
25
|
+
response = query_response
|
26
|
+
response.docs.each do |doc|
|
27
|
+
assert doc.is_a?(Mash)
|
28
|
+
assert_equal doc['id'], doc[:id]
|
29
|
+
assert doc.key?(:id)
|
30
|
+
assert doc.key?('id')
|
31
|
+
if doc[:cat]
|
32
|
+
# if this doc has a cat (multiValues) of memory and electronics
|
33
|
+
# test the has? method
|
34
|
+
if doc[:cat].include?('memory') and doc[:cat].include?('electronics')
|
35
|
+
assert doc.has?(:cat, 'memory')
|
36
|
+
assert doc.has?(:cat, /elec/)
|
37
|
+
assert doc.has?('cat', 'memory')
|
38
|
+
assert doc.has?('cat', /elec/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helpers')
|
2
|
+
|
3
|
+
class ResponseSearchExtTest < RSolrBaseTest
|
4
|
+
|
5
|
+
def test_facet_response_methods
|
6
|
+
=begin
|
7
|
+
@response.facets
|
8
|
+
@response.facet_fields
|
9
|
+
@response.facet_queries
|
10
|
+
@response.facet_fields_by_hash
|
11
|
+
@response.facet_field(:feed_language_facet)
|
12
|
+
@response.facet_field_values(:feed_language_facet)
|
13
|
+
@response.facet_field_by_hash(:feed_language_facet)
|
14
|
+
@response.facet_field_by_hash(:feed_language_facet)
|
15
|
+
@response.facet_field_count(:feed_title_facet, 'ScienceDaily: Latest Science News')
|
16
|
+
=end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
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.5.
|
4
|
+
version: 0.5.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Mitchell
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-07 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -93,7 +93,6 @@ test_files:
|
|
93
93
|
- test/connection/direct_test.rb
|
94
94
|
- test/connection/http_test.rb
|
95
95
|
- test/connection/test_methods.rb
|
96
|
-
- test/connection/search_ext_test_methods.rb
|
97
96
|
- test/core_ext_test
|
98
97
|
- test/http_client/curb_test.rb
|
99
98
|
- test/http_client/net_http_test.rb
|
@@ -102,7 +101,10 @@ test_files:
|
|
102
101
|
- test/indexer.rb
|
103
102
|
- test/mapper_test.rb
|
104
103
|
- test/message_test.rb
|
105
|
-
- test/
|
106
|
-
- test/
|
104
|
+
- test/response/base_test.rb
|
105
|
+
- test/response/pagination_test.rb
|
106
|
+
- test/response/query_test.rb
|
107
|
+
- test/response/search_ext_test.rb
|
107
108
|
- test/rsolr_test
|
109
|
+
- test/ruby-lang.org.rss.xml
|
108
110
|
- test/test_helpers.rb
|