blacklight 7.12.0 → 7.14.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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +109 -0
  3. data/.rubocop.yml +3 -0
  4. data/README.md +1 -1
  5. data/VERSION +1 -1
  6. data/app/assets/javascripts/blacklight/blacklight.js +4 -2
  7. data/app/components/blacklight/constraints_component.rb +14 -6
  8. data/app/components/blacklight/document/thumbnail_component.html.erb +1 -1
  9. data/app/components/blacklight/document/thumbnail_component.rb +1 -1
  10. data/app/components/blacklight/document_component.html.erb +1 -0
  11. data/app/components/blacklight/document_component.rb +14 -1
  12. data/app/components/blacklight/facet_field_component.html.erb +1 -0
  13. data/app/components/blacklight/facet_field_pagination_component.html.erb +4 -4
  14. data/app/components/blacklight/facet_field_pagination_component.rb +0 -4
  15. data/app/components/blacklight/hidden_search_state_component.rb +54 -0
  16. data/app/components/blacklight/search_bar_component.html.erb +10 -8
  17. data/app/components/blacklight/search_bar_component.rb +14 -1
  18. data/app/controllers/concerns/blacklight/catalog.rb +3 -3
  19. data/app/controllers/concerns/blacklight/search_context.rb +2 -2
  20. data/app/controllers/concerns/blacklight/searchable.rb +1 -1
  21. data/app/helpers/blacklight/blacklight_helper_behavior.rb +1 -1
  22. data/app/helpers/blacklight/component_helper_behavior.rb +1 -1
  23. data/app/helpers/blacklight/configuration_helper_behavior.rb +3 -9
  24. data/app/helpers/blacklight/facets_helper_behavior.rb +8 -2
  25. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +2 -38
  26. data/app/helpers/blacklight/icon_helper_behavior.rb +1 -1
  27. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +7 -5
  28. data/app/helpers/blacklight/render_partials_helper_behavior.rb +2 -2
  29. data/app/javascript/blacklight/button_focus.js +1 -0
  30. data/app/javascript/blacklight/modal.js +10 -4
  31. data/app/presenters/blacklight/document_presenter.rb +4 -0
  32. data/app/presenters/blacklight/facet_item_presenter.rb +7 -3
  33. data/app/presenters/blacklight/index_presenter.rb +2 -2
  34. data/app/presenters/blacklight/rendering/link_to_facet.rb +3 -1
  35. data/app/presenters/blacklight/show_presenter.rb +0 -4
  36. data/app/services/blacklight/search_service.rb +13 -11
  37. data/app/values/blacklight/types.rb +1 -1
  38. data/app/views/bookmarks/_tools.html.erb +1 -1
  39. data/app/views/catalog/_search_form.html.erb +1 -1
  40. data/app/views/catalog/index.json.jbuilder +3 -1
  41. data/blacklight.gemspec +5 -4
  42. data/lib/blacklight/configuration/facet_field.rb +7 -0
  43. data/lib/blacklight/configuration/fields.rb +1 -1
  44. data/lib/blacklight/configuration/search_field.rb +5 -0
  45. data/lib/blacklight/configuration/tool_config.rb +4 -0
  46. data/lib/blacklight/configuration/view_config.rb +12 -0
  47. data/lib/blacklight/nested_open_struct_with_hash_access.rb +1 -1
  48. data/lib/blacklight/search_builder.rb +13 -23
  49. data/lib/blacklight/search_state.rb +82 -70
  50. data/lib/blacklight/search_state/filter_field.rb +122 -0
  51. data/lib/blacklight/solr/repository.rb +3 -3
  52. data/lib/blacklight/solr/response.rb +1 -1
  53. data/lib/blacklight/solr/search_builder_behavior.rb +71 -51
  54. data/package.json +5 -1
  55. data/spec/components/blacklight/constraint_layout_component_spec.rb +1 -1
  56. data/spec/components/blacklight/document_component_spec.rb +17 -0
  57. data/spec/components/blacklight/hidden_search_state_component_spec.rb +24 -0
  58. data/spec/features/facets_spec.rb +2 -17
  59. data/spec/features/search_filters_spec.rb +0 -20
  60. data/spec/features/search_spec.rb +0 -5
  61. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +1 -2
  62. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +1 -0
  63. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +1 -0
  64. data/spec/lib/blacklight/configuration/view_config_spec.rb +15 -0
  65. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +9 -0
  66. data/spec/lib/blacklight/search_state/filter_field_spec.rb +125 -0
  67. data/spec/lib/blacklight/search_state_spec.rb +132 -3
  68. data/spec/models/blacklight/configuration_spec.rb +8 -0
  69. data/spec/models/blacklight/solr/response/facets_spec.rb +1 -1
  70. data/spec/models/blacklight/solr/search_builder_spec.rb +32 -2
  71. data/spec/spec_helper.rb +8 -3
  72. data/spec/test_app_templates/Gemfile.extra +1 -1
  73. data/spec/views/catalog/_document.html.erb_spec.rb +1 -0
  74. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +2 -0
  75. data/tasks/blacklight.rake +3 -3
  76. metadata +50 -29
  77. data/.npmignore +0 -23
  78. data/.travis.yml +0 -40
