blacklight 8.3.0 → 8.4.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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +9 -5
  3. data/.rubocop.yml +3 -0
  4. data/.rubocop_todo.yml +22 -55
  5. data/Gemfile +2 -10
  6. data/README.md +2 -2
  7. data/VERSION +1 -1
  8. data/app/assets/javascripts/blacklight/blacklight.esm.js +5 -1
  9. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -1
  10. data/app/assets/javascripts/blacklight/blacklight.js +5 -1
  11. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -1
  12. data/app/assets/stylesheets/blacklight/_balanced_list.scss +1 -1
  13. data/app/assets/stylesheets/blacklight/_bookmark.scss +30 -0
  14. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +0 -4
  15. data/app/assets/stylesheets/blacklight/_constraints.scss +15 -9
  16. data/app/assets/stylesheets/blacklight/_controls.scss +0 -1
  17. data/app/assets/stylesheets/blacklight/_facets.scss +33 -37
  18. data/app/assets/stylesheets/blacklight/_header.scss +2 -35
  19. data/app/assets/stylesheets/blacklight/_icons.scss +3 -2
  20. data/app/assets/stylesheets/blacklight/_layout.scss +3 -0
  21. data/app/assets/stylesheets/blacklight/_mixins.scss +4 -4
  22. data/app/assets/stylesheets/blacklight/_search_form.scss +3 -8
  23. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -5
  24. data/app/assets/stylesheets/blacklight/_search_results.scss +5 -2
  25. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +16 -10
  26. data/app/components/blacklight/advanced_search_form_component.html.erb +1 -1
  27. data/app/components/blacklight/advanced_search_form_component.rb +6 -0
  28. data/app/components/blacklight/constraint_layout_component.html.erb +2 -9
  29. data/app/components/blacklight/constraint_layout_component.rb +8 -0
  30. data/app/components/blacklight/constraints_component.rb +3 -3
  31. data/app/components/blacklight/document/action_component.rb +2 -1
  32. data/app/components/blacklight/document/bookmark_component.html.erb +2 -1
  33. data/app/components/blacklight/document/bookmark_component.rb +6 -0
  34. data/app/components/blacklight/document/page_header_component.html.erb +7 -0
  35. data/app/components/blacklight/document/page_header_component.rb +85 -0
  36. data/app/components/blacklight/document_component.rb +1 -1
  37. data/app/components/blacklight/facet_component.rb +1 -1
  38. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +1 -1
  39. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  40. data/app/components/blacklight/facet_field_inclusive_constraint_component.html.erb +1 -1
  41. data/app/components/blacklight/facet_field_list_component.html.erb +1 -1
  42. data/app/components/blacklight/facet_item_component.rb +1 -1
  43. data/app/components/blacklight/icons/bookmark_icon_component.rb +17 -0
  44. data/app/components/blacklight/icons/icon_component.rb +9 -4
  45. data/app/components/blacklight/icons/remove_component.rb +16 -0
  46. data/app/components/blacklight/metadata_field_component.html.erb +1 -1
  47. data/app/components/blacklight/metadata_field_component.rb +5 -0
  48. data/app/components/blacklight/response/facet_group_component.rb +1 -1
  49. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  50. data/app/components/blacklight/response/sort_component.html.erb +1 -6
  51. data/app/components/blacklight/response/sort_component.rb +15 -0
  52. data/app/components/blacklight/search/per_page_component.html.erb +2 -0
  53. data/app/components/blacklight/search/per_page_component.rb +50 -0
  54. data/app/components/blacklight/search_bar_component.html.erb +1 -1
  55. data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +4 -7
  56. data/app/components/blacklight/skip_link_component.html.erb +7 -0
  57. data/app/components/blacklight/skip_link_component.rb +17 -0
  58. data/app/components/blacklight/system/dropdown_button_component.rb +18 -0
  59. data/app/components/blacklight/system/dropdown_component.rb +3 -6
  60. data/app/components/blacklight/system/flash_message_component.html.erb +1 -1
  61. data/app/components/blacklight/top_navbar_component.html.erb +2 -2
  62. data/app/components/blacklight/top_navbar_component.rb +4 -0
  63. data/app/helpers/blacklight/catalog_helper_behavior.rb +2 -0
  64. data/app/helpers/blacklight/component_helper_behavior.rb +4 -4
  65. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -0
  66. data/app/javascript/blacklight/checkbox_submit.js +5 -1
  67. data/app/models/concerns/blacklight/document/semantic_fields.rb +1 -1
  68. data/app/presenters/blacklight/facet_checkbox_item_presenter.rb +11 -0
  69. data/app/presenters/blacklight/facet_field_presenter.rb +9 -1
  70. data/app/services/blacklight/search_service.rb +9 -1
  71. data/app/views/catalog/_per_page_widget.html.erb +1 -10
  72. data/app/views/catalog/_search_results.html.erb +1 -1
  73. data/app/views/catalog/_show_main_content.html.erb +1 -1
  74. data/app/views/catalog/show.html.erb +0 -2
  75. data/app/views/catalog/suggest.html.erb +1 -1
  76. data/app/views/kaminari/blacklight/_page.html.erb +14 -8
  77. data/app/views/layouts/blacklight/base.html.erb +3 -4
  78. data/blacklight.gemspec +4 -0
  79. data/{docker-compose.yml → compose.yaml} +1 -1
  80. data/config/locales/blacklight.ar.yml +3 -0
  81. data/config/locales/blacklight.de.yml +3 -0
  82. data/config/locales/blacklight.en.yml +216 -229
  83. data/config/locales/blacklight.es.yml +3 -0
  84. data/config/locales/blacklight.fr.yml +3 -0
  85. data/config/locales/blacklight.hu.yml +3 -0
  86. data/config/locales/blacklight.it.yml +3 -0
  87. data/config/locales/blacklight.nl.yml +3 -0
  88. data/config/locales/blacklight.pt-BR.yml +3 -0
  89. data/config/locales/blacklight.sq.yml +3 -0
  90. data/config/locales/blacklight.zh.yml +3 -0
  91. data/lib/blacklight/abstract_repository.rb +6 -0
  92. data/lib/blacklight/configuration.rb +32 -19
  93. data/lib/blacklight/parameters.rb +1 -1
  94. data/lib/blacklight/solr/repository.rb +11 -4
  95. data/lib/blacklight/solr/response/params.rb +1 -1
  96. data/lib/blacklight/solr/response.rb +0 -12
  97. data/lib/blacklight/solr/search_builder_behavior.rb +1 -1
  98. data/lib/blacklight/solr.rb +0 -6
  99. data/lib/blacklight.rb +4 -14
  100. data/lib/generators/blacklight/assets/propshaft_generator.rb +2 -2
  101. data/lib/generators/blacklight/models_generator.rb +1 -1
  102. data/package.json +1 -1
  103. data/spec/components/blacklight/document/action_component_spec.rb +1 -1
  104. data/spec/components/blacklight/document/page_header_component_spec.rb +92 -0
  105. data/spec/components/blacklight/document_component_spec.rb +20 -0
  106. data/spec/components/blacklight/icons/icon_component_spec.rb +42 -0
  107. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +1 -1
  108. data/spec/controllers/blacklight/catalog_spec.rb +1 -1
  109. data/spec/controllers/catalog_controller_spec.rb +5 -5
  110. data/spec/features/advanced_search_spec.rb +16 -2
  111. data/spec/features/bookmarks_spec.rb +15 -0
  112. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +2 -2
  113. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +1 -1
  114. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +1 -1
  115. data/spec/models/blacklight/configuration_spec.rb +12 -12
  116. data/spec/models/blacklight/solr/document_spec.rb +2 -2
  117. data/spec/models/blacklight/solr/repository_spec.rb +31 -13
  118. data/spec/models/blacklight/solr/response/facets_spec.rb +2 -2
  119. data/spec/models/blacklight/solr/response/group_spec.rb +1 -1
  120. data/spec/models/blacklight/solr/response_spec.rb +2 -2
  121. data/spec/models/blacklight/solr/search_builder_behavior_spec.rb +1 -1
  122. data/spec/models/bookmark_spec.rb +1 -1
  123. data/spec/presenters/blacklight/document_presenter_spec.rb +2 -2
  124. data/spec/presenters/blacklight/facet_checkbox_item_presenter_spec.rb +42 -0
  125. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +14 -0
  126. data/spec/requests/load_suggestions_spec.rb +5 -5
  127. data/spec/services/blacklight/search_service_spec.rb +2 -2
  128. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  129. data/tasks/blacklight.rake +5 -5
  130. metadata +76 -4
