blacklight 7.7.0 → 7.8.0

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/.docker/app/Dockerfile +26 -0
  3. data/.docker/app/entrypoint.sh +6 -0
  4. data/.env +5 -0
  5. data/.rubocop_todo.yml +13 -13
  6. data/.travis.yml +15 -23
  7. data/Gemfile +4 -1
  8. data/README.md +4 -0
  9. data/VERSION +1 -1
  10. data/app/assets/stylesheets/blacklight/_pagination.scss +4 -0
  11. data/app/components/blacklight/constraint_layout_component.html.erb +21 -0
  12. data/app/components/blacklight/constraint_layout_component.rb +16 -0
  13. data/app/components/blacklight/facet_field_component.html.erb +25 -0
  14. data/app/components/blacklight/facet_field_component.rb +11 -0
  15. data/app/components/blacklight/facet_field_list_component.html.erb +18 -0
  16. data/app/components/blacklight/facet_field_list_component.rb +22 -0
  17. data/app/components/blacklight/facet_field_no_layout_component.rb +13 -0
  18. data/app/components/blacklight/facet_item_component.rb +120 -0
  19. data/app/helpers/blacklight/catalog_helper_behavior.rb +2 -2
  20. data/app/helpers/blacklight/facets_helper_behavior.rb +84 -48
  21. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +64 -33
  22. data/app/javascript/blacklight/modal.js +1 -1
  23. data/app/models/concerns/blacklight/document/extensions.rb +3 -0
  24. data/app/models/concerns/blacklight/document/semantic_fields.rb +0 -4
  25. data/app/presenters/blacklight/facet_field_presenter.rb +57 -0
  26. data/app/presenters/blacklight/facet_item_presenter.rb +81 -0
  27. data/app/views/catalog/_citation.html.erb +1 -1
  28. data/app/views/catalog/_constraints.html.erb +1 -1
  29. data/app/views/catalog/_constraints_element.html.erb +5 -24
  30. data/app/views/catalog/_email_form.html.erb +1 -1
  31. data/app/views/catalog/_facet_layout.html.erb +8 -17
  32. data/app/views/catalog/_facet_limit.html.erb +3 -12
  33. data/app/views/catalog/_facet_pagination.html.erb +2 -2
  34. data/app/views/catalog/_facet_pivot.html.erb +4 -4
  35. data/app/views/catalog/_sms_form.html.erb +1 -1
  36. data/blacklight.gemspec +1 -0
  37. data/config/locales/blacklight.ar.yml +29 -25
  38. data/docker-compose.yml +35 -0
  39. data/lib/blacklight/engine.rb +2 -6
  40. data/lib/blacklight/search_state.rb +32 -0
  41. data/lib/blacklight/solr/response/facets.rb +2 -0
  42. data/lib/generators/blacklight/assets_generator.rb +10 -0
  43. data/spec/{views/catalog/_constraints_element.html.erb_spec.rb → components/blacklight/constraint_layout_component_spec.rb} +21 -11
  44. data/spec/components/blacklight/facet_field_list_component_spec.rb +108 -0
  45. data/spec/components/blacklight/facet_item_component_spec.rb +50 -0
  46. data/spec/features/facets_spec.rb +1 -1
  47. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +24 -12
  48. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +4 -23
  49. data/spec/lib/blacklight/search_state_spec.rb +38 -0
  50. data/spec/models/blacklight/solr/response/facets_spec.rb +30 -1
  51. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +109 -0
  52. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +92 -0
  53. data/spec/spec_helper.rb +2 -0
  54. data/spec/support/presenter_test_helpers.rb +11 -0
  55. data/spec/views/catalog/_facet_group.html.erb_spec.rb +1 -0
  56. data/tasks/blacklight.rake +30 -23
  57. metadata +43 -5
@@ -48,6 +48,44 @@ RSpec.describe Blacklight::SearchState do
48
48
  end
