blacklight 6.4.0 → 6.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -1
- data/lib/blacklight/search_state.rb +10 -7
- data/spec/lib/blacklight/search_state_spec.rb +63 -29
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48b6e29df0426d17771b97c8cef4084c11e2398c
|
4
|
+
data.tar.gz: 6b1bd2738314e8b9966c31625455bd4cd6da99f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a930acfc5fb45d28e874e569f2efe499e4cdb46ee5bafa3370be6f9ec2c9840b52ac243a6844777418cd709b2337377543bf89dd74451b509bb5b4d90f1ee0b7
|
7
|
+
data.tar.gz: d2783d8e3661d95f9aa758b0b0ea6d3fbf3b80ac32320d53d8a37640d7b7dab5651f1251edd155eefa188084440d8ae73dc3ce4fb9e6c5866afbc02ee70f6e1d
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
6.4.
|
1
|
+
6.4.1
|
@@ -10,22 +10,25 @@ module Blacklight
|
|
10
10
|
# @param [ActionController::Parameters] params
|
11
11
|
# @param [Blacklight::Config] blacklight_config
|
12
12
|
def initialize(params, blacklight_config)
|
13
|
-
if params.
|
14
|
-
# This is an ActionView::TestCase workaround. Will be resolved by
|
15
|
-
# https://github.com/rails/rails/pull/22913 (Rails > 4.2.5)
|
16
|
-
@params = params.with_indifferent_access
|
17
|
-
else
|
13
|
+
if params.respond_to?(:to_unsafe_h)
|
18
14
|
# This is the typical (not-ActionView::TestCase) code path.
|
19
15
|
@params = params.to_unsafe_h
|
20
16
|
# In Rails 5 to_unsafe_h returns a HashWithIndifferentAccess, in Rails 4 it returns Hash
|
21
17
|
@params = @params.with_indifferent_access if @params.instance_of? Hash
|
18
|
+
elsif params.is_a? Hash
|
19
|
+
# This is an ActionView::TestCase workaround for Rails 4.2.
|
20
|
+
@params = params.dup.with_indifferent_access
|
21
|
+
else
|
22
|
+
@params = params.dup.to_h.with_indifferent_access
|
22
23
|
end
|
24
|
+
|
23
25
|
@blacklight_config = blacklight_config
|
24
26
|
end
|
25
27
|
|
26
|
-
def
|
28
|
+
def to_hash
|
27
29
|
@params
|
28
30
|
end
|
31
|
+
alias to_h to_hash
|
29
32
|
|
30
33
|
def reset
|
31
34
|
Blacklight::SearchState.new(ActionController::Parameters.new, blacklight_config)
|
@@ -112,7 +115,7 @@ module Blacklight
|
|
112
115
|
# @yield [params] The merged parameters hash before being sanitized
|
113
116
|
def params_for_search(params_to_merge={}, &block)
|
114
117
|
# params hash we'll return
|
115
|
-
my_params = params.dup.merge(params_to_merge
|
118
|
+
my_params = params.dup.merge(Blacklight::SearchState.new(params_to_merge, blacklight_config))
|
116
119
|
|
117
120
|
if block_given?
|
118
121
|
yield my_params
|
@@ -9,27 +9,61 @@ describe Blacklight::SearchState do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
let(:parameter_class) { ActionController::Parameters }
|
12
|
-
let(:
|
12
|
+
let(:search_state) { described_class.new(params, blacklight_config) }
|
13
13
|
let(:params) { parameter_class.new }
|
14
14
|
|
15
|
+
describe '#to_h' do
|
16
|
+
let(:data) { { a: '1'} }
|
17
|
+
let(:params) { parameter_class.new data }
|
18
|
+
|
19
|
+
it 'returns a copy of the original parameters' do
|
20
|
+
expect(search_state.to_h).to eq data.with_indifferent_access
|
21
|
+
expect(search_state.to_h.object_id).not_to eq params.object_id
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'with AC::Parameters' do
|
25
|
+
let(:parameter_class) { ActionController::Parameters }
|
26
|
+
|
27
|
+
it 'returns the hash data' do
|
28
|
+
expect(search_state.to_h).to eq data.with_indifferent_access
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with HashWithIndifferentAccess' do
|
33
|
+
let(:parameter_class) { HashWithIndifferentAccess }
|
34
|
+
|
35
|
+
it 'returns the hash data' do
|
36
|
+
expect(search_state.to_h).to eq data.with_indifferent_access
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'with Hash' do
|
41
|
+
let(:params) { data }
|
42
|
+
|
43
|
+
it 'returns the hash data' do
|
44
|
+
expect(search_state.to_h).to eq data.with_indifferent_access
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
15
49
|
describe "params_for_search" do
|
16
50
|
let(:params) { parameter_class.new 'default' => 'params' }
|
17
51
|
|
18
52
|
it "takes original params" do
|
19
|
-
result =
|
53
|
+
result = search_state.params_for_search
|
20
54
|
expect(result).to eq({ 'default' => 'params' })
|
21
55
|
expect(params.object_id).to_not eq result.object_id
|
22
56
|
end
|
23
57
|
|
24
58
|
it "accepts params to merge into the controller's params" do
|
25
|
-
result =
|
59
|
+
result = search_state.params_for_search(q: 'query')
|
26
60
|
expect(result).to eq('q' => 'query', 'default' => 'params')
|
27
61
|
end
|
28
62
|
|
29
63
|
context "when params have blacklisted keys" do
|
30
64
|
let(:params) { parameter_class.new action: 'action', controller: 'controller', id: "id", commit: 'commit' }
|
31
65
|
it "removes them" do
|
32
|
-
result =
|
66
|
+
result = search_state.params_for_search
|
33
67
|
expect(result.keys).to_not include(:action, :controller, :commit, :id)
|
34
68
|
end
|
35
69
|
end
|
@@ -38,7 +72,7 @@ describe Blacklight::SearchState do
|
|
38
72
|
context "and per_page changed" do
|
39
73
|
let(:params) { parameter_class.new per_page: 20, page: 5 }
|
40
74
|
it "adjusts the current page" do
|
41
|
-
result =
|
75
|
+
result = search_state.params_for_search(per_page: 100)
|
42
76
|
expect(result[:page]).to eq 1
|
43
77
|
end
|
44
78
|
end
|
@@ -46,7 +80,7 @@ describe Blacklight::SearchState do
|
|
46
80
|
context "and per_page didn't change" do
|
47
81
|
let(:params) { parameter_class.new per_page: 20, page: 5 }
|
48
82
|
it "doesn't change the current page" do
|
49
|
-
result =
|
83
|
+
result = search_state.params_for_search(per_page: 20)
|
50
84
|
expect(result[:page]).to eq 5
|
51
85
|
end
|
52
86
|
end
|
@@ -54,7 +88,7 @@ describe Blacklight::SearchState do
|
|
54
88
|
context "and the sort changes" do
|
55
89
|
let(:params) { parameter_class.new sort: 'field_a', page: 5 }
|
56
90
|
it "adjusts the current page" do
|
57
|
-
result =
|
91
|
+
result = search_state.params_for_search(sort: 'field_b')
|
58
92
|
expect(result[:page]).to eq 1
|
59
93
|
end
|
60
94
|
end
|
@@ -62,7 +96,7 @@ describe Blacklight::SearchState do
|
|
62
96
|
context "and the sort didn't change" do
|
63
97
|
let(:params) { parameter_class.new sort: 'field_a', page: 5 }
|
64
98
|
it "doesn't change the current page" do
|
65
|
-
result =
|
99
|
+
result = search_state.params_for_search(sort: 'field_a')
|
66
100
|
expect(result[:page]).to eq 5
|
67
101
|
end
|
68
102
|
end
|
@@ -71,7 +105,7 @@ describe Blacklight::SearchState do
|
|
71
105
|
context "with a block" do
|
72
106
|
let(:params) { parameter_class.new a: 1, b: 2 }
|
73
107
|
it "evalutes the block and allow it to add or remove keys" do
|
74
|
-
result =
|
108
|
+
result = search_state.params_for_search(c: 3) do |params|
|
75
109
|
params.extract! :a, :b
|
76
110
|
params[:d] = 'd'
|
77
111
|
end
|
@@ -100,14 +134,14 @@ describe Blacklight::SearchState do
|
|
100
134
|
context "when there are no pre-existing facets" do
|
101
135
|
let(:params) { params_no_existing_facet }
|
102
136
|
it "adds facet value" do
|
103
|
-
result_params =
|
137
|
+
result_params = search_state.add_facet_params("facet_field", "facet_value")
|
104
138
|
expect(result_params[:f]).to be_a Hash
|
105
139
|
expect(result_params[:f]["facet_field"]).to be_a_kind_of(Array)
|
106
140
|
expect(result_params[:f]["facet_field"]).to eq ["facet_value"]
|
107
141
|
end
|
108
142
|
|
109
143
|
it "leaves non-facet params alone" do
|
110
|
-
result_params =
|
144
|
+
result_params = search_state.add_facet_params("facet_field_2", "new_facet_value")
|
111
145
|
|
112
146
|
params.each_pair do |key, value|
|
113
147
|
next if key == :f
|
@@ -116,9 +150,9 @@ describe Blacklight::SearchState do
|
|
116
150
|
end
|
117
151
|
|
118
152
|
it "uses the facet's key in the url" do
|
119
|
-
allow(
|
153
|
+
allow(search_state).to receive(:facet_configuration_for_field).with('some_field').and_return(double(single: true, field: "a_solr_field", key: "some_key"))
|
120
154
|
|
121
|
-
result_params =
|
155
|
+
result_params = search_state.add_facet_params('some_field', 'my_value')
|
122
156
|
|
123
157
|
expect(result_params[:f]['some_key']).to have(1).item
|
124
158
|
expect(result_params[:f]['some_key'].first).to eq 'my_value'
|
@@ -128,7 +162,7 @@ describe Blacklight::SearchState do
|
|
128
162
|
context "when there are pre-existing facets" do
|
129
163
|
let(:params) { params_existing_facets }
|
130
164
|
it "adds a facet param to existing facet constraints" do
|
131
|
-
result_params =
|
165
|
+
result_params = search_state.add_facet_params("facet_field_2", "new_facet_value")
|
132
166
|
|
133
167
|
expect(result_params[:f]).to be_a Hash
|
134
168
|
|
@@ -143,7 +177,7 @@ describe Blacklight::SearchState do
|
|
143
177
|
end
|
144
178
|
|
145
179
|
it "leaves non-facet params alone" do
|
146
|
-
result_params =
|
180
|
+
result_params = search_state.add_facet_params("facet_field_2", "new_facet_value")
|
147
181
|
|
148
182
|
params.each_pair do |key, value|
|
149
183
|
next if key == 'f'
|
@@ -155,8 +189,8 @@ describe Blacklight::SearchState do
|
|
155
189
|
context "with a facet selected in the params" do
|
156
190
|
let(:params) { parameter_class.new f: { 'single_value_facet_field' => 'other_value' } }
|
157
191
|
it "replaces facets configured as single" do
|
158
|
-
allow(
|
159
|
-
result_params =
|
192
|
+
allow(search_state).to receive(:facet_configuration_for_field).with('single_value_facet_field').and_return(double(single: true, key: "single_value_facet_field"))
|
193
|
+
result_params = search_state.add_facet_params('single_value_facet_field', 'my_value')
|
160
194
|
|
161
195
|
expect(result_params[:f]['single_value_facet_field']).to have(1).item
|
162
196
|
expect(result_params[:f]['single_value_facet_field'].first).to eq 'my_value'
|
@@ -164,20 +198,20 @@ describe Blacklight::SearchState do
|
|
164
198
|
end
|
165
199
|
|
166
200
|
it "accepts a FacetItem instead of a plain facet value" do
|
167
|
-
result_params =
|
201
|
+
result_params = search_state.add_facet_params('facet_field_1', double(value: 123))
|
168
202
|
|
169
203
|
expect(result_params[:f]['facet_field_1']).to include(123)
|
170
204
|
end
|
171
205
|
|
172
206
|
it "defers to the field set on a FacetItem" do
|
173
|
-
result_params =
|
207
|
+
result_params = search_state.add_facet_params('facet_field_1', double(:field => 'facet_field_2', :value => 123))
|
174
208
|
|
175
209
|
expect(result_params[:f]['facet_field_1']).to be_blank
|
176
210
|
expect(result_params[:f]['facet_field_2']).to include(123)
|
177
211
|
end
|
178
212
|
|
179
213
|
it "adds any extra fq parameters from the FacetItem" do
|
180
|
-
result_params =
|
214
|
+
result_params = search_state.add_facet_params('facet_field_1', double(:value => 123, fq: { 'facet_field_2' => 'abc' }))
|
181
215
|
|
182
216
|
expect(result_params[:f]['facet_field_1']).to include(123)
|
183
217
|
expect(result_params[:f]['facet_field_2']).to include('abc')
|
@@ -197,7 +231,7 @@ describe Blacklight::SearchState do
|
|
197
231
|
}
|
198
232
|
|
199
233
|
it "does not include request parameters used by the facet paginator" do
|
200
|
-
params =
|
234
|
+
params = search_state.add_facet_params_and_redirect("facet_field_2", "facet_value")
|
201
235
|
|
202
236
|
bad_keys = Blacklight::Solr::FacetPaginator.request_keys.values + [:id]
|
203
237
|
bad_keys.each do |paginator_key|
|
@@ -206,13 +240,13 @@ describe Blacklight::SearchState do
|
|
206
240
|
end
|
207
241
|
|
208
242
|
it 'removes :page request key' do
|
209
|
-
params =
|
243
|
+
params = search_state.add_facet_params_and_redirect("facet_field_2", "facet_value")
|
210
244
|
expect(params).to_not have_key(:page)
|
211
245
|
end
|
212
246
|
|
213
247
|
it "otherwise does the same thing as add_facet_params" do
|
214
|
-
added_facet_params =
|
215
|
-
added_facet_params_from_facet_action =
|
248
|
+
added_facet_params = search_state.add_facet_params("facet_field_2", "facet_value")
|
249
|
+
added_facet_params_from_facet_action = search_state.add_facet_params_and_redirect("facet_field_2", "facet_value")
|
216
250
|
|
217
251
|
expect(added_facet_params_from_facet_action).to eq added_facet_params.except(Blacklight::Solr::FacetPaginator.request_keys[:page], Blacklight::Solr::FacetPaginator.request_keys[:sort])
|
218
252
|
end
|
@@ -225,7 +259,7 @@ describe Blacklight::SearchState do
|
|
225
259
|
let(:facet_params) { { 'some_field' => ['some_value', 'another_value'] } }
|
226
260
|
|
227
261
|
it "removes the facet / value tuple from the query parameters" do
|
228
|
-
params =
|
262
|
+
params = search_state.remove_facet_params('some_field', 'some_value')
|
229
263
|
expect(params[:f]['some_field']).not_to include 'some_value'
|
230
264
|
expect(params[:f]['some_field']).to include 'another_value'
|
231
265
|
end
|
@@ -233,13 +267,13 @@ describe Blacklight::SearchState do
|
|
233
267
|
|
234
268
|
context "when the facet has configuration" do
|
235
269
|
before do
|
236
|
-
allow(
|
270
|
+
allow(search_state).to receive(:facet_configuration_for_field).with('some_field').and_return(
|
237
271
|
double(single: true, field: "a_solr_field", key: "some_key"))
|
238
272
|
end
|
239
273
|
let(:facet_params) { { 'some_key' => ['some_value', 'another_value'] } }
|
240
274
|
|
241
275
|
it "uses the facet's key configuration" do
|
242
|
-
params =
|
276
|
+
params = search_state.remove_facet_params('some_field', 'some_value')
|
243
277
|
expect(params[:f]['some_key']).not_to eq 'some_value'
|
244
278
|
expect(params[:f]['some_key']).to include 'another_value'
|
245
279
|
end
|
@@ -249,7 +283,7 @@ describe Blacklight::SearchState do
|
|
249
283
|
facet_params['another_field'] = ['some_value']
|
250
284
|
facet_params['some_field'] = ['some_value']
|
251
285
|
|
252
|
-
params =
|
286
|
+
params = search_state.remove_facet_params('some_field', 'some_value')
|
253
287
|
|
254
288
|
expect(params[:f]).not_to have_key 'some_field'
|
255
289
|
end
|
@@ -257,7 +291,7 @@ describe Blacklight::SearchState do
|
|
257
291
|
it "removes the 'f' parameter entirely when no facets remain" do
|
258
292
|
facet_params['some_field'] = ['some_value']
|
259
293
|
|
260
|
-
params =
|
294
|
+
params = search_state.remove_facet_params('some_field', 'some_value')
|
261
295
|
|
262
296
|
expect(params).not_to have_key :f
|
263
297
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blacklight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.4.
|
4
|
+
version: 6.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Rochkind
|
@@ -17,7 +17,7 @@ authors:
|
|
17
17
|
autorequire:
|
18
18
|
bindir: exe
|
19
19
|
cert_chain: []
|
20
|
-
date: 2016-
|
20
|
+
date: 2016-08-09 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rails
|
@@ -688,7 +688,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
688
688
|
version: '0'
|
689
689
|
requirements: []
|
690
690
|
rubyforge_project:
|
691
|
-
rubygems_version: 2.
|
691
|
+
rubygems_version: 2.5.1
|
692
692
|
signing_key:
|
693
693
|
specification_version: 4
|
694
694
|
summary: Blacklight provides a discovery interface for any Solr (http://lucene.apache.org/solr)
|