blacklight 7.16.0 → 7.18.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -0
  3. data/VERSION +1 -1
  4. data/app/components/blacklight/advanced_search_form_component.html.erb +9 -3
  5. data/app/components/blacklight/advanced_search_form_component.rb +48 -35
  6. data/app/components/blacklight/constraints_component.html.erb +19 -3
  7. data/app/components/blacklight/constraints_component.rb +5 -1
  8. data/app/components/blacklight/content_areas_shim.rb +12 -0
  9. data/app/components/blacklight/document/action_component.rb +4 -0
  10. data/app/components/blacklight/document/actions_component.html.erb +3 -5
  11. data/app/components/blacklight/document/actions_component.rb +14 -1
  12. data/app/components/blacklight/document/thumbnail_component.html.erb +3 -3
  13. data/app/components/blacklight/document/thumbnail_component.rb +11 -3
  14. data/app/components/blacklight/document_component.html.erb +4 -7
  15. data/app/components/blacklight/document_component.rb +73 -73
  16. data/app/components/blacklight/document_metadata_component.html.erb +2 -2
  17. data/app/components/blacklight/document_metadata_component.rb +13 -2
  18. data/app/components/blacklight/document_title_component.html.erb +17 -0
  19. data/app/components/blacklight/document_title_component.rb +59 -0
  20. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +2 -2
  21. data/app/components/blacklight/facet_field_component.rb +4 -1
  22. data/app/components/blacklight/facet_field_list_component.html.erb +2 -2
  23. data/app/components/blacklight/facet_field_no_layout_component.rb +4 -1
  24. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  25. data/app/components/blacklight/metadata_field_layout_component.html.erb +3 -1
  26. data/app/components/blacklight/metadata_field_layout_component.rb +26 -1
  27. data/app/components/blacklight/response/view_type_button_component.html.erb +4 -0
  28. data/app/components/blacklight/response/view_type_button_component.rb +38 -0
  29. data/app/components/blacklight/response/view_type_component.html.erb +2 -5
  30. data/app/components/blacklight/response/view_type_component.rb +9 -13
  31. data/app/components/blacklight/search_bar_component.rb +4 -1
  32. data/app/components/blacklight/system/dropdown_component.html.erb +4 -7
  33. data/app/components/blacklight/system/dropdown_component.rb +24 -0
  34. data/app/components/blacklight/system/flash_message_component.html.erb +1 -1
  35. data/app/components/blacklight/system/flash_message_component.rb +7 -1
  36. data/app/components/blacklight/system/modal_component.rb +7 -1
  37. data/app/helpers/blacklight/catalog_helper_behavior.rb +2 -0
  38. data/app/views/catalog/_citation.html.erb +1 -1
  39. data/app/views/catalog/_document.html.erb +2 -2
  40. data/app/views/catalog/_facet_layout.html.erb +2 -2
  41. data/app/views/catalog/_show_main_content.html.erb +3 -3
  42. data/app/views/catalog/email.html.erb +2 -2
  43. data/app/views/catalog/email_success.html.erb +1 -1
  44. data/app/views/catalog/facet.html.erb +3 -3
  45. data/app/views/catalog/sms.html.erb +2 -2
  46. data/app/views/catalog/sms_success.html.erb +1 -1
  47. data/blacklight.gemspec +1 -1
  48. data/config/locales/blacklight.de.yml +2 -2
  49. data/lib/blacklight/configuration/view_config.rb +2 -0
  50. data/lib/blacklight/engine.rb +3 -1
  51. data/lib/blacklight/nested_open_struct_with_hash_access.rb +23 -7
  52. data/lib/blacklight/search_builder.rb +1 -0
  53. data/lib/blacklight/solr/facet_paginator.rb +2 -0
  54. data/lib/blacklight/solr/request.rb +31 -0
  55. data/lib/blacklight/solr/response.rb +2 -16
  56. data/lib/blacklight/solr/response/facets.rb +76 -22
  57. data/lib/blacklight/solr/response/params.rb +104 -0
  58. data/lib/blacklight/solr/search_builder_behavior.rb +56 -30
  59. data/lib/generators/blacklight/assets_generator.rb +6 -2
  60. data/lib/generators/blacklight/install_generator.rb +5 -5
  61. data/lib/generators/blacklight/solr_generator.rb +4 -2
  62. data/lib/generators/blacklight/user_generator.rb +5 -3
  63. data/spec/components/blacklight/document_component_spec.rb +3 -3
  64. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +6 -7
  65. data/spec/helpers/blacklight_helper_spec.rb +2 -2
  66. data/spec/helpers/catalog_helper_spec.rb +1 -1
  67. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +14 -0
  68. data/spec/models/blacklight/solr/facet_paginator_spec.rb +4 -0
  69. data/spec/models/blacklight/solr/request_spec.rb +62 -29
  70. data/spec/models/blacklight/solr/response/facets_spec.rb +109 -0
  71. data/spec/models/blacklight/solr/response_spec.rb +10 -0
  72. data/spec/models/blacklight/solr/search_builder_spec.rb +26 -0
  73. data/spec/services/blacklight/search_service_spec.rb +1 -1
  74. data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -1
  75. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +8 -9
  76. metadata +14 -8
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+ module Blacklight::Solr::Response::Params
3
+ # From https://solr.apache.org/guide/8_8/json-request-api.html#supported-properties-and-syntax
4
+ QUERY_PARAMETER_TO_JSON_PARAMETER_MAPPING = {
5
+ q: :query,
6
+ fq: :filter,
7
+ start: :offset,
8
+ rows: :limit,
9
+ fl: :fields,
10
+ sort: :sort
11
+ }.freeze
12
+
13
+ def params
14
+ header['params'] || request_params
15
+ end
16
+
17
+ def start
18
+ search_builder&.start || single_valued_param(:start).to_i
19
+ end
20
+
21
+ def rows
22
+ search_builder&.rows || single_valued_param(:rows).to_i
23
+ end
24
+
25
+ def sort
26
+ search_builder&.sort || single_valued_param(:sort)
27
+ end
28
+
29
+ def facet_field_aggregation_options(facet_field_name)
30
+ defaults = {
31
+ sort: single_valued_param(:'facet.sort'),
32
+ limit: single_valued_param(:"facet.limit")&.to_i || 100,
33
+ offset: single_valued_param(:"facet.offset")&.to_i || 0,
34
+ prefix: single_valued_param(:"facet.prefix")
35
+ }
36
+
37
+ json_facet = json_params.dig('facet', facet_field_name)&.slice(:limit, :offset, :prefix, :sort)&.symbolize_keys || {}
38
+
39
+ param_facet = {
40
+ sort: single_valued_param(:"f.#{facet_field_name}.facet.sort"),
41
+ limit: single_valued_param(:"f.#{facet_field_name}.facet.limit")&.to_i,
42
+ offset: single_valued_param(:"f.#{facet_field_name}.facet.offset")&.to_i,
43
+ prefix: single_valued_param(:"f.#{facet_field_name}.facet.prefix")
44
+ }.reject { |_k, v| v.nil? }
45
+
46
+ options = defaults.merge(json_facet).merge(param_facet)
47
+ options[:sort] ||= options[:limit].positive? ? 'count' : 'index'
48
+
49
+ options
50
+ end
51
+
52
+ private
53
+
54
+ def search_builder
55
+ request_params if request_params.is_a?(Blacklight::SearchBuilder)
56
+ end
57
+
58
+ # Extract JSON Request API parameters from the response header or the request itself
59
+ def json_params
60
+ encoded_json_params = header&.dig('params', 'json')
61
+
62
+ return request_params['json'] || {} if encoded_json_params.blank?
63
+
64
+ @json_params ||= JSON.parse(encoded_json_params).with_indifferent_access
65
+ end
66
+
67
+ # Handle merging solr parameters from the myriad of ways they may be expressed by applying the single-value
68
+ # precedence logic:
69
+ #
70
+ # From https://solr.apache.org/guide/8_8/json-request-api.html#json-parameter-merging :
71
+ # When multiple parameter values conflict with one another a single value is chosen based on the following precedence rules:
72
+ # - Traditional query parameters (q, rows, etc.) take first precedence and are used over any other specified values.
73
+ # - json-prefixed query parameters are considered next.
74
+ # - Values specified in the JSON request body have the lowest precedence and are only used if specified nowhere else.
75
+ #
76
+ # @param [String] key the solr parameter to use
77
+ def single_valued_param(key)
78
+ json_key = QUERY_PARAMETER_TO_JSON_PARAMETER_MAPPING[key]
79
+
80
+ params[key] ||
81
+ params["json.#{key}"] ||
82
+ json_params[json_key || key] ||
83
+ json_params.dig(:params, key) ||
84
+ json_params.dig(:params, "json.#{key}")
85
+ end
86
+
87
+ # Merge together multi-valued solr parameters from the myriad of ways they may be expressed.
88
+ # Unlike single-valued parameters, this merges all the values across the params.
89
+ #
90
+ # @param [String] key the solr parameter to use
91
+ def multivalued_param(key)
92
+ json_key = QUERY_PARAMETER_TO_JSON_PARAMETER_MAPPING[key]
93
+
94
+ [
95
+ params[key],
96
+ params["json.#{key}"],
97
+ json_params[json_key || key],
98
+ json_params.dig(:params, key),
99
+ json_params.dig(:params, "json.#{key}")
100
+ ].select(&:present?).inject([]) do |memo, arr|
101
+ memo.concat(Array.wrap(arr))
102
+ end
103
+ end
104
+ end
@@ -32,6 +32,7 @@ module Blacklight::Solr
32
32
  # Take the user-entered query, and put it in the solr params,