49
49
  end
50
50
 
51
+ describe '#query_param' do
52
+ let(:params) { parameter_class.new q: 'xyz' }
53
+
54
+ it 'returns the query param' do
55
+ expect(search_state.query_param).to eq 'xyz'
56
+ end
57
+ end
58
+
59
+ describe '#filter_params' do
60
+ let(:params) { parameter_class.new f: { ff: ['xyz'] } }
61
+
62
+ it 'returns the query param' do
63
+ expect(search_state.filter_params.deep_symbolize_keys).to eq(ff: ['xyz'])
64
+ end
65
+ end
66
+
67
+ describe '#has_constraints?' do
68
+ it 'is false' do
69
+ expect(search_state.has_constraints?).to eq false
70
+ end
71
+
72
+ context 'with a query param' do
73
+ let(:params) { parameter_class.new q: 'xyz' }
74
+
75
+ it 'is true' do
76
+ expect(search_state.has_constraints?).to eq true
77
+ end
78
+ end
79
+
80
+ context 'with a facet param' do
81
+ let(:params) { parameter_class.new f: { ff: ['xyz'] } }
82
+
83
+ it 'is true' do
84
+ expect(search_state.has_constraints?).to eq true
85
+ end
86
+ end
87
+ end
88
+
51
89
  describe "params_for_search" do
52
90
  let(:params) { parameter_class.new 'default' => 'params' }
53
91
 
@@ -168,9 +168,11 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
168
168
  let(:facet_config) do
169
169
  double(
170
170
  key: 'my_query_facet_field',
171
+ sort: nil,
171
172
  query: {
172
173
  'a_simple_query' => { fq: 'field:search', label: 'A Human Readable label' },
173
174
  'another_query' => { fq: 'field:different_search', label: 'Label' },
175
+ 'query_with_many_results' => { fq: 'field:many_result_search', label: 'Yet another label' },
174
176
  'without_results' => { fq: 'field:without_results', label: 'No results for this facet' }
175
177
  }
176
178
  )
@@ -184,6 +186,7 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
184
186
  facet_queries: {
185
187
  'field:search' => 10,
186
188
  'field:different_search' => 2,
189
+ 'field:many_result_search' => 100,
187
190
  'field:not_appearing_in_the_config' => 50,
188
191
  'field:without_results' => 0
189
192
  }
@@ -197,7 +200,7 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
197
200
  expect(field).to be_a_kind_of Blacklight::Solr::Response::Facets::FacetField
198
201
 
199
202
  expect(field.name).to eq 'my_query_facet_field'
200
- expect(field.items.size).to eq 2
203
+ expect(field.items.size).to eq 3
201
204
  expect(field.items.map(&:value)).not_to include 'field:not_appearing_in_the_config'
202
205
 
203
206
  facet_item = field.items.find { |x| x.value == 'a_simple_query' }
@@ -206,6 +209,32 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
206
209
  expect(facet_item.hits).to eq 10
207
210
  expect(facet_item.label).to eq 'A Human Readable label'
208
211
  end
212
+
213
+ describe 'default/index sorting' do
214
+ it 'returns the results in the order they are requested by default' do
215
+ field = subject.aggregations['my_query_facet_field']
216
+ expect(field.items.map(&:value)).to eq %w[a_simple_query another_query query_with_many_results]
217
+ expect(field.items.map(&:hits)).to eq [10, 2, 100]
218
+ end
219
+
220
+ it 'returns the results in the order they are requested by when sort is explicitly set to "index"' do
221
+ allow(facet_config).to receive(:sort).and_return(:index)
222
+
223
+ field = subject.aggregations['my_query_facet_field']
224
+ expect(field.items.map(&:value)).to eq %w[a_simple_query another_query query_with_many_results]
225
+ expect(field.items.map(&:hits)).to eq [10, 2, 100]
226
+ end
227
+ end
228
+
229
+ describe 'count sorting' do
230
+ it 'returns the results sorted by count when requested' do
231
+ allow(facet_config).to receive(:sort).and_return(:count)
232
+
233
+ field = subject.aggregations['my_query_facet_field']
234
+ expect(field.items.map(&:value)).to eq %w[query_with_many_results a_simple_query another_query]
235
+ expect(field.items.map(&:hits)).to eq [100, 10, 2]
236
+ end
237
+ end
209
238
  end