@@ -24,12 +24,12 @@ RSpec.describe Blacklight::Solr::Repository, :api do
24
24
  blacklight_config.document_solr_path = 'abc'
25
25
  blacklight_config.solr_path = 'xyz'
26
26
  allow(subject.connection).to receive(:send_and_receive).with('abc', anything).and_return(mock_response)
27
- expect(subject.find("123")).to be_a_kind_of Blacklight::Solr::Response
27
+ expect(subject.find("123")).to be_a Blacklight::Solr::Response
28
28
  end
29
29
 
30
30
  it "uses a default :qt param" do
31
31
  allow(subject.connection).to receive(:send_and_receive).with('get', hash_including(params: hash_including(ids: '123'))).and_return(mock_response)
32
- expect(subject.find("123", {})).to be_a_kind_of Blacklight::Solr::Response
32
+ expect(subject.find("123", {})).to be_a Blacklight::Solr::Response
33
33
  end
34
34
 
35
35
  context "without a document solr path configured" do
@@ -40,7 +40,7 @@ RSpec.describe Blacklight::Solr::Repository, :api do
40
40
  it "uses the default solr path" do
41
41
  blacklight_config.solr_path = 'xyz'
42
42
  allow(subject.connection).to receive(:send_and_receive).with('xyz', anything).and_return(mock_response)