@@ -14,4 +14,13 @@ RSpec.describe Blacklight::NestedOpenStructWithHashAccess do
14
14
  expect(copy.a[:b]).to eq 1
15
15
  end
16
16
  end
17
+
18
+ describe '#<<' do
19
+ subject { described_class.new(Blacklight::Configuration::Field) }
20
+
21
+ it 'includes the key in the hash' do
22
+ subject << :blah
23
+ expect(subject.blah).to have_attributes(key: :blah)
24
+ end
25
+ end
17
26
  end
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Blacklight::SearchState::FilterField do
4
+ let(:search_state) { Blacklight::SearchState.new(params.with_indifferent_access, blacklight_config, controller) }
5
+
6
+ let(:params) { { f: { some_field: %w[1 2], another_field: ['3'] } } }
7
+ let(:blacklight_config) do
8
+ Blacklight::Configuration.new.configure do |config|
9
+ config.add_facet_field 'some_field'
10
+ config.add_facet_field 'another_field', single: true
11
+ end
12
+ end
13
+ let(:controller) { double }
14
+
15
+ describe '#add' do
16
+ it 'adds the parameter to the filter list' do
17
+ filter = search_state.filter('some_field')
18
+ new_state = filter.add('4')
19
+
20
+ expect(new_state.filter('some_field').values).to eq %w[1 2 4]
21
+ end
22
+
23
+ it 'creates new parameter as needed' do
24
+ filter = search_state.filter('unknown_field')
25
+ new_state = filter.add('4')
26
+
27
+ expect(new_state.filter('unknown_field').values).to eq %w[4]
28
+ expect(new_state.params[:f]).to include(:unknown_field)
29
+ end
30
+
31
+ context 'without any parameters in the url' do
32
+ let(:params) { {} }
33
+
34
+ it 'adds the necessary structure' do
35
+ filter = search_state.filter('some_field')
36
+ new_state = filter.add('1')
37
+
38
+ expect(new_state.filter('some_field').values).to eq %w[1]
39
+ expect(new_state.params).to include(:f)
40
+ end
41
+ end
42
+
43
+ context 'with a single-valued field' do
44
+ it 'replaces any existing parameter from the filter list' do
45
+ filter = search_state.filter('another_field')
46
+ new_state = filter.add('5')
47
+
48
+ expect(new_state.filter('another_field').values).to eq %w[5]
49
+ end
50
+ end
51
+
52
+ context 'with a pivot facet-type item' do
53
+ it 'includes the pivot facet fqs' do
54
+ filter = search_state.filter('some_field')
55
+ new_state = filter.add(OpenStruct.new(fq: { some_other_field: '5' }, value: '4'))
56
+
57
+ expect(new_state.filter('some_field').values).to eq %w[1 2 4]
58
+ expect(new_state.filter('some_other_field').values).to eq %w[5]
59
+ end
60
+
61
+ it 'handles field indirection' do
62
+ filter = search_state.filter('some_field')
63
+ new_state = filter.add(OpenStruct.new(field: 'some_other_field', value: '4'))
64
+
65
+ expect(new_state.filter('some_other_field').values).to eq %w[4]
66
+ end
67
+
68
+ it 'handles value indirection' do
69
+ filter = search_state.filter('some_field')
70
+ new_state = filter.add(OpenStruct.new(value: '4'))
71
+
72
+ expect(new_state.filter('some_field').values).to eq %w[1 2 4]
73
+ end
74
+ end
75
+ end
76
+
77
+ describe '#remove' do
78
+ it 'returns a search state without the given filter applied' do
79
+ filter = search_state.filter('some_field')
80
+ new_state = filter.remove('1')
81
+
82
+ expect(new_state.filter('some_field').values).to eq ['2']
83
+ end
84
+
85
+ it 'removes the whole field if there are no filter left for the field' do
86
+ filter = search_state.filter('another_field')
87
+ new_state = filter.remove('3')
88
+
89
+ expect(new_state.filter('another_field').values).to eq []
90
+ expect(new_state.params[:f]).not_to include :another_field
91
+ end
92
+
93
+ it 'removes the filter parameter entirely if there are no filters left' do
94
+ new_state = search_state.filter('some_field').remove('1')
95
+ new_state = new_state.filter('some_field').remove('2')
96
+ new_state = new_state.filter('another_field').remove('3')
97
+
98
+ expect(new_state.params).not_to include :f
99
+ end
100
+
101
+ it 'handles value indirection' do
102
+ filter = search_state.filter('some_field')
103
+ new_state = filter.remove(OpenStruct.new(value: '1'))
104
+
105
+ expect(new_state.filter('some_field').values).to eq ['2']
106
+ end
107
+ end
108
+
109
+ describe '#values' do
110
+ it 'returns the currently selected values of the filter' do
111
+ expect(search_state.filter('some_field').values).to eq %w[1 2]
112
+ end
113
+ end
114
+
115
+ describe '#include?' do
116
+ it 'checks whether the value is currently selected' do
117
+ expect(search_state.filter('some_field').include?('1')).to eq true
118
+ expect(search_state.filter('some_field').include?('3')).to eq false
119
+ end
120
+
121
+ it 'handles value indirection' do
122
+ expect(search_state.filter('some_field').include?(OpenStruct.new(value: '1'))).to eq true
123
+ end
124
+ end
125
+ end
@@ -3,6 +3,8 @@
3
3
  RSpec.describe Blacklight::SearchState do