210
239
 
211
240
  describe "pivot facets" do
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Blacklight::FacetFieldPresenter, type: :presenter do
5
+ subject(:presenter) do
6
+ described_class.new(facet_field, display_facet, view_context, search_state)
7
+ end
8
+
9
+ let(:facet_field) { Blacklight::Configuration::FacetField.new(key: 'key') }
10
+ let(:display_facet) do
11
+ instance_double(Blacklight::Solr::Response::Facets::FacetField, items: items, sort: :index, offset: 0, prefix: nil)
12
+ end
13
+ let(:items) { [] }
14
+ let(:view_context) { controller.view_context }
15
+ let(:search_state) { view_context.search_state }
16
+
17
+ before do
18
+ allow(view_context).to receive(:facet_limit_for).and_return(20)
19
+ end
20
+
21
+ describe '#collapsed?' do
22
+ it "is collapsed by default" do
23
+ facet_field.collapse = true
24
+ expect(presenter.collapsed?).to be true
25
+ end
26
+
27
+ it "does not be collapse if the configuration says so" do
28
+ facet_field.collapse = false
29
+ expect(presenter).not_to be_collapsed
30
+ end
31
+
32
+ it "does not be collapsed if it is in the params" do
33
+ controller.params[:f] = ActiveSupport::HashWithIndifferentAccess.new(key: [1])
34
+ expect(presenter.collapsed?).to be false
35
+ end
36
+ end
37
+
38
+ describe '#active?' do
39
+ it "checks if any value is selected for a given facet" do
40
+ controller.params[:f] = ActiveSupport::HashWithIndifferentAccess.new(key: [1])
41
+ expect(presenter.active?).to eq true
42
+ end
43
+
44
+ it "is false if no value for facet is selected" do
45
+ expect(presenter.active?).to eq false
46
+ end
47
+ end
48
+
49
+ describe '#in_modal?' do
50
+ context 'for a modal-like action' do
51
+ before do
52
+ controller.params[:action] = 'facet'
53
+ end
54
+
55
+ it 'is true' do
56
+ expect(presenter.in_modal?).to eq true
57
+ end
58
+ end
59
+
60
+ it 'is false' do
61
+ expect(presenter.in_modal?).to eq false
62
+ end
63
+ end
64
+
65
+ describe '#modal_path' do
66
+ let(:paginator) { Blacklight::FacetPaginator.new([{}, {}], limit: 1) }
67
+
68
+ before do
69
+ allow(view_context).to receive(:facet_paginator).and_return(paginator)
70
+ end
71
+
72
+ context 'with no additional data' do
73
+ let(:paginator) { Blacklight::FacetPaginator.new([{}, {}], limit: 10) }
74
+
75
+ it 'is nil' do
76
+ expect(presenter.modal_path).to be_nil
77
+ end
78
+ end
79
+
80
+ it 'returns the path to the facet view' do
81
+ allow(view_context).to receive(:search_facet_path).with(id: 'key').and_return('/catalog/facet/key')
82
+
83
+ expect(presenter.modal_path).to eq '/catalog/facet/key'
84
+ end
85
+ end
86
+
87
+ describe '#label' do
88
+ it 'gets the label from the helper' do
89
+ allow(view_context).to receive(:facet_field_label).with('key').and_return('Label')
90
+ expect(presenter.label).to eq 'Label'
91
+ end
92
+ end
93
+
94
+ describe '#html_id' do
95
+ it 'gets the id from a helper' do
96
+ allow(view_context).to receive(:html_id).with('key').and_return('facet-key')
97
+ expect(presenter.html_id).to eq 'facet-key'
98
+ end
99
+ end
100
+
101
+ describe '#paginator' do
102
+ subject(:paginator) { presenter.paginator }
103
+
104
+ it 'return a paginator for the facet data' do
105
+ expect(paginator.current_page).to eq 1
106
+ expect(paginator.total_count).to eq 0
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Blacklight::FacetItemPresenter, type: :presenter do
5
+ subject(:presenter) do
6
+ described_class.new(facet_item, facet_config, view_context, facet_field, search_state)
7
+ end
8
+
9
+ let(:facet_item) { instance_double(Blacklight::Solr::Response::Facets::FacetItem) }
10
+ let(:facet_config) { Blacklight::Configuration::FacetField.new(key: 'key') }
11
+ let(:facet_field) { instance_double(Blacklight::Solr::Response::Facets::FacetField) }
12
+ let(:view_context) { controller.view_context }
13
+ let(:search_state) { instance_double(Blacklight::SearchState) }
14
+
15
+ describe '#selected?' do
16
+ it 'works' do
17
+ allow(search_state).to receive(:has_facet?).and_return(true)
18
+ expect(presenter.selected?).to be true
19
+ end
20
+ end
21
+
22
+ describe '#label' do
23
+ it "is the facet value for an ordinary facet" do
24
+ allow(facet_config).to receive_messages(query: nil, date: nil, helper_method: nil, url_method: nil)
25
+ expect(presenter.label).to eq facet_item
26
+ end
27
+
28
+ it "allows you to pass in a :helper_method argument to the configuration" do
29
+ allow(facet_config).to receive_messages(query: nil, date: nil, url_method: nil, helper_method: :my_facet_value_renderer)
30
+ allow(view_context).to receive(:my_facet_value_renderer).with(facet_item).and_return('abc')
31
+ expect(presenter.label).to eq 'abc'
32
+ end
33
+
34
+ context 'with a query facet' do
35
+ let(:facet_item) { :query_key }
36
+
37
+ it "extracts the configuration label for a query facet" do
38
+ allow(facet_config).to receive_messages(query: { query_key: { label: 'XYZ' } }, date: nil, helper_method: nil, url_method: nil)
39
+ expect(presenter.label).to eq 'XYZ'
40
+ end
41
+ end
42
+
43
+ context 'with a date facet' do
44
+ let(:facet_item) { '2012-01-01' }
45
+
46
+ it "localizes the label for date-type facets" do
47
+ allow(facet_config).to receive_messages('date' => true, :query => nil, :helper_method => nil, :url_method => nil)
48
+ expect(presenter.label).to eq 'Sun, 01 Jan 2012 00:00:00 +0000'
49
+ end
50
+
51
+ it "localizes the label for date-type facets with the supplied localization options" do
52
+ allow(facet_config).to receive_messages(date: { format: :short }, query: nil, helper_method: nil, url_method: nil)
53
+ expect(presenter.label).to eq '01 Jan 00:00'
54
+ end
55
+ end
56
+ end
57
+
58
+ describe '#href' do
59
+ before do
60
+ allow(search_state).to receive(:has_facet?).and_return(false)
61
+ end
62
+
63
+ it 'is the url to apply the facet' do
64
+ allow(search_state).to receive(:add_facet_params_and_redirect).with('key', facet_item).and_return(f: 'x')
65
+ allow(view_context).to receive(:search_action_path).with(f: 'x').and_return('/catalog?f=x')
66
+
67
+ expect(presenter.href).to eq '/catalog?f=x'
68
+ end
69
+
70
+ context 'with url_method configuration' do
71
+ before do
72
+ allow(facet_config).to receive_messages(url_method: :some_helper_method)
73
+ end
74
+
75
+ it 'calls out to a helper to determine the url' do
76
+ allow(view_context).to receive(:some_helper_method).and_return('/xyz').with('key', facet_item)
77
+
78
+ expect(presenter.href).to eq '/xyz'
79
+ end
80
+ end
81
+
82
+ context 'with a selected facet' do
83
+ it 'is the url to remove the facet' do
84
+ allow(search_state).to receive(:has_facet?).and_return(true)
85
+ allow(search_state).to receive(:remove_facet_params).with('key', facet_item).and_return({})
86
+ allow(view_context).to receive(:search_action_path).with({}).and_return('/catalog')
87
+
88
+ expect(presenter.href).to eq '/catalog'
89
+ end
90
+ end
91
+ end
92
+ end
@@ -54,6 +54,8 @@ RSpec.configure do |config|
54
54
  end
