blacklight 7.17.2 → 7.19.2

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/app/assets/javascripts/blacklight/blacklight.js +1 -2
  4. data/app/assets/stylesheets/blacklight/_balanced_list.scss +2 -2
  5. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +1 -1
  6. data/app/assets/stylesheets/blacklight/_constraints.scss +2 -2
  7. data/app/assets/stylesheets/blacklight/_controls.scss +2 -1
  8. data/app/assets/stylesheets/blacklight/_facets.scss +3 -1
  9. data/app/assets/stylesheets/blacklight/_header.scss +6 -1
  10. data/app/components/blacklight/constraint_layout_component.html.erb +1 -1
  11. data/app/components/blacklight/constraints_component.html.erb +2 -2
  12. data/app/components/blacklight/content_areas_shim.rb +2 -1
  13. data/app/components/blacklight/document/thumbnail_component.html.erb +3 -3
  14. data/app/components/blacklight/document/thumbnail_component.rb +11 -3
  15. data/app/components/blacklight/document_component.rb +7 -7
  16. data/app/components/blacklight/facet_field_component.html.erb +3 -1
  17. data/app/components/blacklight/facet_field_no_layout_component.rb +1 -1
  18. data/app/components/blacklight/facet_item_component.rb +2 -2
  19. data/app/components/blacklight/facet_item_pivot_component.rb +2 -2
  20. data/app/components/blacklight/metadata_field_layout_component.rb +1 -1
  21. data/app/components/blacklight/response/facet_group_component.html.erb +2 -0
  22. data/app/components/blacklight/response/view_type_component.html.erb +1 -1
  23. data/app/components/blacklight/search_bar_component.html.erb +3 -3
  24. data/app/components/blacklight/system/dropdown_component.rb +1 -1
  25. data/app/components/blacklight/system/flash_message_component.html.erb +1 -1
  26. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  27. data/app/helpers/blacklight/component_helper_behavior.rb +1 -1
  28. data/app/helpers/blacklight/render_partials_helper_behavior.rb +5 -1
  29. data/app/javascript/blacklight/modal.js +1 -1
  30. data/app/views/blacklight/nav/_bookmark.html.erb +1 -1
  31. data/app/views/bookmarks/index.html.erb +1 -1
  32. data/app/views/catalog/_constraints.html.erb +2 -2
  33. data/app/views/catalog/_document.html.erb +4 -3
  34. data/app/views/catalog/_document_list.html.erb +3 -2
  35. data/app/views/catalog/_home_text.html.erb +1 -1
  36. data/app/views/catalog/_per_page_widget.html.erb +1 -1
  37. data/app/views/catalog/_search_results.html.erb +2 -2
  38. data/app/views/search_history/index.html.erb +1 -1
  39. data/app/views/shared/_header_navbar.html.erb +1 -1
  40. data/config/locales/blacklight.ar.yml +2 -2
  41. data/config/locales/blacklight.ca.yml +2 -2
  42. data/config/locales/blacklight.de.yml +2 -2
  43. data/config/locales/blacklight.en.yml +2 -2
  44. data/config/locales/blacklight.es.yml +2 -2
  45. data/config/locales/blacklight.fr.yml +2 -2
  46. data/config/locales/blacklight.hu.yml +2 -2
  47. data/config/locales/blacklight.it.yml +2 -2
  48. data/config/locales/blacklight.nl.yml +2 -2
  49. data/config/locales/blacklight.pt-BR.yml +1 -1
  50. data/config/locales/blacklight.sq.yml +2 -2
  51. data/config/locales/blacklight.zh.yml +2 -2
  52. data/lib/blacklight/configuration.rb +7 -1
  53. data/lib/blacklight/configuration/view_config.rb +3 -1
  54. data/lib/blacklight/nested_open_struct_with_hash_access.rb +33 -14
  55. data/lib/blacklight/open_struct_with_hash_access.rb +1 -1
  56. data/lib/blacklight/search_builder.rb +1 -0
  57. data/lib/blacklight/solr/request.rb +10 -7
  58. data/lib/blacklight/solr/search_builder_behavior.rb +28 -16
  59. data/lib/generators/blacklight/install_generator.rb +5 -5
  60. data/lib/generators/blacklight/solr_generator.rb +4 -2
  61. data/lib/generators/blacklight/user_generator.rb +4 -2
  62. data/spec/components/blacklight/constraint_layout_component_spec.rb +3 -7
  63. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +3 -7
  64. data/spec/components/blacklight/facet_field_list_component_spec.rb +3 -7
  65. data/spec/components/blacklight/facet_item_component_spec.rb +2 -6
  66. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +3 -7
  67. data/spec/components/blacklight/hidden_search_state_component_spec.rb +7 -8
  68. data/spec/components/blacklight/metadata_field_component_spec.rb +4 -8
  69. data/spec/features/facets_spec.rb +2 -2
  70. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +9 -10
  71. data/spec/helpers/blacklight_helper_spec.rb +20 -2
  72. data/spec/helpers/catalog_helper_spec.rb +1 -1
  73. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +36 -0
  74. data/spec/models/blacklight/configuration_spec.rb +10 -0
  75. data/spec/models/blacklight/solr/request_spec.rb +0 -1
  76. data/spec/models/blacklight/solr/search_builder_spec.rb +23 -1
  77. data/spec/services/blacklight/search_service_spec.rb +1 -1
  78. data/spec/spec_helper.rb +1 -0
  79. data/spec/support/view_component_capybara_test_helpers.rb +8 -0
  80. data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -1
  81. data/spec/views/catalog/_document.html.erb_spec.rb +9 -0
  82. data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
  83. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +2 -2
  84. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +5 -5
  85. metadata +4 -2