4
4
  subject(:search_state) { described_class.new(params, blacklight_config, controller) }
5
5
 
6
+ around { |test| Deprecation.silence(described_class) { test.call } }
7
+
6
8
  let(:blacklight_config) do
7
9
  Blacklight::Configuration.new.configure do |config|
8
10
  config.index.title_field = 'title_tsim'
@@ -242,9 +244,9 @@ RSpec.describe Blacklight::SearchState do
242
244
  end
243
245
 
244
246
  it "uses the facet's key in the url" do
245
- allow(search_state).to receive(:facet_configuration_for_field).with('some_field').and_return(double(single: true, field: "a_solr_field", key: "some_key"))
247
+ blacklight_config.add_facet_field 'some_key', single: true, field: "a_solr_field"
246
248
 
247
- result_params = search_state.add_facet_params('some_field', 'my_value')
249
+ result_params = search_state.add_facet_params('some_key', 'my_value')
248
250
 
249
251
  expect(result_params[:f]['some_key']).to have(1).item
250
252
  expect(result_params[:f]['some_key'].first).to eq 'my_value'
@@ -284,7 +286,7 @@ RSpec.describe Blacklight::SearchState do
284
286
  let(:params) { parameter_class.new f: { 'single_value_facet_field' => 'other_value' } }
285
287
 
286
288
  it "replaces facets configured as single" do
287
- allow(search_state).to receive(:facet_configuration_for_field).with('single_value_facet_field').and_return(double(single: true, key: "single_value_facet_field"))
289
+ blacklight_config.add_facet_field 'single_value_facet_field', single: true
288
290
  result_params = search_state.add_facet_params('single_value_facet_field', 'my_value')
289
291
 
290
292
  expect(result_params[:f]['single_value_facet_field']).to have(1).item
@@ -415,4 +417,131 @@ RSpec.describe Blacklight::SearchState do
415
417
  expect(new_state.to_hash).to eq('a' => 1)
416
418
  end
417
419
  end