33
33
  # including config's "search field" params for current search field.
34
34
  # also include setting spellcheck.q.
35
+ # rubocop:disable Metrics/CyclomaticComplexity
35
36
  def add_query_to_solr(solr_parameters)
36
37
  ###
37
38
  # legacy behavior of user param :qt is passed through, but over-ridden
@@ -64,25 +65,31 @@ module Blacklight::Solr
64
65
  elsif search_field&.solr_local_parameters.present?
65
66
  add_search_field_with_local_parameters(solr_parameters)
66
67
  elsif search_state.query_param.is_a? Hash
67
- add_additional_filters(solr_parameters, search_state.query_param)
68
+ if search_state.query_param == @additional_filters && !processor_chain.include?(:add_additional_filters)
69
+ Deprecation.warn('Expecting to see the processor step add_additional_filters; falling back to legacy query handling')
70
+ add_additional_filters(solr_parameters, search_state.query_param)
71
+ end
68
72
  elsif search_state.query_param
69
- solr_parameters[:q] = search_state.query_param
73
+ solr_parameters.append_query search_state.query_param
70
74
  end
71
75
  end
76
+ # rubocop:enable Metrics/CyclomaticComplexity
72
77
 
73
78
  def add_additional_filters(solr_parameters, additional_filters = nil)