55
55
 
56
56
  config.infer_spec_type_from_file_location!
57
+ config.include PresenterTestHelpers, type: :presenter
58
+ config.include ViewComponent::TestHelpers, type: :component
57
59
 
58
60
  config.include(ControllerLevelHelpers, type: :helper)
59
61
  config.before(:each, type: :helper) { initialize_controller_helpers(helper) }
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PresenterTestHelpers
4
+ def controller
5
+ @controller ||= ViewComponent::Base.test_controller.constantize.new.tap { |c| c.request = request }.extend(Rails.application.routes.url_helpers)
6
+ end
7
+
8
+ def request
9
+ @request ||= ActionDispatch::TestRequest.create
10
+ end
11
+ end
@@ -6,6 +6,7 @@ RSpec.describe "catalog/_facet_group" do
6
6
  before do
7
7
  allow(view).to receive_messages(blacklight_config: blacklight_config)
8
8
  allow(view).to receive(:search_action_path).and_return('/catalog')
9
+ allow(view).to receive(:search_facet_path).and_return('/catalog')
9
10
  end
10
11
 
11
12
  context "without any facet fields" do
@@ -10,12 +10,26 @@ end
10
10
  require 'rubocop/rake_task'
11
11
  RuboCop::RakeTask.new(:rubocop)