@@ -621,4 +621,14 @@ RSpec.describe "Blacklight::Configuration", api: true do
621
621
  end
622
622
  end
623
623
  end
624
+
625
+ describe '#freeze' do
626
+ it 'freezes the configuration' do
627
+ config.freeze
628
+
629
+ expect(config.a).to be_nil
630
+ expect { config.a = '123' }.to raise_error(FrozenError)
631
+ expect { config.view.a = '123' }.to raise_error(FrozenError)
632
+ end
633
+ end
624
634
  end
@@ -16,7 +16,6 @@ RSpec.describe Blacklight::Solr::Request, api: true do
16
16
  subject['spellcheck'] = "a"
17
17
  subject['spellcheck.q'] = "fleece"
18
18
  subject['f.title_facet.facet.limit'] = "vest"
19
- subject['facet.field'] = []
20
19
  end
21
20
 
22
21
  it "accepts valid parameters" do
@@ -29,6 +29,20 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
29
29
  end
30
30
  end
31
31
 
32
+ context 'with merged parameters from the defaults + the search field' do
33
+ before do
34
+ blacklight_config.default_solr_params = { json: { whatever: [1, 2, 3] } }
35
+ blacklight_config.search_fields['all_fields'].solr_parameters = { json: { and_also: [4, 5, 6] } }
36
+ end
37
+
38
+ let(:user_params) { { search_field: 'all_fields' } }
39
+
40
+ it 'deep merges hash values' do
41
+ expect(subject.to_hash.dig(:json, :whatever)).to eq [1, 2, 3]
42
+ expect(subject.to_hash.dig(:json, :and_also)).to eq [4, 5, 6]
43
+ end
44
+ end
45
+
32
46
  context "with a complex parameter environment" do
33
47
  subject { search_builder.with(user_params).processed_parameters }
34
48
 
@@ -304,7 +318,6 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
304
318
 
305
319
  it "does not include weird keys not in field definition" do
306
320
  expect(subject[:phrase_filters]).to be_nil
307
- expect(subject[:fq]).to eq []
308
321
  expect(subject[:commit]).to be_nil
309
322
  expect(subject[:action]).to be_nil
310
323
  expect(subject[:controller]).to be_nil
@@ -800,4 +813,13 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
800
813
  expect(subject.to_hash.with_indifferent_access.dig(:json, :query, :bool, :must, 1, :edismax, :qf)).to eq '${author_qf}'
801
814
  end
802
815
  end
816
+
817
+ describe '#where' do
818
+ let(:user_params) { {} }
819
+
820
+ it 'adds additional query filters on the search' do
821
+ subject.where(id: [1, 2, 3])
822
+ expect(subject.to_hash).to include q: '{!lucene}id:(1 OR 2 OR 3)'
823
+ end
824
+ end
803
825
  end
@@ -477,7 +477,7 @@ RSpec.describe Blacklight::SearchService, api: true do
477
477
  end
478
478
 
479
479
  before do
480
- blacklight_config.view.opensearch.title_field = :field
480
+ blacklight_config.view.opensearch(title_field: :field)
481
481
  allow(repository).to receive(:search).and_return(mock_response)
482
482
  end
483
483
 
data/spec/spec_helper.rb CHANGED
@@ -62,6 +62,7 @@ RSpec.configure do |config|
62
62
  config.infer_spec_type_from_file_location!
63
63
  config.include PresenterTestHelpers, type: :presenter
64
64
  config.include ViewComponent::TestHelpers, type: :component
65
+ config.include ViewComponentCapybaraTestHelpers, type: :component
65
66
 
66
67
  config.include(ControllerLevelHelpers, type: :helper)
67
68
  config.before(:each, type: :helper) { initialize_controller_helpers(helper) }
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViewComponentCapybaraTestHelpers
4
+ # Work around for https://github.com/teamcapybara/capybara/issues/2466
5
+ def render_inline_to_capybara_node(component)
6
+ Capybara::Node::Simple.new(render_inline(component).to_s)
7
+ end
8
+ end
@@ -3,7 +3,7 @@
3
3
  RSpec.describe "catalog/constraints" do