74
79
  q = additional_filters || @additional_filters
75
80
 
76
81
  return if q.blank?
77
82
 
78
- solr_parameters[:q] = if q.values.any?(&:blank?)
79
- # if any field parameters are empty, exclude _all_ results
80
- "{!lucene}NOT *:*"
81
- else
82
- "{!lucene}" + q.map do |field, values|
83
- "#{field}:(#{Array(values).map { |x| solr_param_quote(x) }.join(' OR ')})"
84
- end.join(" AND ")
85
- end
83
+ if q.values.any?(&:blank?)
84
+ # if any field parameters are empty, exclude _all_ results
85
+ solr_parameters.append_query "{!lucene}NOT *:*"
86
+ else
87
+ composed_query = q.map do |field, values|
88
+ "#{field}:(#{Array(values).map { |x| solr_param_quote(x) }.join(' OR ')})"
89
+ end.join(" AND ")
90
+
91
+ solr_parameters.append_query "{!lucene}#{composed_query}"
92
+ end
86
93
 
87
94
  solr_parameters[:defType] = 'lucene'
88
95
  solr_parameters[:spellcheck] = 'false'
@@ -91,9 +98,7 @@ module Blacklight::Solr
91
98
  def add_search_field_with_json_query_parameters(solr_parameters)
92
99
  bool_query = search_field.clause_params.transform_values { |v| v.merge(query: search_state.query_param) }
93
100
 
94
- solr_parameters[:json] ||= { query: { bool: { must: [] } } }
95
- solr_parameters[:json][:query] ||= { bool: { must: [] } }
96
- solr_parameters[:json][:query][:bool][:must] << bool_query
101
+ solr_parameters.append_boolean_query(:must, bool_query)
97
102
  end
98
103
 
99
104
  # Transform "clause" parameters into the Solr JSON Query DSL