420
+
421
+ describe '#page' do
422
+ context 'with a page' do
423
+ let(:params) { { 'page' => '3' } }
424
+
425
+ it 'is mapped from page' do
426
+ expect(search_state.page).to eq 3
427
+ end
428
+ end
429
+
430
+ context 'without a page' do
431
+ let(:params) { {} }
432
+
433
+ it 'is defaults to page 1' do
434
+ expect(search_state.page).to eq 1
435
+ end
436
+
437
+ context 'with negative numbers or other bad data' do
438
+ let(:params) { { 'page' => '-3' } }
439
+
440
+ it 'is defaults to page 1' do
441
+ expect(search_state.page).to eq 1
442
+ end
443
+ end
444
+ end
445
+ end
446
+
447
+ describe '#per_page' do
448
+ context 'with rows' do
449
+ let(:params) { { rows: '30' } }
450
+
451
+ it 'maps from rows' do
452
+ expect(search_state.per_page).to eq 30
453
+ end
454
+ end
455
+
456
+ context 'with per_page' do
457
+ let(:params) { { per_page: '14' } }
458
+
459
+ it 'maps from rows' do
460
+ expect(search_state.per_page).to eq 14
461
+ end
462
+ end
463
+
464
+ context 'it defaults to the configured value' do
465
+ let(:params) { {} }
466
+
467
+ it 'maps from rows' do
468
+ expect(search_state.per_page).to eq 10
469
+ end
470
+ end
471
+ end
472
+
473
+ describe '#sort_field' do
474
+ let(:params) { { 'sort' => 'author' } }
475
+
476
+ before do
477
+ blacklight_config.add_sort_field 'relevancy', label: 'relevance'
478
+ blacklight_config.add_sort_field 'author', label: 'asd'
479
+ end
480
+
481
+ it 'returns the current search field' do
482
+ expect(search_state.sort_field).to have_attributes(key: 'author')
483
+ end
484
+
485
+ context 'without a search field' do
486
+ let(:params) { {} }
487
+
488
+ it 'returns the current search field' do
489
+ expect(search_state.sort_field).to have_attributes(key: 'relevancy')
490
+ end
491
+ end
492
+ end
493
+
494
+ describe '#search_field' do
495
+ let(:params) { { 'search_field' => 'author' } }
496
+
497
+ before do
498
+ blacklight_config.add_search_field 'author', label: 'asd'
499
+ end
500
+
501
+ it 'returns the current search field' do
502
+ expect(search_state.search_field).to have_attributes(key: 'author')
503
+ end
504
+ end
505
+
506
+ describe '#facet_page' do
507
+ context 'with a page' do
508
+ let(:params) { { 'facet.page' => '3' } }
509
+
510
+ it 'is mapped from facet.page' do
511
+ expect(search_state.facet_page).to eq 3
512
+ end
513
+ end
514
+
515
+ context 'without a page' do
516
+ let(:params) { {} }
517
+
518
+ it 'is defaults to page 1' do
519
+ expect(search_state.facet_page).to eq 1
520
+ end
521
+ end
522
+
523
+ context 'with negative numbers or other bad data' do
524
+ let(:params) { { 'facet.page' => '-3' } }
525
+
526
+ it 'is defaults to page 1' do
527
+ expect(search_state.facet_page).to eq 1
528
+ end
529
+ end
530
+ end
531
+
532
+ describe '#facet_sort' do
533
+ let(:params) { { 'facet.sort' => 'index' } }
534
+
535
+ it 'is mapped from facet.sort' do
536
+ expect(search_state.facet_sort).to eq 'index'
537
+ end
538
+ end
539
+
540
+ describe '#facet_prefix' do
541
+ let(:params) { { 'facet.prefix' => 'A' } }
542
+
543
+ it 'is mapped from facet.prefix' do
544
+ expect(search_state.facet_prefix).to eq 'A'
545
+ end
546
+ end
418
547
  end
@@ -62,6 +62,14 @@ RSpec.describe "Blacklight::Configuration", api: true do
62
62
  end
63
63
  end
64
64
 
65
+ describe 'config.index.document_actions' do
66
+ it 'allows you to use the << operator' do
67
+ config.index.document_actions << :blah
68
+ expect(config.index.document_actions.blah).to have_attributes key: :blah
69
+ expect(config.index.document_actions.blah.name).to eq :blah
70
+ end
71
+ end
72
+
65
73
  describe "config.index.respond_to" do
66
74
  it "has a list of additional formats for index requests to respond to" do
67
75
  config.index.respond_to.xml = true
@@ -109,7 +109,7 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
109
109
  let(:facet) { { name: "foo", value: "bar", hits: 1 } }
110
110
 
111
111
  before do
112
- response.merge_facet(facet)
112
+ response.merge_facet(**facet)
113
113
  end
114
114
 
115
115
  context "facet does not already exist" do
@@ -186,9 +186,9 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
186
186
  end
187
187
 
188
188
  describe "for request params also passed in as argument" do