4
4
  let :blacklight_config do
5
5
  Blacklight::Configuration.new do |config|
6
- config.view.xyz
6
+ config.view.xyz({})
7
7
  end
8
8
  end
9
9
 
@@ -46,4 +46,13 @@ RSpec.describe "catalog/_document" do
46
46
  expect(rendered).to have_selector 'article.document header', text: '22. xyz'
47
47
  expect(rendered).not_to match(/partial/)
48
48
  end
49
+
50
+ it 'renders the partial using a provided view config' do
51
+ view_config = Blacklight::Configuration::ViewConfig.new partials: %w[a]
52
+ stub_template "catalog/_a_default.html.erb" => "partial"
53
+
54
+ render partial: "catalog/document", locals: { document: document, document_counter: 1, view_config: view_config }
55
+
56
+ expect(rendered).to match(/partial/)
57
+ end
49
58
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  RSpec.describe "catalog/_document_list", type: :view do
4
4
  before do
5
- allow(view).to receive_messages(document_index_view_type: "some-view", documents: [])
5
+ allow(view).to receive_messages(document_index_view_type: "some-view", documents: [], blacklight_config: nil)
6
6
  end
7
7
 
8
8
  it "includes a class for the current view" do
@@ -27,14 +27,14 @@ RSpec.describe "catalog/facet_layout" do
27
27
 
28
28
  it "is collapsable" do
29
29
  render partial: 'catalog/facet_layout', locals: { facet_field: facet_field }
30
- expect(rendered).to have_selector 'button.collapsed[data-toggle="collapse"][aria-expanded="false"]'
30
+ expect(rendered).to have_selector 'button.collapsed[data-toggle="collapse"][data-bs-toggle="collapse"][aria-expanded="false"]'
31
31
  expect(rendered).to have_selector '.collapse .card-body'
32
32
  end
33
33
 
34
34
  it "is configured to be open by default" do
35
35
  allow(facet_field).to receive_messages(collapse: false)
36
36
  render partial: 'catalog/facet_layout', locals: { facet_field: facet_field }
37
- expect(rendered).to have_selector 'button[data-toggle="collapse"][aria-expanded="true"]'
37
+ expect(rendered).to have_selector 'button[data-toggle="collapse"][data-bs-toggle="collapse"][aria-expanded="true"]'
38
38
  expect(rendered).not_to have_selector '.card-header.collapsed'
39
39
  expect(rendered).to have_selector '.collapse.show .card-body'
40
40
  end
@@ -20,9 +20,9 @@ RSpec.describe "catalog/_view_type_group" do
20
20
  it "displays the group" do
21
21
  blacklight_config.configure do |config|
22
22
  config.view.delete(:list)
23
- config.view.a.icon = :list
24
- config.view.b.icon = :list
25
- config.view.c.icon = :list
23
+ config.view.a(icon: :list)
24
+ config.view.b(icon: :list)
25
+ config.view.c(icon: :list)
26
26
  end
27
27
  render partial: 'catalog/view_type_group'
28
28
  expect(rendered).to have_selector('.btn-group.view-type-group')
@@ -37,8 +37,8 @@ RSpec.describe "catalog/_view_type_group" do
37
37
  it "sets the current view to 'active'" do
38
38
  blacklight_config.configure do |config|
39
39
  config.view.delete(:list)
40
- config.view.a.icon = :list
41
- config.view.b.icon = :list
40
+ config.view.a(icon: :list)
41
+ config.view.b(icon: :list)
42
42
  end
43
43
  render partial: 'catalog/view_type_group'
44
44
  expect(rendered).to have_selector('.active', text: 'a')
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.17.2
4
+ version: 7.19.2
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: 2021-04-22 00:00:00.000000000 Z
20
+ date: 2021-05-25 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -849,6 +849,7 @@ files:
849
849
  - spec/support/features.rb
850
850
  - spec/support/features/session_helpers.rb
851
851
  - spec/support/presenter_test_helpers.rb
852
+ - spec/support/view_component_capybara_test_helpers.rb
852
853
  - spec/test_app_templates/Gemfile.extra
853
854
  - spec/test_app_templates/lib/generators/test_app_generator.rb
854
855
  - spec/views/catalog/_constraints.html.erb_spec.rb
@@ -1020,6 +1021,7 @@ test_files:
1020
1021
  - spec/support/features.rb
1021
1022
  - spec/support/features/session_helpers.rb
1022
1023
  - spec/support/presenter_test_helpers.rb
1024
+ - spec/support/view_component_capybara_test_helpers.rb
1023
1025
  - spec/test_app_templates/Gemfile.extra
1024
1026
  - spec/test_app_templates/lib/generators/test_app_generator.rb
1025
1027
  - spec/views/catalog/_constraints.html.erb_spec.rb