@@ -101,21 +106,15 @@ module Blacklight::Solr
101
106
  return if search_state.clause_params.blank?
102
107
 
103
108
  defaults = { must: [], must_not: [], should: [] }
104
- bool_query = (solr_parameters.dig(:json, :query, :bool) || {}).reverse_merge(defaults)
105
-
106
109
  default_op = blacklight_params[:op]&.to_sym || :must
110
+ solr_parameters[:mm] = 1 if default_op == :should && search_state.clause_params.values.any? { |clause| }
107
111
 
108
112
  search_state.clause_params.each_value do |clause|
109
113
  op, query = adv_search_clause(clause, default_op)
110
- bool_query[op] << query if defaults.key?(op) && query
111
- end
112
-
113
- return if bool_query.values.all?(&:blank?)
114
+ next unless defaults.key?(op)
114
115
 
115
- solr_parameters[:mm] = 1 if default_op == :should
116
- solr_parameters[:json] ||= { query: { bool: {} } }
117
- solr_parameters[:json][:query] ||= { bool: {} }
118
- solr_parameters[:json][:query][:bool] = bool_query.reject { |_k, v| v.blank? }
116
+ solr_parameters.append_boolean_query(op, query)
117
+ end
119
118
  end
120
119
 
121
120
  # @return [Array] the first element is the query operator and the second is the value to add
@@ -141,7 +140,7 @@ module Blacklight::Solr
141
140
  if filter.config.filter_query_builder
142
141
  filter_query, subqueries = filter.config.filter_query_builder.call(self, filter, solr_parameters)
143
142
 
144
- solr_parameters.append_filter_query(filter_query)
143
+ solr_parameters.append_filter_query(filter_query) if filter_query
145
144
  solr_parameters.merge!(subqueries) if subqueries
146
145
  else
147
146
  filter.values.reject(&:blank?).each do |value|
@@ -158,6 +157,21 @@ module Blacklight::Solr
158
157
  end
159
158
  end
160
159
 
160
+ def add_solr_facet_json_params(solr_parameters, field_name, facet, **additional_parameters)
161
+ solr_parameters[:json] ||= { facet: {} }
162
+ solr_parameters[:json][:facet] ||= {}
163
+
164
+ field_config = facet.json.respond_to?(:reverse_merge) ? facet.json : {}
165
+
166
+ field_config = field_config.reverse_merge(
167
+ type: 'terms',
168
+ field: facet.field,
169
+ limit: facet_limit_with_pagination(field_name)
170
+ ).merge(additional_parameters)
171
+
172
+ solr_parameters[:json][:facet][field_name] = field_config.select { |_k, v| v.present? }
173
+ end
174
+
161
175
  ##
162
176
  # Add appropriate Solr facetting directives in, including
163
177
  # taking account of our facet paging/'more'. This is not
@@ -166,6 +180,11 @@ module Blacklight::Solr
166
180
  facet_fields_to_include_in_request.each do |field_name, facet|
167
181
  solr_parameters[:facet] ||= true
168
182
 
183
+ if facet.json
184
+ add_solr_facet_json_params(solr_parameters, field_name, facet)
185
+ next
186
+ end
187
+
169
188
  if facet.pivot
170
189
  solr_parameters.append_facet_pivot with_ex_local_param(facet.ex, facet.pivot.join(","))
171
190
  elsif facet.query
@@ -235,9 +254,7 @@ module Blacklight::Solr
235
254
 
236
255
  facet_config = blacklight_config.facet_fields[facet]
237
256
 
238
- # Now override with our specific things for fetching facet values
239
- facet_ex = facet_config.respond_to?(:ex) ? facet_config.ex : nil
240
- solr_params[:"facet.field"] = with_ex_local_param(facet_ex, facet_config.field)
257
+ solr_params[:rows] = 0
241
258
 
242
259
  limit = if solr_params["facet.limit"]
243
260
  solr_params["facet.limit"].to_i
@@ -250,13 +267,21 @@ module Blacklight::Solr
250
267
  prefix = search_state.facet_prefix
251
268
  offset = (page - 1) * limit
252
269
 
