mwmitchell-rsolr 0.5.8 → 0.5.9
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/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
|