12
12
 
13
+ def with_solr
14
+ puts "Starting Solr"
15
+ system "docker-compose up -d solr"
16
+ yield
17
+ ensure
18
+ puts "Stopping Solr"
19
+ system "docker-compose stop solr"
20
+ end
21
+
13
22
  desc "Run test suite"
14
- task ci: ['blacklight:generate'] do
15
- within_test_app do
16
- system "RAILS_ENV=test rake blacklight:index:seed"
23
+ task :ci do
24
+ with_solr do
25
+ Rake::Task['engine_cart:generate'].invoke
26
+
27
+ within_test_app do
28
+ system "RAILS_ENV=test bin/rake blacklight:index:seed"
29
+ end
30
+
31
+ Rake::Task['blacklight:coverage'].invoke
17
32
  end
18
- Rake::Task['blacklight:coverage'].invoke
19
33
  end
20
34
 
21
35
  namespace :blacklight do
@@ -25,34 +39,27 @@ namespace :blacklight do
25
39
  Rake::Task["spec"].invoke
26
40
  end
27
41
 
28
- desc "Create the test rails app"
29
- task generate: ['engine_cart:generate'] do
30
- end
31
-
32
42
  namespace :internal do
43
+ desc 'Index seed data in test app'
33
44
  task seed: ['engine_cart:generate'] do
34
45
  within_test_app do
35
- system "bundle exec rake blacklight:index:seed"
46
+ system "bin/rake blacklight:index:seed"
36
47
  end
37
48
  end
38
49
  end
39
50
 
40
51
  desc 'Run Solr and Blacklight for interactive development'