270
+ if facet_config.json
271
+ add_solr_facet_json_params(solr_parameters, facet, facet_config, limit: limit + 1, offset: offset, sort: sort, prefix: prefix)
272
+ return
273
+ end
274
+
275
+ # Now override with our specific things for fetching facet values
276
+ facet_ex = facet_config.respond_to?(:ex) ? facet_config.ex : nil
277
+ solr_params[:"facet.field"] = with_ex_local_param(facet_ex, facet_config.field)
278
+
253
279
  # Need to set as f.facet_field.facet.* to make sure we
254
280
  # override any field-specific default in the solr request handler.
255
281
  solr_params[:"f.#{facet_config.field}.facet.limit"] = limit + 1
256
282
  solr_params[:"f.#{facet_config.field}.facet.offset"] = offset
257
283
  solr_params[:"f.#{facet_config.field}.facet.sort"] = sort if sort
258
284
  solr_params[:"f.#{facet_config.field}.facet.prefix"] = prefix if prefix
259
- solr_params[:rows] = 0
260
285
  end
261
286
 
262
287
  def with_ex_local_param(ex, value)
@@ -302,6 +327,7 @@ module Blacklight::Solr
302
327
  # around the term unless it's a bare-word. Escape internal quotes
303
328
  # if needed.
304
329
  def solr_param_quote(val, options = {})
330
+ val = val.to_s
305
331
  options[:quote] ||= '"'
306
332
  unless val =~ /^[a-zA-Z0-9$_\-\^]+$/
307
333
  val = options[:quote] +
@@ -395,7 +421,7 @@ module Blacklight::Solr
395
421
  def add_search_field_query_builder_params(solr_parameters)
396
422
  q, additional_parameters = search_field.query_builder.call(self, search_field, solr_parameters)
397
423
 
398
- solr_parameters[:q] = q
424
+ solr_parameters.append_query q
399
425
  solr_parameters.merge!(additional_parameters) if additional_parameters
400
426
  end
401
427
 
@@ -403,7 +429,7 @@ module Blacklight::Solr
403
429
  local_params = search_field.solr_local_parameters.map do |key, val|
404
430
  key.to_s + "=" + solr_param_quote(val, quote: "'")
405
431
  end.join(" ")
406
- solr_parameters[:q] = "{!#{local_params}}#{search_state.query_param}"
432
+ solr_parameters.append_query "{!#{local_params}}#{search_state.query_param}"
407
433
 
408
434
  ##
409
435
  # Set Solr spellcheck.q to be original user-entered query, without
@@ -68,11 +68,15 @@ module Blacklight
68
68
  private
69
69
 
70
70
  def turbolinks?
71
- @turbolinks ||= IO.read("app/assets/javascripts/application.js").include?('turbolinks')
71
+ @turbolinks ||= application_js.include?('turbolinks')
72
72
  end
73
73
 
74
74
  def has_blacklight_assets?
75
- IO.read("app/assets/javascripts/application.js").include?('blacklight/blacklight')
75
+ application_js.include?('blacklight/blacklight')
76
+ end
77
+
78
+ def application_js
79
+ IO.read(File.expand_path("app/assets/javascripts/application.js", destination_root))
76
80
  end
77
81
  end
78
82
  end
@@ -37,8 +37,10 @@ module Blacklight
37
37
  end
38
38
 
39
39
  def bundle_install
40
- Bundler.with_clean_env do
41
- run "bundle install"
40
+ inside destination_root do
41
+ Bundler.with_clean_env do
42
+ run "bundle install"
43
+ end
42
44
  end
43
45
  end
44
46
 
@@ -81,9 +83,7 @@ module Blacklight
81
83
  blacklight_marc = String.new('blacklight-marc')
82
84
  gem blacklight_marc, '>= 7.0.0.rc1', '< 8'
83
85
 
84
- Bundler.with_clean_env do
85
- run "bundle install"
86
- end
86
+ bundle_install
87
87
 
88
88
  generate 'blacklight:marc:install'
89
89
  end
@@ -35,8 +35,10 @@ module Blacklight
35
35
  end
36
36
 
37
37
  def bundle_install
38
- Bundler.with_clean_env do
39
- run "bundle install"
38
+ inside destination_root do
39
+ Bundler.with_clean_env do
40
+ run "bundle install"
41
+ end
40
42
  end
41
43
  end
42
44
  end
@@ -24,8 +24,10 @@ module Blacklight
24
24
  gem "devise"
25
25
  gem "devise-guests", "~> 0.6"
26
26
 