43
- expect(subject.find("123")).to be_a_kind_of Blacklight::Solr::Response
43
+ expect(subject.find("123")).to be_a Blacklight::Solr::Response
44
44
  end
45
45
  end
46
46
 
@@ -53,14 +53,14 @@ RSpec.describe Blacklight::Solr::Repository, :api do
53
53
  it "uses the provided :qt param" do
54
54
  blacklight_config.document_solr_request_handler = 'xyz'
55
55
  allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'abc' })).and_return(mock_response)
56
- expect(subject.find("123", qt: 'abc')).to be_a_kind_of Blacklight::Solr::Response
56
+ expect(subject.find("123", qt: 'abc')).to be_a Blacklight::Solr::Response
57
57
  end
58
58
 
59
59
  it "uses the :qt parameter from the default_document_solr_params" do
60
60
  blacklight_config.default_document_solr_params[:qt] = 'abc'
61
61
  blacklight_config.document_solr_request_handler = 'xyz'
62
62
  allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'abc' })).and_return(mock_response)
63
- expect(subject.find("123")).to be_a_kind_of Blacklight::Solr::Response
63
+ expect(subject.find("123")).to be_a Blacklight::Solr::Response
64
64
  end
65
65
  end
66
66
 
@@ -68,8 +68,26 @@ RSpec.describe Blacklight::Solr::Repository, :api do
68
68
  doc_params = ActiveSupport::HashWithIndifferentAccess.new
69
69
  allow(subject.connection).to receive(:send_and_receive).with('get', anything).and_return(mock_response)
70
70
  response = subject.find("123", doc_params)
71
- expect(response).to be_a_kind_of Blacklight::Solr::Response
72
- expect(response.params).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
71
+ expect(response).to be_a Blacklight::Solr::Response
72
+ expect(response.params).to be_a ActiveSupport::HashWithIndifferentAccess
73
+ end
74
+ end
75
+
76
+ describe '#find_many' do
77
+ context 'with a configured fetch_many_documents_path' do
78
+ it 'uses the path' do
79
+ blacklight_config.fetch_many_documents_path = 'documents'
80
+ allow(subject.connection).to receive(:send_and_receive).with('documents', anything).and_return(mock_response)
81
+ expect(subject.find_many({})).to be_a Blacklight::Solr::Response
82
+ end
83
+ end
84
+
85
+ context 'without a configured fetch_many_documents_path' do
86
+ it 'falls back to the search path' do
87
+ blacklight_config.solr_path = 'xyz'
88
+ allow(subject.connection).to receive(:send_and_receive).with('xyz', anything).and_return(mock_response)
89
+ expect(subject.find_many({})).to be_a Blacklight::Solr::Response
90
+ end
73
91
  end
74
92
  end
75
93
 
@@ -77,24 +95,24 @@ RSpec.describe Blacklight::Solr::Repository, :api do
77
95
  it "uses the search-specific solr path" do
78
96
  blacklight_config.solr_path = 'xyz'
79
97
  allow(subject.connection).to receive(:send_and_receive).with('xyz', anything).and_return(mock_response)
80
- expect(subject.search({})).to be_a_kind_of Blacklight::Solr::Response
98
+ expect(subject.search({})).to be_a Blacklight::Solr::Response
81
99
  end
82
100
 
83
101
  it "uses the default solr path" do
84
102
  allow(subject.connection).to receive(:send_and_receive).with('select', anything).and_return(mock_response)