41
- task :server, [:rails_server_args] do |_t, args|
42
- if File.exist? EngineCart.destination
43
- within_test_app do
44
- system "bundle update"
45
- end
46
- else
47
- Rake::Task['engine_cart:generate'].invoke
48
- end
49
-
50
- SolrWrapper.wrap do |solr|
51
- solr.with_collection do
52
- Rake::Task['blacklight:internal:seed'].invoke
52
+ task :server, [:rails_server_args] => ['engine_cart:generate'] do |_t, args|
53
+ with_solr do
54
+ Rake::Task['blacklight:internal:seed'].invoke
53
55
 
54
- within_test_app do
55
- system "bundle exec rails s #{args[:rails_server_args]}"
56
+ within_test_app do
57
+ begin
58
+ puts "Starting Blacklight (Rails server)"
59
+ system "bin/rails s #{args[:rails_server_args]}"
60
+ rescue Interrupt
61
+ # We expect folks to Ctrl-c to stop the server so don't barf at them
62
+ puts "\nStopping Blacklight (Rails server)"
56
63
  end
57
64
  end
58
65
  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: 7.7.0
4
+ version: 7.8.0
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: 2020-03-04 00:00:00.000000000 Z
20
+ date: 2020-05-21 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -95,6 +95,20 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: view_component
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: rsolr
100
114
  requirement: !ruby/object:Gem::Requirement
@@ -294,6 +308,9 @@ executables: []
294
308
  extensions: []
295
309
  extra_rdoc_files: []
296
310
  files:
311
+ - ".docker/app/Dockerfile"
312
+ - ".docker/app/entrypoint.sh"
313
+ - ".env"
297
314
  - ".gitignore"
298
315
  - ".hound.yml"
299
316
  - ".jshintrc"
@@ -335,6 +352,14 @@ files:
335
352
  - app/assets/stylesheets/blacklight/blacklight.scss
336
353
  - app/assets/stylesheets/blacklight/blacklight_defaults.scss
337
354
  - app/builders/blacklight/action_builder.rb
355
+ - app/components/blacklight/constraint_layout_component.html.erb
356
+ - app/components/blacklight/constraint_layout_component.rb
357
+ - app/components/blacklight/facet_field_component.html.erb
358
+ - app/components/blacklight/facet_field_component.rb
359
+ - app/components/blacklight/facet_field_list_component.html.erb
360
+ - app/components/blacklight/facet_field_list_component.rb
361
+ - app/components/blacklight/facet_field_no_layout_component.rb
362
+ - app/components/blacklight/facet_item_component.rb
338
363
  - app/controllers/bookmarks_controller.rb
339
364
  - app/controllers/catalog_controller.rb
340
365
  - app/controllers/concerns/blacklight/base.rb
@@ -393,6 +418,8 @@ files:
393
418
  - app/models/search.rb
394
419
  - app/models/solr_document.rb
395
420
  - app/presenters/blacklight/document_presenter.rb
421
+ - app/presenters/blacklight/facet_field_presenter.rb
422
+ - app/presenters/blacklight/facet_item_presenter.rb
396
423
  - app/presenters/blacklight/field_presenter.rb
397
424
  - app/presenters/blacklight/index_presenter.rb
398
425
  - app/presenters/blacklight/json_presenter.rb
@@ -518,6 +545,7 @@ files:
518
545
  - db/migrate/20140202020201_create_searches.rb
519
546
  - db/migrate/20140202020202_create_bookmarks.rb
520
547
  - db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb
548
+ - docker-compose.yml
521
549
  - lib/blacklight.rb
522
550
  - lib/blacklight/abstract_repository.rb
523
551
  - lib/blacklight/configuration.rb
@@ -593,6 +621,9 @@ files:
593
621
  - lib/railties/blacklight.rake
594
622
  - package-lock.json
595
623
  - package.json
624
+ - spec/components/blacklight/constraint_layout_component_spec.rb
625
+ - spec/components/blacklight/facet_field_list_component_spec.rb
626
+ - spec/components/blacklight/facet_item_component_spec.rb
596
627
  - spec/controllers/alternate_controller_spec.rb