27
- Bundler.with_clean_env do
28
- run "bundle install"
27
+ inside destination_root do
28
+ Bundler.with_clean_env do
29
+ run "bundle install"
30
+ end
29
31
  end
30
32
 
31
33
  generate "devise:install"
@@ -47,7 +49,7 @@ module Blacklight
47
49
  # Add Blacklight to the user model
48
50
  def inject_blacklight_user_behavior
49
51
  file_path = "app/models/#{model_name.underscore}.rb"
50
- if File.exist?(file_path)
52
+ if File.exist?(File.expand_path(file_path, destination_root))
51
53
  inject_into_class file_path, model_name.classify do
52
54
  "\n # Connects this user object to Blacklights Bookmarks." \
53
55
  "\n include Blacklight::User\n"
@@ -3,7 +3,7 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe Blacklight::DocumentComponent, type: :component do
6
- subject(:component) { described_class.new(document: document, **attr) }
6
+ subject(:component) { described_class.new(document: document, presenter: view_context.document_presenter(document), **attr) }
7
7
 
8
8
  let(:attr) { {} }
9
9
  let(:view_context) { controller.view_context }
@@ -47,7 +47,7 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
47
47
  component.with(:embed, 'Embed')
48
48
  component.with(:metadata, 'Metadata')
49
49
  component.with(:thumbnail, 'Thumbnail')
50
- component.with(:actions, 'Actions')
50
+ component.with(:actions) { 'Actions' }
51
51
 
52
52
  expect(rendered).to have_content 'Title'
53
53
  expect(rendered).to have_content 'Embed'
@@ -65,7 +65,7 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
65
65
 
66
66
  context 'with a provided body' do
67
67
  it 'opts-out of normal component content' do
68
- component.with(:body, 'Body content')
68
+ component.with(:body) { 'Body content' }
69
69
 
70
70
  expect(rendered).to have_content 'Body content'
71
71
  expect(rendered).not_to have_selector 'header'
@@ -33,9 +33,8 @@ RSpec.describe Blacklight::ConfigurationHelperBehavior do
33
33
 
34
34
  describe "#default_document_index_view_type" do
35
35
  it "uses the first view with default set to true" do
36
- blacklight_config.view.a
37
- blacklight_config.view.b
38
- blacklight_config.view.b.default = true
36
+ blacklight_config.view.a({})
37
+ blacklight_config.view.b(default: true)
39
38
  expect(helper.default_document_index_view_type).to eq :b
40
39
  end
41
40
 
@@ -48,8 +47,8 @@ RSpec.describe Blacklight::ConfigurationHelperBehavior do
48
47
  describe "#document_index_views" do
49
48
  before do
50
49
  blacklight_config.view.abc = false
51
- blacklight_config.view.def.if = false
52
- blacklight_config.view.xyz.unless = true
50
+ blacklight_config.view.def(if: false)
51
+ blacklight_config.view.xyz(unless: true)
53
52
  end
54
53
 
55
54
  it "filters views using :if/:unless configuration" do
@@ -62,8 +61,8 @@ RSpec.describe Blacklight::ConfigurationHelperBehavior do
62
61
 
63
62
  describe '#document_index_view_controls' do
64
63
  before do
65
- blacklight_config.view.a
66
- blacklight_config.view.b.display_control = false
64
+ blacklight_config.view.a({})
65
+ blacklight_config.view.b(display_control: false)
67
66
  end
68
67
 
69
68
  it "filters index views to those set to display controls" do
@@ -127,7 +127,7 @@ RSpec.describe BlacklightHelper do
127
127
 
128
128
  it "renders view type specific actions" do
129
129
  allow(helper).to receive(:document_index_view_type).and_return(:custom)
130
- config.view.custom.document_actions = []
130
+ config.view.custom(document_actions: [])
131
131
  expect(helper.render_index_doc_actions(document)).to be_blank
132
132
  end
133
133
  end
@@ -315,7 +315,7 @@ RSpec.describe BlacklightHelper do
315
315
  end
316
316
 
317
317
  it "ignores missing templates" do
318
- blacklight_config.view.view_type.partials = %w[index_header a b]
318
+ blacklight_config.view.view_type(partials: %w[index_header a b])
319
319
 
320
320
  response = helper.render_document_index_with_view :view_type, [obj1, obj1]
321
321
  expect(response).to have_selector "div#documents"