85
- expect(subject.search({})).to be_a_kind_of Blacklight::Solr::Response
103
+ expect(subject.search({})).to be_a Blacklight::Solr::Response
86
104
  end
87
105
 
88
106
  it "uses a default :qt param" do
89
107
  blacklight_config.qt = 'xyz'
90
108
  allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { qt: 'xyz' })).and_return(mock_response)
91
- expect(subject.search({})).to be_a_kind_of Blacklight::Solr::Response
109
+ expect(subject.search({})).to be_a Blacklight::Solr::Response
92
110
  end
93
111
 
94
112
  it "uses the provided :qt param" do
95
113
  blacklight_config.qt = 'xyz'
96
114
  allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { qt: 'abc' })).and_return(mock_response)
97
- expect(subject.search(qt: 'abc')).to be_a_kind_of Blacklight::Solr::Response
115
+ expect(subject.search(qt: 'abc')).to be_a Blacklight::Solr::Response
98
116
  end
99
117
 
100
118
  it "preserves the class of the incoming params" do
@@ -103,8 +121,8 @@ RSpec.describe Blacklight::Solr::Repository, :api do
103
121
  allow(subject.connection).to receive(:send_and_receive).with('select', anything).and_return(mock_response)
104
122
 
105
123
  response = subject.search(search_params)
106
- expect(response).to be_a_kind_of Blacklight::Solr::Response
107
- expect(response.params).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
124
+ expect(response).to be_a Blacklight::Solr::Response
125
+ expect(response.params).to be_a ActiveSupport::HashWithIndifferentAccess
108
126
  end
109
127
 
110
128
  it "calls send_and_receive with params returned from request factory method" do
@@ -247,7 +247,7 @@ RSpec.describe Blacklight::Solr::Response::Facets, :api do
247
247
  it "converts the query facets into a double RSolr FacetField" do
248
248
  field = subject.aggregations['my_query_facet_field']
249
249
 
250
- expect(field).to be_a_kind_of Blacklight::Solr::Response::Facets::FacetField
250
+ expect(field).to be_a Blacklight::Solr::Response::Facets::FacetField
251
251
 
252
252
  expect(field.name).to eq 'my_query_facet_field'
253
253
  expect(field.items.size).to eq 3
@@ -316,7 +316,7 @@ RSpec.describe Blacklight::Solr::Response::Facets, :api do
316
316
  it "converts the pivot facet into a double RSolr FacetField" do
317
317
  field = subject.aggregations['my_pivot_facet_field']
318
318
 
319
- expect(field).to be_a_kind_of Blacklight::Solr::Response::Facets::FacetField
319
+ expect(field).to be_a Blacklight::Solr::Response::Facets::FacetField
320
320
 
321
321
  expect(field.name).to eq 'my_pivot_facet_field'
322
322
 
@@ -37,7 +37,7 @@ RSpec.describe Blacklight::Solr::Response::Group, :api do
37
37
  describe "#docs" do
38
38
  it "is a list of SolrDocuments" do
39
39
  subject.docs.each do |doc|
40
- expect(doc).to be_a_kind_of SolrDocument
40
+ expect(doc).to be_a SolrDocument
41
41
  end
42
42
 
43
43
  expect(subject.docs.first.id).to eq 1
@@ -79,7 +79,7 @@ RSpec.describe Blacklight::Solr::Response, :api do
79
79
  if Kaminari.config.respond_to? :max_pages
80
80
  expect(r.max_pages).to be_nil
81
81
  end
82
- expect(r).to be_a_kind_of Kaminari::PageScopeMethods
82
+ expect(r).to be_a Kaminari::PageScopeMethods
83
83
  end
84
84
 
85
85
  describe "FacetItem" do
@@ -101,7 +101,7 @@ RSpec.describe Blacklight::Solr::Response, :api do
101
101
 
102
102
  expect(item.hits).to eq 15
103
103
  expect(item.value).to eq 'value'
104
- expect(item).to be_a_kind_of(OpenStruct)
104
+ expect(item).to be_a(OpenStruct)
105
105
  end
106
106
 
107
107
  it "provides a label accessor" do
@@ -591,7 +591,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, :api do
591
591
 
592
592
  subject.add_facet_fq_to_solr(solr_parameters)
593
593
 
594
- expect(solr_parameters[:fq]).to be_a_kind_of Array
594
+ expect(solr_parameters[:fq]).to be_a Array
595
595
  end
596
596
 
597
597
  context "facet not defined in config" do
@@ -30,7 +30,7 @@ RSpec.describe Bookmark do
30
30
 
