blacklight 7.16.0 → 7.18.1

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.
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"