rspec-solr 1.0.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +53 -0
- data/.travis.yml +1 -3
- data/.yardopts +1 -1
- data/Gemfile +2 -0
- data/MATCHERS.md +168 -0
- data/{README.rdoc → README.md} +31 -26
- data/Rakefile +4 -4
- data/lib/rspec-solr.rb +6 -7
- data/lib/rspec-solr/compare_num_docs_matcher.rb +32 -49
- data/lib/rspec-solr/have_documents_matcher.rb +10 -19
- data/lib/rspec-solr/have_facet_field_matcher.rb +16 -24
- data/lib/rspec-solr/include_documents_matcher.rb +65 -46
- data/lib/rspec-solr/solr_response_hash.rb +52 -55
- data/lib/rspec-solr/version.rb +1 -1
- data/lib/tasks/ci.rake +4 -4
- data/lib/tasks/doc.rake +8 -8
- data/lib/tasks/spec.rake +1 -1
- data/rspec-solr.gemspec +20 -20
- data/spec/comparing_num_docs_in_2_resp_spec.rb +205 -217
- data/spec/have_documents_spec.rb +37 -39
- data/spec/have_facet_field_spec.rb +69 -74
- data/spec/include_before_spec.rb +69 -77
- data/spec/include_document_spec.rb +317 -340
- data/spec/include_in_each_of_first_n_spec.rb +76 -79
- data/spec/include_in_first_n_spec.rb +188 -192
- data/spec/number_of_documents_spec.rb +192 -201
- data/spec/solr_response_hash_spec.rb +85 -92
- data/spec/spec_helper.rb +5 -16
- metadata +44 -31
- data/MATCHERS.rdoc +0 -169
- data/spec/support/matchers.rb +0 -22
@@ -1,28 +1,19 @@
|
|
1
1
|
# Custom RSpec Matchers for Solr responses
|
2
2
|
module RSpecSolr::Matchers
|
3
|
-
|
4
|
-
# Determine if the receiver has Solr documents
|
5
|
-
# NOTE: this is about the TOTAL number of Solr documents matching the query, not solely the number of docs in THIS response
|
6
|
-
def have_documents
|
7
|
-
# Placeholder method for documentation purposes;
|
8
|
-
# the actual method is defined using RSpec's matcher DSL
|
9
|
-
end
|
10
|
-
|
11
|
-
# Define .have_documents
|
3
|
+
# @!method have_documents
|
12
4
|
# Determine if the receiver (a Solr response object) has at least one document
|
13
5
|
# NOTE: this is about the TOTAL number of Solr documents matching the query, not solely the number of docs in THIS response
|
14
|
-
RSpec::Matchers.define :have_documents do
|
6
|
+
RSpec::Matchers.define :have_documents do
|
15
7
|
match do |solr_resp|
|
16
|
-
solr_resp[
|
8
|
+
solr_resp['response']['numFound'] > 0
|
9
|
+
end
|
10
|
+
|
11
|
+
failure_message do |solr_resp|
|
12
|
+
"expected documents in Solr response #{solr_resp['response']}"
|
17
13
|
end
|
18
14
|
|
19
|
-
|
20
|
-
"
|
15
|
+
failure_message_when_negated do |solr_resp|
|
16
|
+
"did not expect documents, but Solr response had #{solr_resp['response']['numFound']}"
|
21
17
|
end
|
22
|
-
|
23
|
-
failure_message_for_should_not do |solr_resp|
|
24
|
-
"did not expect documents, but Solr response had #{solr_resp["response"]["numFound"]}"
|
25
|
-
end
|
26
18
|
end
|
27
|
-
|
28
|
-
end
|
19
|
+
end
|
@@ -1,26 +1,18 @@
|
|
1
1
|
# Custom RSpec Matchers for Solr responses
|
2
2
|
module RSpecSolr::Matchers
|
3
|
-
|
4
|
-
# Determine if the receiver has the facet_field
|
5
|
-
def have_facet_field
|
6
|
-
# Placeholder method for documentation purposes;
|
7
|
-
# the actual method is defined using RSpec's matcher DSL
|
8
|
-
end
|
9
|
-
|
10
3
|
# this is the lambda used to determine if the receiver (a Solr response object) has non-empty values for the facet field
|
11
4
|
# as the expected RSpecSolr::SolrResponseHash
|
12
|
-
def self.
|
13
|
-
lambda
|
14
|
-
|
15
|
-
match_for_should do |solr_resp|
|
5
|
+
def self.facet_field_body?
|
6
|
+
lambda do |expected_facet_field_name|
|
7
|
+
match do |solr_resp|
|
16
8
|
if @facet_val
|
17
9
|
solr_resp.has_facet_field_with_value?(expected_facet_field_name, @facet_val)
|
18
10
|
else
|
19
11
|
solr_resp.has_facet_field?(expected_facet_field_name)
|
20
12
|
end
|
21
13
|
end
|
22
|
-
|
23
|
-
|
14
|
+
|
15
|
+
match_when_negated do |solr_resp|
|
24
16
|
# we should fail if we are looking for a specific facet value but the facet field isn't present in the response
|
25
17
|
@has_field = solr_resp.has_facet_field?(expected_facet_field_name)
|
26
18
|
if @facet_val
|
@@ -34,15 +26,15 @@ module RSpecSolr::Matchers
|
|
34
26
|
end
|
35
27
|
end
|
36
28
|
|
37
|
-
|
29
|
+
failure_message do |solr_resp|
|
38
30
|
if @facet_val
|
39
31
|
"expected facet field #{expected_facet_field_name} with value #{@facet_val} in Solr response: #{solr_resp}"
|
40
32
|
else
|
41
33
|
"expected facet field #{expected_facet_field_name} with values in Solr response: #{solr_resp}"
|
42
34
|
end
|
43
35
|
end
|
44
|
-
|
45
|
-
|
36
|
+
|
37
|
+
failure_message_when_negated do |solr_resp|
|
46
38
|
if @facet_val
|
47
39
|
if @has_field
|
48
40
|
"expected facet field #{expected_facet_field_name} not to have value #{@facet_val} in Solr response: #{solr_resp}"
|
@@ -52,18 +44,18 @@ module RSpecSolr::Matchers
|
|
52
44
|
else
|
53
45
|
"expected no #{expected_facet_field_name} facet field in Solr response: #{solr_resp}"
|
54
46
|
end
|
55
|
-
end
|
56
|
-
|
47
|
+
end
|
48
|
+
|
57
49
|
chain :with_value do |val|
|
58
50
|
@facet_val = val
|
59
51
|
end
|
60
|
-
|
52
|
+
|
61
53
|
diffable
|
62
|
-
|
54
|
+
end
|
63
55
|
end
|
64
|
-
|
56
|
+
|
57
|
+
# @!method have_facet_field
|
65
58
|
# Determine if the receiver (a Solr response object) has the same number of total documents as the expected RSpecSolr::SolrResponseHash
|
66
59
|
# NOTE: this is about the TOTAL number of Solr documents matching the queries, not solely the number of docs in THESE responses
|
67
|
-
RSpec::Matchers.define :have_facet_field, &
|
68
|
-
|
69
|
-
end
|
60
|
+
RSpec::Matchers.define :have_facet_field, &facet_field_body?
|
61
|
+
end
|
@@ -3,26 +3,25 @@
|
|
3
3
|
module RSpec
|
4
4
|
module Matchers
|
5
5
|
module BuiltIn
|
6
|
-
class Include
|
7
|
-
|
6
|
+
class Include
|
8
7
|
# chain method for .should include().in_first(n)
|
9
8
|
# sets @max_doc_position for use in perform_match method
|
10
9
|
# @return self - "each method must return self in order to chain methods together"
|
11
|
-
def in_first(num=1)
|
10
|
+
def in_first(num = 1)
|
12
11
|
@max_doc_position = num
|
13
12
|
self
|
14
13
|
end
|
15
|
-
|
14
|
+
|
16
15
|
alias_method :as_first, :in_first
|
17
|
-
|
16
|
+
|
18
17
|
# chain method for .should include().in_each_of_first(n)
|
19
18
|
# sets @min_for_last_matching_doc_ix for use in perform_match method
|
20
19
|
# @return self - "each method must return self in order to chain methods together"
|
21
|
-
def in_each_of_first(num=1)
|
20
|
+
def in_each_of_first(num = 1)
|
22
21
|
@min_for_last_matching_doc_pos = num
|
23
22
|
self
|
24
23
|
end
|
25
|
-
|
24
|
+
|
26
25
|
# chain method for .should include().before()
|
27
26
|
# sets @before_expected for use in perform_match method
|
28
27
|
# @return self - "each method must return self in order to chain methods together"
|
@@ -30,46 +29,51 @@ module RSpec
|
|
30
29
|
# get first doc position by calling has_document ???
|
31
30
|
@before_expected = expected
|
32
31
|
self
|
33
|
-
end
|
32
|
+
end
|
34
33
|
|
35
34
|
# override failure message for improved readability
|
36
|
-
def
|
35
|
+
def failure_message
|
37
36
|
assert_ivars :@actual, :@expected
|
38
|
-
|
37
|
+
name_to_sentence = 'include'
|
38
|
+
# FIXME: DRY up these messages across cases and across should and should_not
|
39
39
|
if @before_expected
|
40
|
-
"expected response to #{name_to_sentence} #{doc_label_str(@expected)}#{
|
40
|
+
"expected response to #{name_to_sentence} #{doc_label_str(@expected)}#{to_sentence(@expected)} before #{doc_label_str(@before_expected)} matching #{@before_expected.inspect}: #{@actual.inspect} "
|
41
41
|
elsif @min_for_last_matching_doc_pos
|
42
|
-
"expected each of the first #{@min_for_last_matching_doc_pos
|
42
|
+
"expected each of the first #{@min_for_last_matching_doc_pos} documents to #{name_to_sentence}#{to_sentence(@expected)} in response: #{@actual.inspect}"
|
43
43
|
elsif @max_doc_position
|
44
|
-
"expected response to #{name_to_sentence} #{doc_label_str(@expected)}#{
|
44
|
+
"expected response to #{name_to_sentence} #{doc_label_str(@expected)}#{to_sentence(@expected)} in first #{@max_doc_position} results: #{@actual.inspect}"
|
45
45
|
else
|
46
46
|
super
|
47
47
|
end
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
# override failure message for improved readability
|
51
|
-
def
|
51
|
+
def failure_message_when_negated
|
52
52
|
assert_ivars :@actual, :@expected
|
53
|
+
name_to_sentence = 'include'
|
53
54
|
if @before_expected
|
54
|
-
"expected response not to #{name_to_sentence} #{doc_label_str(@expected)}#{
|
55
|
+
"expected response not to #{name_to_sentence} #{doc_label_str(@expected)}#{to_sentence(@expected)} before #{doc_label_str(@before_expected)} matching #{@before_expected.inspect}: #{@actual.inspect} "
|
55
56
|
elsif @min_for_last_matching_doc_pos
|
56
|
-
"expected some of the first #{@min_for_last_matching_doc_pos
|
57
|
+
"expected some of the first #{@min_for_last_matching_doc_pos} documents not to #{name_to_sentence}#{to_sentence(@expected)} in response: #{@actual.inspect}"
|
57
58
|
elsif @max_doc_position
|
58
|
-
"expected response not to #{name_to_sentence} #{doc_label_str(@expected)}#{
|
59
|
+
"expected response not to #{name_to_sentence} #{doc_label_str(@expected)}#{to_sentence(@expected)} in first #{@max_doc_position} results: #{@actual.inspect}"
|
59
60
|
else
|
60
61
|
super
|
61
62
|
end
|
62
63
|
end
|
63
|
-
|
64
64
|
|
65
|
-
private
|
65
|
+
private
|
66
|
+
|
66
67
|
# overriding method so we can use RSpec include matcher for document in Solr response
|
67
68
|
# my_solr_resp_hash.should include({"id" => "666"})
|
68
|
-
|
69
|
-
|
70
|
-
|
69
|
+
|
70
|
+
def excluded_from_actual
|
71
|
+
return [] unless @actual.respond_to?(:include?)
|
72
|
+
|
73
|
+
expected.each_with_object([]) do |expected_item, memo|
|
74
|
+
if comparing_doc_to_solr_resp_hash?(expected_item)
|
71
75
|
if @before_expected
|
72
|
-
before_ix =
|
76
|
+
before_ix = actual.get_first_doc_index(@before_expected)
|
73
77
|
if before_ix
|
74
78
|
@max_doc_position = before_ix + 1
|
75
79
|
else
|
@@ -77,28 +81,30 @@ private
|
|
77
81
|
@max_doc_position = -1
|
78
82
|
end
|
79
83
|
end
|
80
|
-
if @min_for_last_matching_doc_pos
|
81
|
-
|
84
|
+
if @min_for_last_matching_doc_pos
|
85
|
+
memo << expected_item unless yield actual.has_document?(expected_item, @min_for_last_matching_doc_pos, true)
|
82
86
|
else
|
83
|
-
|
87
|
+
memo << expected_item unless yield actual.has_document?(expected_item, @max_doc_position)
|
84
88
|
end
|
85
|
-
elsif
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
+
elsif comparing_hash_to_a_subset?(expected_item)
|
90
|
+
expected_item.each do |(key, value)|
|
91
|
+
memo << { key => value } unless yield actual_hash_includes?(key, value)
|
92
|
+
end
|
93
|
+
elsif comparing_hash_keys?(expected_item)
|
94
|
+
memo << expected_item unless yield actual_hash_has_key?(expected_item)
|
89
95
|
else
|
90
|
-
|
96
|
+
memo << expected_item unless yield actual_collection_includes?(expected_item)
|
91
97
|
end
|
92
98
|
end
|
93
99
|
end
|
94
|
-
|
95
|
-
# is actual param a SolrResponseHash?
|
96
|
-
def comparing_doc_to_solr_resp_hash?(
|
97
|
-
actual.is_a?(RSpecSolr::SolrResponseHash)
|
100
|
+
|
101
|
+
# is actual param a SolrResponseHash?
|
102
|
+
def comparing_doc_to_solr_resp_hash?(expected_item)
|
103
|
+
actual.is_a?(RSpecSolr::SolrResponseHash) && !expected_item.is_a?(RSpecSolr::SolrResponseHash)
|
98
104
|
end
|
99
|
-
|
105
|
+
|
100
106
|
def method_missing(method, *args, &block)
|
101
|
-
if
|
107
|
+
if method =~ /documents?/ || method =~ /results?/
|
102
108
|
@collection_name = method
|
103
109
|
@args = args
|
104
110
|
@block = block
|
@@ -107,19 +113,32 @@ private
|
|
107
113
|
super.method_missing
|
108
114
|
end
|
109
115
|
end
|
110
|
-
|
116
|
+
|
111
117
|
# @return [String] 'documents' or 'document' as indicated by expectation
|
112
118
|
def doc_label_str(expectations)
|
113
|
-
# FIXME: must be a better way to do pluralize and inflection fun
|
114
|
-
if expectations.is_a?(Array) &&
|
115
|
-
|
116
|
-
|
119
|
+
# FIXME: must be a better way to do pluralize and inflection fun
|
120
|
+
if expectations.is_a?(Array) &&
|
121
|
+
(expectations.size > 1 || (expectations.first.is_a?(Array) && expectations.first.size > 1))
|
122
|
+
'documents'
|
123
|
+
else
|
124
|
+
'document'
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def to_sentence(words = [])
|
129
|
+
words = words.map(&:inspect)
|
130
|
+
case words.length
|
131
|
+
when 0
|
132
|
+
''
|
133
|
+
when 1
|
134
|
+
" #{words[0]}"
|
135
|
+
when 2
|
136
|
+
" #{words[0]} and #{words[1]}"
|
117
137
|
else
|
118
|
-
|
138
|
+
" #{words[0...-1].join(', ')}, and #{words[-1]}"
|
119
139
|
end
|
120
140
|
end
|
121
|
-
|
122
141
|
end # class Include
|
123
142
|
end # module BuiltIn
|
124
143
|
end
|
125
|
-
end
|
144
|
+
end
|
@@ -1,37 +1,35 @@
|
|
1
1
|
require 'delegate'
|
2
2
|
|
3
3
|
class RSpecSolr
|
4
|
-
|
5
4
|
# Subclass Hash so we can use RSpec matchers for number of documents:
|
6
5
|
# my_solr_resp_hash.should have(3).documents
|
7
6
|
# my_solr_resp_hash.should have_at_least(3).documents
|
8
7
|
# NOTE: to use has_document?(String) to match documents, set the id_field attribute (defaults to 'id')
|
9
8
|
class SolrResponseHash < DelegateClass(Hash)
|
10
|
-
|
11
9
|
# unique id field for Solr documents; defaults to 'id', can be changed with .id_field='foo'
|
12
10
|
attr_accessor :id_field
|
13
|
-
|
14
|
-
# id_field attribute defaults to 'id'
|
11
|
+
|
12
|
+
# id_field attribute defaults to 'id'
|
15
13
|
def id_field
|
16
14
|
@id_field ||= 'id'
|
17
15
|
end
|
18
|
-
|
16
|
+
|
19
17
|
# NOTE: this is about the TOTAL number of Solr documents matching query, not the number of docs in THIS response
|
20
18
|
# override Hash size method so we can use RSpec matchers for number of documents:
|
21
19
|
# my_solr_resp_hash.should have(3).documents
|
22
20
|
# my_solr_resp_hash.should have_at_least(3).documents
|
23
21
|
def size
|
24
|
-
self[
|
22
|
+
self['response'] ? self['response']['numFound'] : 0 # total number of Solr docs matching query
|
25
23
|
# NOT: self["response"]["docs"].size # number of Solr docs returned in THIS response
|
26
24
|
end
|
27
|
-
|
25
|
+
|
28
26
|
# @return true if THIS Solr Response contains document(s) as indicated by expected_doc
|
29
27
|
# @param expected_doc what should be matched in a document in THIS response
|
30
28
|
# @example expected_doc Hash implies ALL key/value pairs will be matched in a SINGLE Solr document
|
31
29
|
# {"id" => "666"}
|
32
30
|
# {"subject" => ["warm fuzzies", "fluffy"]}
|
33
31
|
# {"title" => "warm fuzzies", "subject" => ["puppies"]}
|
34
|
-
# @example expected_doc String
|
32
|
+
# @example expected_doc String
|
35
33
|
# "666" implies {'id' => '666'} when id_field is 'id'
|
36
34
|
# @example expected_doc Array
|
37
35
|
# ["1", "2", "3"] implies we expect Solr docs with ids 1, 2, 3 included in this response
|
@@ -45,41 +43,41 @@ class RSpecSolr
|
|
45
43
|
(first_non_match ? first_non_match >= max_doc_position : true)
|
46
44
|
else
|
47
45
|
# we are happy if any doc meets all of our expectations
|
48
|
-
docs.any?
|
46
|
+
docs.any? do |doc|
|
49
47
|
doc_matches_all_criteria(doc, expected_doc) &&
|
50
48
|
# satisfy doc's position in the results
|
51
49
|
(max_doc_position ? docs.find_index(doc) < max_doc_position : true)
|
52
|
-
|
50
|
+
end
|
53
51
|
end
|
54
52
|
elsif expected_doc.is_a?(String)
|
55
53
|
if all_must_match
|
56
|
-
|
54
|
+
fail ArgumentError, 'in_each_of_first(n) requires a Hash argument to include() method'
|
57
55
|
end
|
58
|
-
has_document?({
|
56
|
+
has_document?({ id_field => expected_doc }, max_doc_position)
|
59
57
|
elsif expected_doc.is_a?(Array)
|
60
58
|
if all_must_match
|
61
|
-
|
59
|
+
fail ArgumentError, 'in_each_of_first(n) requires a Hash argument to include() method'
|
62
60
|
end
|
63
61
|
expected_doc.all? { |exp| has_document?(exp, max_doc_position) }
|
64
|
-
end
|
62
|
+
end
|
65
63
|
end
|
66
64
|
|
67
65
|
# return true if the document contains all the key value pairs in the expectations_hash
|
68
66
|
def doc_matches_all_criteria(doc, expectations_hash)
|
69
|
-
expectations_hash.all?
|
70
|
-
doc.include?(exp_fname) &&
|
67
|
+
expectations_hash.all? do |exp_fname, exp_vals|
|
68
|
+
doc.include?(exp_fname) &&
|
71
69
|
# exp_vals can be a String or an Array
|
72
70
|
# if it's an Array, then all expected values must be present
|
73
|
-
Array(exp_vals).all?
|
71
|
+
Array(exp_vals).all? do |exp_val|
|
74
72
|
# a doc's fld values can be a String or an Array
|
75
73
|
case exp_val
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
74
|
+
when Regexp
|
75
|
+
Array(doc[exp_fname]).any? { |val| val =~ exp_val }
|
76
|
+
else
|
77
|
+
Array(doc[exp_fname]).include?(exp_val)
|
80
78
|
end
|
81
|
-
|
82
|
-
|
79
|
+
end
|
80
|
+
end
|
83
81
|
end
|
84
82
|
|
85
83
|
# @return the index of the first document that meets the expectations in THIS response
|
@@ -88,60 +86,60 @@ class RSpecSolr
|
|
88
86
|
# {"id" => "666"}
|
89
87
|
# {"subject" => ["warm fuzzies", "fluffy"]}
|
90
88
|
# {"title" => "warm fuzzies", "subject" => ["puppies"]}
|
91
|
-
# @example expected_doc String
|
89
|
+
# @example expected_doc String
|
92
90
|
# "666" implies {'id' => '666'} when id_field is 'id'
|
93
91
|
# @example expected_doc Array
|
94
92
|
# ["1", "2", "3"] implies we expect Solr docs with ids 1, 2, 3 included in this response
|
95
93
|
# [{"title" => "warm fuzzies"}, {"title" => "cool fuzzies"}] implies we expect at least one Solr doc in this response matching each Hash in the Array
|
96
94
|
def get_first_doc_index(expected_doc)
|
97
|
-
# FIXME: DRY it up! -- very similar to has_document
|
95
|
+
# FIXME: DRY it up! -- very similar to has_document
|
98
96
|
if expected_doc.is_a?(Hash)
|
99
97
|
# we are happy if any doc meets all of our expectations
|
100
|
-
docs.any?
|
101
|
-
expected_doc.all?
|
102
|
-
if
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
98
|
+
docs.any? do |doc|
|
99
|
+
expected_doc.all? do |exp_fname, exp_vals|
|
100
|
+
if doc.include?(exp_fname) &&
|
101
|
+
# exp_vals can be a String or an Array
|
102
|
+
# if it's an Array, then all expected values must be present
|
103
|
+
Array(exp_vals).all? do |exp_val|
|
104
|
+
# a doc's fld values can be a String or an Array
|
105
|
+
Array(doc[exp_fname]).include?(exp_val)
|
106
|
+
end
|
109
107
|
first_doc_index = get_min_index(first_doc_index, docs.find_index(doc))
|
110
108
|
return first_doc_index
|
111
109
|
end
|
112
|
-
|
113
|
-
|
110
|
+
end
|
111
|
+
end
|
114
112
|
elsif expected_doc.is_a?(String)
|
115
|
-
first_doc_index = get_min_index(first_doc_index, get_first_doc_index(
|
113
|
+
first_doc_index = get_min_index(first_doc_index, get_first_doc_index(id_field => expected_doc))
|
116
114
|
elsif expected_doc.is_a?(Array)
|
117
|
-
expected_doc.all?
|
115
|
+
expected_doc.all? do |exp|
|
118
116
|
ix = get_first_doc_index(exp)
|
119
117
|
if ix
|
120
118
|
first_doc_index = get_min_index(first_doc_index, ix)
|
121
119
|
else
|
122
120
|
return nil
|
123
121
|
end
|
124
|
-
|
125
|
-
end
|
122
|
+
end
|
123
|
+
end
|
126
124
|
|
127
|
-
|
125
|
+
first_doc_index
|
128
126
|
end
|
129
127
|
|
130
128
|
# @return String containing response header and numFound parts of hash for readable output for number of docs messages
|
131
129
|
def num_docs_partial_output_str
|
132
|
-
"{'responseHeader' => #{self['responseHeader'].inspect}, " +
|
133
|
-
(self['response'] ? "'response' => {'numFound' => #{self['response']['numFound']}, ...}" :
|
134
|
-
|
130
|
+
"{'responseHeader' => #{self['responseHeader'].inspect}, " +
|
131
|
+
(self['response'] ? "'response' => {'numFound' => #{self['response']['numFound']}, ...}" : '') +
|
132
|
+
' ... }'
|
135
133
|
end
|
136
|
-
|
134
|
+
|
137
135
|
# @return true if the Solr response contains the facet field indicated and the facet field has some values; return false otherwise
|
138
136
|
def has_facet_field_with_value?(ff_name, facet_val = nil)
|
139
|
-
if self[
|
137
|
+
if self['facet_counts'] && self['facet_counts']['facet_fields'] && self['facet_counts']['facet_fields'][ff_name]
|
140
138
|
if facet_val
|
141
|
-
val_count_array = self[
|
142
|
-
return val_count_array.each_slice(2).find { |val_count| val_count[0] == facet_val}
|
139
|
+
val_count_array = self['facet_counts']['facet_fields'][ff_name]
|
140
|
+
return val_count_array.each_slice(2).find { |val_count| val_count[0] == facet_val }
|
143
141
|
else
|
144
|
-
self[
|
142
|
+
self['facet_counts']['facet_fields'][ff_name].size > 0
|
145
143
|
end
|
146
144
|
else
|
147
145
|
false
|
@@ -150,15 +148,15 @@ class RSpecSolr
|
|
150
148
|
|
151
149
|
# @return true if the Solr response contains the facet field indicated and the facet field has some values; return false otherwise
|
152
150
|
def has_facet_field?(ff_name)
|
153
|
-
if self[
|
154
|
-
self[
|
151
|
+
if self['facet_counts'] && self['facet_counts']['facet_fields'] && self['facet_counts']['facet_fields'][ff_name]
|
152
|
+
self['facet_counts']['facet_fields'][ff_name]
|
155
153
|
else
|
156
154
|
false
|
157
155
|
end
|
158
156
|
end
|
159
157
|
|
160
|
-
private
|
161
|
-
|
158
|
+
private
|
159
|
+
|
162
160
|
# return the minimum of the two arguments. If one of the arguments is nil, then return the other argument.
|
163
161
|
# If both arguments are nil, return nil.
|
164
162
|
def get_min_index(a, b)
|
@@ -175,8 +173,7 @@ private
|
|
175
173
|
|
176
174
|
# access the Array of Hashes representing the Solr documents in the response
|
177
175
|
def docs
|
178
|
-
@docs ||= self[
|
176
|
+
@docs ||= self['response']['docs']
|
179
177
|
end
|
180
|
-
|
181
178
|
end
|
182
179
|
end
|