31
31
  describe "#document" do
32
32
  it "is a SolrDocument with just an id field" do
33
- expect(subject.document).to be_a_kind_of SolrDocument
33
+ expect(subject.document).to be_a SolrDocument
34
34
  expect(subject.document.id).to eq 'u001'
35
35
  end
36
36
  end
@@ -50,14 +50,14 @@ RSpec.describe Blacklight::DocumentPresenter do
50
50
 
51
51
  describe '#thumbnail' do
52
52
  it 'returns a thumbnail presenter' do
53
- expect(presenter.thumbnail).to be_a_kind_of(Blacklight::ThumbnailPresenter)
53
+ expect(presenter.thumbnail).to be_a(Blacklight::ThumbnailPresenter)
54
54
  end
55
55
 
56
56
  it 'use the configured thumbnail presenter' do
57
57
  custom_presenter_class = Class.new(Blacklight::ThumbnailPresenter)
58
58
  blacklight_config.index.thumbnail_presenter = custom_presenter_class
59
59
 
60
- expect(presenter.thumbnail).to be_a_kind_of custom_presenter_class
60
+ expect(presenter.thumbnail).to be_a custom_presenter_class
61
61
  end
62
62
  end
63
63
 
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Blacklight::FacetCheckboxItemPresenter, type: :presenter do
6
+ subject(:presenter) do
7
+ described_class.new(facet_item, facet_config, view_context, facet_field, search_state)
8
+ end
9
+
10
+ let(:facet_item) { Blacklight::Solr::Response::Facets::FacetItem.new(value: 'Book', hits: 30) }
11
+ let(:facet_config) { Blacklight::Configuration::FacetField.new(key: 'format') }
12
+ let(:view_context) { controller.view_context }
13
+ let(:filter_field) { Blacklight::SearchState::FilterField.new(facet_config, search_state) }
14
+ let(:facet_field) { Blacklight::Solr::Response::Facets::FacetField.new('format', [facet_item]) }
15
+ let(:params) { ActionController::Parameters.new(f_inclusive: { format: ["Book"] }) }
16
+ let(:blacklight_config) { Blacklight::Configuration.new }
17
+ let(:search_state) { Blacklight::SearchState.new(params, blacklight_config) }
18
+
19
+ before do
20
+ blacklight_config.add_facet_field 'format'
21
+ end
22
+
23
+ describe '#selected?' do
24
+ subject { presenter.selected? }
25
+
26
+ context 'with a matching inclusive filter' do
27
+ it { is_expected.to be true }
28
+ end
29
+
30
+ context 'with an inclusive filter that does not match' do
31
+ let(:params) { ActionController::Parameters.new(f_inclusive: { format: ["Manuscript"] }) }
32
+
33
+ it { is_expected.to be false }
34
+ end
35
+
36
+ context 'with a matching exclusive filter' do
37
+ let(:params) { ActionController::Parameters.new(f: { format: ["Book"] }) }
38
+
39
+ it { is_expected.to be false }
40
+ end
41
+ end
42
+ end
@@ -51,6 +51,20 @@ RSpec.describe Blacklight::FacetFieldPresenter, type: :presenter do
51
51
  it "is false if no value for facet is selected" do
52
52
  expect(presenter.active?).to be false
53
53
  end
54
+
55
+ context 'with an advanced search action' do
56
+ before { controller.params[:action] = 'advanced_search' }
57
+
58
+ it "is true if any value for inclusive facet is selected" do
59
+ search_state.params[:f_inclusive] = ActiveSupport::HashWithIndifferentAccess.new(key: [1])
60
+ expect(presenter.active?).to be true
61
+ end
62
+
63
+ it "is false if no value for inclusive facet is selected" do
64
+ search_state.params[:f] = ActiveSupport::HashWithIndifferentAccess.new(key: [1])
65
+ expect(presenter.active?).to be false
66
+ end
67
+ end
54
68
  end
55
69
 
56
70
  describe '#in_modal?' do
@@ -6,11 +6,11 @@ RSpec.describe 'GET /catalog/suggest' do
6
6
  it 'returns suggestions' do
7
7
  get '/catalog/suggest?q=new'
8
8
  expect(response.body).to eq <<-RESULT