597
628
  - spec/controllers/application_controller_spec.rb
598
629
  - spec/controllers/blacklight/base_spec.rb
@@ -670,6 +701,8 @@ files:
670
701
  - spec/models/search_spec.rb
671
702
  - spec/models/solr_document_spec.rb
672
703
  - spec/presenters/blacklight/document_presenter_spec.rb
704
+ - spec/presenters/blacklight/facet_field_presenter_spec.rb
705
+ - spec/presenters/blacklight/facet_item_presenter_spec.rb
673
706
  - spec/presenters/blacklight/field_presenter_spec.rb
674
707
  - spec/presenters/blacklight/index_presenter_spec.rb
675
708
  - spec/presenters/blacklight/json_presenter_spec.rb
@@ -684,10 +717,10 @@ files:
684
717
  - spec/support/controller_level_helpers.rb
685
718
  - spec/support/features.rb
686
719
  - spec/support/features/session_helpers.rb
720
+ - spec/support/presenter_test_helpers.rb
687
721
  - spec/test_app_templates/Gemfile.extra
688
722
  - spec/test_app_templates/lib/generators/test_app_generator.rb
689
723
  - spec/views/catalog/_constraints.html.erb_spec.rb
690
- - spec/views/catalog/_constraints_element.html.erb_spec.rb
691
724
  - spec/views/catalog/_document.html.erb_spec.rb
692
725
  - spec/views/catalog/_document_list.html.erb_spec.rb
693
726
  - spec/views/catalog/_facet_group.html.erb_spec.rb
@@ -738,12 +771,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
738
771
  - !ruby/object:Gem::Version
739
772
  version: '0'
740
773
  requirements: []
741
- rubygems_version: 3.1.1
774
+ rubygems_version: 3.1.2
742
775
  signing_key:
743
776
  specification_version: 4
744
777
  summary: Blacklight provides a discovery interface for any Solr (http://lucene.apache.org/solr)
745
778
  index.
746
779
  test_files:
780
+ - spec/components/blacklight/constraint_layout_component_spec.rb
781
+ - spec/components/blacklight/facet_field_list_component_spec.rb
782
+ - spec/components/blacklight/facet_item_component_spec.rb
747
783
  - spec/controllers/alternate_controller_spec.rb
748
784
  - spec/controllers/application_controller_spec.rb
749
785
  - spec/controllers/blacklight/base_spec.rb
@@ -821,6 +857,8 @@ test_files:
821
857
  - spec/models/search_spec.rb
822
858
  - spec/models/solr_document_spec.rb
823
859
  - spec/presenters/blacklight/document_presenter_spec.rb
860
+ - spec/presenters/blacklight/facet_field_presenter_spec.rb
861
+ - spec/presenters/blacklight/facet_item_presenter_spec.rb
824
862
  - spec/presenters/blacklight/field_presenter_spec.rb
825
863
  - spec/presenters/blacklight/index_presenter_spec.rb
826
864
  - spec/presenters/blacklight/json_presenter_spec.rb
@@ -835,10 +873,10 @@ test_files:
835
873
  - spec/support/controller_level_helpers.rb
836
874
  - spec/support/features.rb
837
875
  - spec/support/features/session_helpers.rb
876
+ - spec/support/presenter_test_helpers.rb
838
877
  - spec/test_app_templates/Gemfile.extra
839
878
  - spec/test_app_templates/lib/generators/test_app_generator.rb
840
879
  - spec/views/catalog/_constraints.html.erb_spec.rb
841
- - spec/views/catalog/_constraints_element.html.erb_spec.rb
842
880
  - spec/views/catalog/_document.html.erb_spec.rb
843
881
  - spec/views/catalog/_document_list.html.erb_spec.rb
844
882
  - spec/views/catalog/_facet_group.html.erb_spec.rb