189
- let(:user_params) { { q: "some query", 'q' => 'another value' } }
189
+ let(:user_params) { { 'q' => 'another value', q: "some query" } }
190
190
 
191
- it "onlies have one value for the key 'q' regardless if a symbol or string" do
191
+ it "only has one value for the key 'q' regardless if a symbol or string" do
192
192
  expect(subject[:q]).to eq 'some query'
193
193
  expect(subject['q']).to eq 'some query'
194
194
  end
@@ -244,6 +244,21 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
244
244
  end
245
245
  end
246
246
 
247
+ describe 'with a facet with a custom filter query builder' do
248
+ let(:user_params) { { f: { some: ['value'] } }.with_indifferent_access }
249
+
250
+ before do
251
+ blacklight_config.add_facet_field 'some', filter_query_builder: (lambda do |*_args|
252
+ ['some:filter', { qq1: 'abc' }]
253
+ end)
254
+ end
255
+
256
+ it "has proper solr parameters" do
257
+ expect(subject[:fq]).to include('some:filter')
258
+ expect(subject[:qq1]).to include('abc')
259
+ end
260
+ end
261
+
247
262
  describe "solr parameters for a field search from config (subject)" do
248
263
  let(:user_params) { subject_search_params }
249
264
 
@@ -384,6 +399,21 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
384
399
  end
385
400
  end
386
401
 
402
+ describe 'the search field query_builder config' do
403
+ let(:blacklight_config) do
404
+ Blacklight::Configuration.new do |config|
405
+ config.add_search_field('built_query', query_builder: ->(builder, *_args) { [builder.blacklight_params[:q].reverse, qq1: 'xyz'] })
406
+ end
407
+ end
408
+
409
+ let(:user_params) { { search_field: 'built_query', q: 'value' } }
410
+
411
+ it 'uses the provided query builder' do
412
+ expect(subject[:q]).to eq 'eulav'
413
+ expect(subject[:qq1]).to eq 'xyz'
414
+ end
415
+ end
416
+
387
417
  describe "mapping facet.field" do
388
418
  let(:blacklight_config) do
389
419
  Blacklight::Configuration.new do |config|
@@ -20,12 +20,17 @@ require 'rspec/rails'
20
20
  require 'rspec/its'
21
21
  require 'rspec/collection_matchers'
22
22
  require 'capybara/rspec'
23
- require 'selenium-webdriver'
23
+ require 'capybara/apparition'
24
24
  require 'equivalent-xml'
25
- require 'webdrivers'
26
25
 
27
- Capybara.javascript_driver = :selenium_chrome_headless
26
+ Capybara.javascript_driver = :apparition
28
27
  Capybara.disable_animation = true
28
+ # Capybara.enable_aria_label = true
29
+
30
+ # Uncomment for a headed browser
31
+ # Capybara.register_driver :apparition do |app|
32
+ # Capybara::Apparition::Driver.new(app, headless: false)
33
+ # end
29
34
 
30
35
  # Requires supporting ruby files with custom matchers and macros, etc,
31
36
  # in spec/support/ and its subdirectories.
@@ -1,2 +1,2 @@
1
1
  gem 'rails-controller-testing'
2
- gem 'thor', '~> 0.20'
2
+ gem 'thor', '~> 0.20' if /^5.[12]/.match?(ENV['RAILS_VERSION'])
@@ -5,6 +5,7 @@ RSpec.describe "catalog/_document" do
5
5
  let(:blacklight_config) { Blacklight::Configuration.new }
6
6
 
7
7
  before do
8
+ allow(controller).to receive(:controller_name).and_return('test')
8
9
  allow(view).to receive(:render_grouped_response?).and_return(false)
9
10
  allow(view).to receive(:blacklight_config).and_return(blacklight_config)
10
11
  assign(:response, instance_double(Blacklight::Solr::Response, start: 20))
@@ -16,6 +16,8 @@ RSpec.describe "catalog/_thumbnail" do
16
16
  end
17
17
 
18
18
  before do
19
+ # Every call to view_context returns a different object. This ensures it stays stable.
20
+ allow(controller).to receive(:view_context).and_return(view)
19
21
  allow(controller).to receive(:action_name).and_return('index')
20
22
  assign :response, instance_double(Blacklight::Solr::Response, start: 0)
21
23
  allow(view).to receive(:render_grouped_response?).and_return false
@@ -14,14 +14,14 @@ require 'solr_wrapper'
14
14
  require 'open3'