9
- <li role="option"><span>new jersey</span></li>
10
- <li role="option"><span>new jersey bridgeton biography</span></li>
11
- <li role="option"><span>new jersey bridgeton history</span></li>
12
- <li role="option"><span>new york</span></li>
13
- <li role="option"><span>nuwākshūṭ</span></li>
9
+ <li role="option" class="dropdown-item"><span>new jersey</span></li>
10
+ <li role="option" class="dropdown-item"><span>new jersey bridgeton biography</span></li>
11
+ <li role="option" class="dropdown-item"><span>new jersey bridgeton history</span></li>
12
+ <li role="option" class="dropdown-item"><span>new york</span></li>
13
+ <li role="option" class="dropdown-item"><span>nuwākshūṭ</span></li>
14
14
  RESULT
15
15
  end
16
16
  end
@@ -77,7 +77,7 @@ RSpec.describe Blacklight::SearchService, :api do
77
77
  end
78
78
 
79
79
  it "returns a grouped response" do
80
- expect(service.search_results).to be_a_kind_of Blacklight::Solr::Response::GroupResponse
80
+ expect(service.search_results).to be_a Blacklight::Solr::Response::GroupResponse
81
81
  end
82
82
  end
83
83
 
@@ -93,7 +93,7 @@ RSpec.describe Blacklight::SearchService, :api do
93
93
 
94
94
  it "returns a grouped response" do
95
95
  solr_response = service.search_results
96
- expect(solr_response).to be_a_kind_of Blacklight::Solr::Response::GroupResponse
96
+ expect(solr_response).to be_a Blacklight::Solr::Response::GroupResponse
97
97
  expect(solr_response.group_field).to eq "title_si"
98
98
  end
99
99
  end
@@ -39,7 +39,7 @@ class TestAppGenerator < Rails::Generators::Base
39
39
  src_template = File.join(Blacklight::Engine.root, 'app', 'components', 'blacklight', 'top_navbar_component.html.erb')
40
40
  target_template = File.join('app', 'components', 'blacklight', 'top_navbar_component.html.erb')
41
41
  create_file(target_template) do
42
- File.read(src_template).gsub('role="navigation"', 'role="navigation" data-template-override="top_navbar_component"')
42
+ File.read(src_template).gsub('aria-label', 'data-template-override="top_navbar_component" aria-label')
43
43
  end
44
44
  end
45
45
  end
@@ -21,18 +21,18 @@ def system_with_error_handling(*args)
21
21
  end
22
22
 
23
23
  def with_solr(&block)
24
- # We're being invoked by the app entrypoint script and solr is already up via docker-compose
24
+ # We're being invoked by the app entrypoint script and solr is already up via docker compose
25
25
  if ENV['SOLR_ENV'] == 'docker-compose'
26
26
  yield
27
- elsif system('docker-compose -v')
28
- # We're not running docker-compose up but still want to use a docker instance of solr.
27
+ elsif system('docker compose -v')
28
+ # We're not running `docker compose up' but still want to use a docker instance of solr.
29
29
  begin
30
30
  puts "Starting Solr"
31
- system_with_error_handling "docker-compose up -d solr"
31
+ system_with_error_handling "docker compose up -d solr"
32
32
  yield
33
33
  ensure
34
34
  puts "Stopping Solr"
35
- system_with_error_handling "docker-compose stop solr"
35
+ system_with_error_handling "docker compose stop solr"
36
36
  end
37
37
  else
38
38
  SolrWrapper.wrap do |solr|
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: 8.3.0
4
+ version: 8.4.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: 2024-06-07 00:00:00.000000000 Z
20
+ date: 2024-09-18 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -129,6 +129,20 @@ dependencies:
129
129
  - - "<"
130
130
  - !ruby/object:Gem::Version
131
131
  version: '4'
132
+ - !ruby/object:Gem::Dependency
133
+ name: zeitwerk
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ type: :runtime
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
132
146
  - !ruby/object:Gem::Dependency
133
147
  name: rsolr
134
148
  requirement: !ruby/object:Gem::Requirement
@@ -303,6 +317,48 @@ dependencies:
303
317
  - - ">="
304
318
  - !ruby/object:Gem::Version
305
319
  version: '0'
320
+ - !ruby/object:Gem::Dependency
321
+ name: rubocop-capybara
322
+ requirement: !ruby/object:Gem::Requirement
323
+ requirements:
324
+ - - ">="
325
+ - !ruby/object:Gem::Version
326
+ version: '0'
327
+ type: :development
328
+ prerelease: false
329
+ version_requirements: !ruby/object:Gem::Requirement
330
+ requirements:
331
+ - - ">="
332
+ - !ruby/object:Gem::Version
333
+ version: '0'
334
+ - !ruby/object:Gem::Dependency
335
+ name: rubocop-rspec_rails
336
+ requirement: !ruby/object:Gem::Requirement
337
+ requirements:
338
+ - - ">="
339
+ - !ruby/object:Gem::Version
340
+ version: '0'
341
+ type: :development
342
+ prerelease: false
343
+ version_requirements: !ruby/object:Gem::Requirement
344
+ requirements:
345
+ - - ">="
346
+ - !ruby/object:Gem::Version
347
+ version: '0'
348
+ - !ruby/object:Gem::Dependency
349
+ name: rubocop-factory_bot
350
+ requirement: !ruby/object:Gem::Requirement
351
+ requirements:
352
+ - - ">="
353
+ - !ruby/object:Gem::Version
354
+ version: '0'
355
+ type: :development
356
+ prerelease: false
357
+ version_requirements: !ruby/object:Gem::Requirement
358
+ requirements:
359
+ - - ">="
360
+ - !ruby/object:Gem::Version
361
+ version: '0'
306
362
  - !ruby/object:Gem::Dependency
307
363
  name: i18n-tasks
308
364
  requirement: !ruby/object:Gem::Requirement
@@ -409,6 +465,8 @@ files:
409
465
  - app/components/blacklight/document/group_component.rb
410
466
  - app/components/blacklight/document/more_like_this_component.html.erb
411
467
  - app/components/blacklight/document/more_like_this_component.rb
468
+ - app/components/blacklight/document/page_header_component.html.erb
469
+ - app/components/blacklight/document/page_header_component.rb
412
470
  - app/components/blacklight/document/show_tools_component.html.erb
413
471
  - app/components/blacklight/document/show_tools_component.rb
414
472
  - app/components/blacklight/document/sidebar_component.html.erb
@@ -440,9 +498,11 @@ files:
440
498
  - app/components/blacklight/header_component.html.erb
441
499
  - app/components/blacklight/header_component.rb
442
500
  - app/components/blacklight/hidden_search_state_component.rb
501
+ - app/components/blacklight/icons/bookmark_icon_component.rb
443
502
  - app/components/blacklight/icons/icon_component.rb
444
503
  - app/components/blacklight/icons/legacy_icon_component.rb
445
504
  - app/components/blacklight/icons/list_component.rb
505
+ - app/components/blacklight/icons/remove_component.rb
446
506
  - app/components/blacklight/icons/search_component.rb
447
507
  - app/components/blacklight/metadata_field_component.html.erb
448
508
  - app/components/blacklight/metadata_field_component.rb
@@ -461,6 +521,8 @@ files:
461
521
  - app/components/blacklight/response/view_type_button_component.rb
462
522
  - app/components/blacklight/response/view_type_component.html.erb
463
523
  - app/components/blacklight/response/view_type_component.rb
524
+ - app/components/blacklight/search/per_page_component.html.erb
525
+ - app/components/blacklight/search/per_page_component.rb
464
526
  - app/components/blacklight/search/sidebar_component.html.erb
465
527
  - app/components/blacklight/search/sidebar_component.rb
466
528
  - app/components/blacklight/search_bar_component.html.erb
@@ -475,7 +537,10 @@ files:
475
537
  - app/components/blacklight/search_history_constraint_layout_component.rb
476
538
  - app/components/blacklight/search_navbar_component.html.erb
477
539
  - app/components/blacklight/search_navbar_component.rb
540
+ - app/components/blacklight/skip_link_component.html.erb
541
+ - app/components/blacklight/skip_link_component.rb
478
542
  - app/components/blacklight/start_over_button_component.rb
543
+ - app/components/blacklight/system/dropdown_button_component.rb
479
544
  - app/components/blacklight/system/dropdown_component.html.erb
480
545
  - app/components/blacklight/system/dropdown_component.rb
481
546
  - app/components/blacklight/system/flash_message_component.html.erb
@@ -536,6 +601,7 @@ files:
536
601
  - app/models/solr_document.rb
537
602
  - app/presenters/blacklight/clause_presenter.rb
538
603
  - app/presenters/blacklight/document_presenter.rb
604
+ - app/presenters/blacklight/facet_checkbox_item_presenter.rb
539
605
  - app/presenters/blacklight/facet_field_presenter.rb
540
606
  - app/presenters/blacklight/facet_grouped_item_presenter.rb
541
607
  - app/presenters/blacklight/facet_item_pivot_presenter.rb
@@ -646,6 +712,7 @@ files:
646
712
  - app/views/shared/_sitelinks_search_box.html.erb