15
15
 
16
16
  def system_with_error_handling(*args)
17
- Open3.popen3(*args) do |stdout, stderr, status, _thread|
17
+ Open3.popen3(*args) do |_stdin, stdout, stderr, thread|
18
18
  puts stdout.read
19
- raise "Unable to run #{args.inspect}: #{stderr.read}" unless status.success?
19
+ raise "Unable to run #{args.inspect}: #{stderr.read}" unless thread.value.success?
20
20
  end
21
21
  end
22
22
 
23
23
  def with_solr
24
- if system('docker-compose')
24
+ if system('docker-compose -v')
25
25
  begin
26
26
  puts "Starting Solr"
27
27
  system_with_error_handling "docker-compose up -d 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: 7.12.0
4
+ version: 7.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
@@ -14,10 +14,10 @@ authors:
14
14
  - Dan Funk
15
15
  - Naomi Dushay
16
16
  - Justin Coyne
17
- autorequire:
17
+ autorequire:
18
18
  bindir: exe
19
19
  cert_chain: []
20
- date: 2020-10-12 00:00:00.000000000 Z
20
+ date: 2021-01-10 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -95,20 +95,48 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: i18n
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 1.7.0
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 1.7.0
112
+ - !ruby/object:Gem::Dependency
113
+ name: ostruct
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: 0.3.2
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: 0.3.2
98
126
  - !ruby/object:Gem::Dependency
99
127
  name: view_component
100
128
  requirement: !ruby/object:Gem::Requirement
101
129
  requirements:
102
130
  - - ">="
103
131
  - !ruby/object:Gem::Version
104
- version: '0'
132
+ version: 2.23.0
105
133
  type: :runtime
106
134
  prerelease: false
107
135
  version_requirements: !ruby/object:Gem::Requirement
108
136
  requirements:
109
137
  - - ">="
110
138
  - !ruby/object:Gem::Version
111
- version: '0'
139
+ version: 2.23.0
112
140
  - !ruby/object:Gem::Dependency
113
141
  name: rsolr
114
142
  requirement: !ruby/object:Gem::Requirement
@@ -186,33 +214,19 @@ dependencies:
186
214
  - !ruby/object:Gem::Version
187
215
  version: '3'
188
216
  - !ruby/object:Gem::Dependency
189
- name: webdrivers
190
- requirement: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: '3.0'
195
- type: :development
196
- prerelease: false
197
- version_requirements: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '3.0'
202
- - !ruby/object:Gem::Dependency
203
- name: selenium-webdriver
217
+ name: apparition
204
218
  requirement: !ruby/object:Gem::Requirement
205
219
  requirements:
206
220
  - - ">="
207
221
  - !ruby/object:Gem::Version
208
- version: 3.13.1
222
+ version: '0'
209
223
  type: :development
210
224
  prerelease: false
211
225
  version_requirements: !ruby/object:Gem::Requirement
212
226
  requirements:
213
227
  - - ">="
214
228
  - !ruby/object:Gem::Version
215
- version: 3.13.1
229
+ version: '0'
216
230
  - !ruby/object:Gem::Dependency
217
231
  name: engine_cart
218
232
  requirement: !ruby/object:Gem::Requirement
@@ -339,15 +353,14 @@ files:
339
353
  - ".docker/app/Dockerfile"
340
354
  - ".docker/app/entrypoint.sh"
341
355
  - ".env"
356
+ - ".github/workflows/ruby.yml"
342
357
  - ".gitignore"
343
358
  - ".hound.yml"
344
359
  - ".jshintrc"
345
- - ".npmignore"
346
360
  - ".rspec"
347
361
  - ".rubocop.yml"
348
362
  - ".rubocop_todo.yml"
349
363
  - ".solr_wrapper.yml"
350
- - ".travis.yml"
351
364
  - ".yardopts"
352
365
  - CONTRIBUTING.md
353
366
  - Gemfile
@@ -416,6 +429,7 @@ files:
416
429
  - app/components/blacklight/facet_field_pagination_component.rb
417
430
  - app/components/blacklight/facet_item_component.rb
418
431
  - app/components/blacklight/facet_item_pivot_component.rb
432
+ - app/components/blacklight/hidden_search_state_component.rb
419
433
  - app/components/blacklight/metadata_field_component.html.erb
420
434
  - app/components/blacklight/metadata_field_component.rb