647
713
  - app/views/shared/_user_util_links.html.erb
648
714
  - blacklight.gemspec
715
+ - compose.yaml
649
716
  - config/i18n-tasks.yml
650
717
  - config/importmap.rb
651
718
  - config/locales/blacklight.ar.yml
@@ -664,7 +731,6 @@ files:
664
731
  - db/migrate/20140202020201_create_searches.rb
665
732
  - db/migrate/20140202020202_create_bookmarks.rb
666
733
  - db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb
667
- - docker-compose.yml
668
734
  - lib/blacklight.rb
669
735
  - lib/blacklight/abstract_repository.rb
670
736
  - lib/blacklight/component.rb
@@ -757,6 +823,7 @@ files:
757
823
  - spec/components/blacklight/constraints_component_spec.rb
758
824
  - spec/components/blacklight/document/action_component_spec.rb
759
825
  - spec/components/blacklight/document/group_component_spec.rb
826
+ - spec/components/blacklight/document/page_header_component_spec.rb
760
827
  - spec/components/blacklight/document/sidebar_component_spec.rb
761
828
  - spec/components/blacklight/document_component_spec.rb
762
829
  - spec/components/blacklight/document_metadata_component_spec.rb
@@ -767,6 +834,7 @@ files:
767
834
  - spec/components/blacklight/facet_item_pivot_component_spec.rb
768
835
  - spec/components/blacklight/header_component_spec.rb
769
836
  - spec/components/blacklight/hidden_search_state_component_spec.rb
837
+ - spec/components/blacklight/icons/icon_component_spec.rb
770
838
  - spec/components/blacklight/metadata_field_component_spec.rb
771
839
  - spec/components/blacklight/response/pagination_component_spec.rb
772
840
  - spec/components/blacklight/response/spellcheck_component_spec.rb
@@ -858,6 +926,7 @@ files:
858
926
  - spec/models/solr_document_spec.rb
859
927
  - spec/presenters/blacklight/clause_presenter_spec.rb
860
928
  - spec/presenters/blacklight/document_presenter_spec.rb
929
+ - spec/presenters/blacklight/facet_checkbox_item_presenter_spec.rb
861
930
  - spec/presenters/blacklight/facet_field_presenter_spec.rb
862
931
  - spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb
863
932
  - spec/presenters/blacklight/facet_item_presenter_spec.rb
@@ -925,7 +994,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
925
994
  - !ruby/object:Gem::Version
926
995
  version: '0'
927
996
  requirements: []
928
- rubygems_version: 3.5.10
997
+ rubygems_version: 3.5.18
929
998
  signing_key:
930
999
  specification_version: 4
931
1000
  summary: Blacklight provides a discovery interface for any Solr (http://lucene.apache.org/solr)
@@ -936,6 +1005,7 @@ test_files:
936
1005
  - spec/components/blacklight/constraints_component_spec.rb
937
1006
  - spec/components/blacklight/document/action_component_spec.rb
938
1007
  - spec/components/blacklight/document/group_component_spec.rb
1008
+ - spec/components/blacklight/document/page_header_component_spec.rb
939
1009
  - spec/components/blacklight/document/sidebar_component_spec.rb
940
1010
  - spec/components/blacklight/document_component_spec.rb
941
1011
  - spec/components/blacklight/document_metadata_component_spec.rb
@@ -946,6 +1016,7 @@ test_files:
946
1016
  - spec/components/blacklight/facet_item_pivot_component_spec.rb
947
1017
  - spec/components/blacklight/header_component_spec.rb
948
1018
  - spec/components/blacklight/hidden_search_state_component_spec.rb
1019
+ - spec/components/blacklight/icons/icon_component_spec.rb
949
1020
  - spec/components/blacklight/metadata_field_component_spec.rb
950
1021
  - spec/components/blacklight/response/pagination_component_spec.rb
951
1022
  - spec/components/blacklight/response/spellcheck_component_spec.rb
@@ -1037,6 +1108,7 @@ test_files:
1037
1108
  - spec/models/solr_document_spec.rb
1038
1109
  - spec/presenters/blacklight/clause_presenter_spec.rb
1039
1110
  - spec/presenters/blacklight/document_presenter_spec.rb
1111
+ - spec/presenters/blacklight/facet_checkbox_item_presenter_spec.rb
1040
1112
  - spec/presenters/blacklight/facet_field_presenter_spec.rb
1041
1113
  - spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb
1042
1114
  - spec/presenters/blacklight/facet_item_presenter_spec.rb