421
435
  - app/components/blacklight/metadata_field_layout_component.html.erb
@@ -653,6 +667,7 @@ files:
653
667
  - lib/blacklight/runtime_registry.rb
654
668
  - lib/blacklight/search_builder.rb
655
669
  - lib/blacklight/search_state.rb
670
+ - lib/blacklight/search_state/filter_field.rb
656
671
  - lib/blacklight/solr.rb
657
672
  - lib/blacklight/solr/document.rb
658
673
  - lib/blacklight/solr/facet_paginator.rb
@@ -712,6 +727,7 @@ files:
712
727
  - spec/components/blacklight/facet_field_list_component_spec.rb
713
728
  - spec/components/blacklight/facet_item_component_spec.rb
714
729
  - spec/components/blacklight/facet_item_pivot_component_spec.rb
730
+ - spec/components/blacklight/hidden_search_state_component_spec.rb
715
731
  - spec/components/blacklight/metadata_field_component_spec.rb
716
732
  - spec/components/blacklight/system/flash_message_component_spec.rb
717
733
  - spec/controllers/alternate_controller_spec.rb
@@ -756,9 +772,11 @@ files:
756
772
  - spec/integration/generators/blacklight/solr_generator_spec.rb
757
773
  - spec/lib/blacklight/configuration/facet_field_spec.rb
758
774
  - spec/lib/blacklight/configuration/field_spec.rb
775
+ - spec/lib/blacklight/configuration/view_config_spec.rb
759
776
  - spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb
760
777
  - spec/lib/blacklight/open_struct_with_hash_access_spec.rb
761
778
  - spec/lib/blacklight/parameters_spec.rb
779
+ - spec/lib/blacklight/search_state/filter_field_spec.rb
762
780
  - spec/lib/blacklight/search_state_spec.rb
763
781
  - spec/lib/blacklight_spec.rb
764
782
  - spec/lib/tasks/blacklight_task_spec.rb
@@ -846,23 +864,23 @@ homepage: http://projectblacklight.org/
846
864
  licenses:
847
865
  - Apache 2.0
848
866
  metadata: {}
849
- post_install_message:
867
+ post_install_message:
850
868
  rdoc_options: []
851
869
  require_paths:
852
870
  - lib
853
871
  required_ruby_version: !ruby/object:Gem::Requirement
854
872
  requirements:
855
- - - "~>"
873
+ - - ">="
856
874
  - !ruby/object:Gem::Version
857
- version: '2.1'
875
+ version: '2.3'
858
876
  required_rubygems_version: !ruby/object:Gem::Requirement
859
877
  requirements:
860
878
  - - ">="
861
879
  - !ruby/object:Gem::Version
862
880
  version: '0'
863
881
  requirements: []
864
- rubygems_version: 3.1.2
865
- signing_key:
882
+ rubygems_version: 3.2.3
883
+ signing_key:
866
884
  specification_version: 4
867
885
  summary: Blacklight provides a discovery interface for any Solr (http://lucene.apache.org/solr)
868
886
  index.
@@ -875,6 +893,7 @@ test_files:
875
893
  - spec/components/blacklight/facet_field_list_component_spec.rb
876
894
  - spec/components/blacklight/facet_item_component_spec.rb
877
895
  - spec/components/blacklight/facet_item_pivot_component_spec.rb
896
+ - spec/components/blacklight/hidden_search_state_component_spec.rb
878
897
  - spec/components/blacklight/metadata_field_component_spec.rb
879
898
  - spec/components/blacklight/system/flash_message_component_spec.rb
880
899
  - spec/controllers/alternate_controller_spec.rb
@@ -919,9 +938,11 @@ test_files:
919
938
  - spec/integration/generators/blacklight/solr_generator_spec.rb
920
939
  - spec/lib/blacklight/configuration/facet_field_spec.rb
921
940
  - spec/lib/blacklight/configuration/field_spec.rb
941
+ - spec/lib/blacklight/configuration/view_config_spec.rb
922
942
  - spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb
923
943
  - spec/lib/blacklight/open_struct_with_hash_access_spec.rb
924
944
  - spec/lib/blacklight/parameters_spec.rb
945
+ - spec/lib/blacklight/search_state/filter_field_spec.rb
925
946
  - spec/lib/blacklight/search_state_spec.rb
926
947
  - spec/lib/blacklight_spec.rb
927
948
  - spec/lib/tasks/blacklight_task_spec.rb