blacklight 7.17.2 → 7.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cacc94e8533f909ef9e137dca8f86809489626624507e04051c0923f1471d21c
4
- data.tar.gz: 83c86c5a1789266ca17d1ad446320f4634acf0c6a95c456dffd7cbd1653bb4e1
3
+ metadata.gz: 60b0a39be3483ff0a8968a73c07ad6e7fcd576c7249020606d602454401e3e81
4
+ data.tar.gz: 46aa7df118c340444ec95e045cd1006a62017595160adcfd953d99bafb1222db
5
5
  SHA512:
6
- metadata.gz: 07aa3c78687f57145209b5834d4f3512ced41f80b34e4b2dd6d72271d229922041de56f015271ba58ad62dc9c21fbd7f7f9cc0eb284080036e6e6092de73a48e
7
- data.tar.gz: 7cd2dd6b95c77c07d06b3c1c58e4e5d7dda5fe415a6dfd61498a8e2fc83778685b0a86d08a354fbc8fc60f69dbe842f1a45a9fea5da133978d75888ee9506026
6
+ metadata.gz: 02715a196cc746c2e3b23a453edcf4f7e50c43077a670ee2ec0975362969a36f71a299ad881d688d97207d25d75ddccedf460d14ed8c877347e3f626b9d43971
7
+ data.tar.gz: da5835cdb464f59d5b0715c0808e08ac81484e70271443b15baad6076f5266ed0000e5cad2d73cd9638796ec1532f891f57c0b3e4b87a85ea136e50ed38a0e13
data/VERSION CHANGED
@@ -1 +1 @@
1
- 7.17.2
1
+ 7.18.0
@@ -1,12 +1,12 @@
1
- <% value = @use_thumbnail_tag ? @presenter.thumbnail.thumbnail_tag(@image_options, 'aria-hidden': true, tabindex: -1, counter: @counter) : @presenter.thumbnail.render(@image_options) %>
1
+ <% value = use_thumbnail_tag_behavior? ? presenter.thumbnail.thumbnail_tag(@image_options, 'aria-hidden': true, tabindex: -1, counter: @counter) : presenter.thumbnail.render(@image_options) %>
2
2
 
3
3
  <% if value %>
4
4
  <div class="document-thumbnail">
5
- <% if @use_thumbnail_tag %>
5
+ <% if use_thumbnail_tag_behavior? %>
6
6
  <% warn_about_deprecated_behavior %>
7
7
  <%= value %>
8
8
  <% else %>
9
- <%= helpers.link_to_document(@presenter.document, value, 'aria-hidden': true, tabindex: -1, counter: @counter) %>
9
+ <%= helpers.link_to_document(presenter.document, value, 'aria-hidden': true, tabindex: -1, counter: @counter) %>
10
10
  <% end %>
11
11
  </div>
12
12
  <% end %>
@@ -9,20 +9,28 @@ module Blacklight
9
9
  # @param [Blacklight::DocumentPresenter] presenter
10
10
  # @param [Integer] counter
11
11
  # @param [Hash] image_options options for the thumbnail presenter's image tag
12
- def initialize(presenter:, counter:, image_options: {})
12
+ def initialize(presenter: nil, document: nil, counter:, image_options: {})
13
13
  @presenter = presenter
14
+ @document = presenter&.document || document
14
15
  @counter = counter
15
16
  @image_options = { alt: '' }.merge(image_options)
16
- @use_thumbnail_tag = !@presenter.thumbnail.instance_of?(Blacklight::ThumbnailPresenter)
17
17
  end
18
18
 
19
19
  def render?
20
- @presenter.thumbnail.exists?
20
+ presenter.thumbnail.exists?
21
+ end
22
+
23
+ def use_thumbnail_tag_behavior?
24
+ !presenter.thumbnail.instance_of?(Blacklight::ThumbnailPresenter)
21
25
  end
22
26
 
23
27
  def warn_about_deprecated_behavior
24
28
  Deprecation.warn(Blacklight::Document::ThumbnailComponent, 'Detected as custom thumbnail presenter; make sure it has a #render method that returns just the thumbnail image tag')
25
29
  end
30
+
31
+ def presenter
32
+ @presenter ||= @view_context.document_presenter(@document)
33
+ end
26
34
  end
27
35
  end
28
36
  end
@@ -50,7 +50,7 @@ module Blacklight
50
50
  component ||= @presenter&.view_config&.thumbnail_component || Blacklight::Document::ThumbnailComponent
51
51
  Deprecation.warn('Pass the presenter to the DocumentComponent') if !component && @presenter.nil?
52
52
 
53
- component.new(*args, presenter: @presenter, counter: @counter, image_options: image_options_or_static_content, **kwargs)
53
+ component.new(*args, document: @document, presenter: @presenter, counter: @counter, image_options: image_options_or_static_content, **kwargs)
54
54
  end)
55
55
 
56
56
  # A container for partials rendered using the view config partials configuration. Its use is discouraged, but necessary until
@@ -5,6 +5,9 @@ module Blacklight
5
5
  # An OpenStruct refinement that converts any hash-keys into
6
6
  # additional instances of NestedOpenStructWithHashAccess
7
7
  class NestedOpenStructWithHashAccess < OpenStructWithHashAccess
8
+ extend Deprecation
9
+ self.deprecation_horizon = 'blacklight 8.0'
10
+
8
11
  attr_reader :nested_class
9
12
 
10
13
  delegate :default_proc=, to: :to_h
@@ -86,15 +89,28 @@ module Blacklight
86
89
  ##
87
90
  # Override #method_missing from OpenStruct to ensure the default_proc logic
88
91
  # gets triggered.
89
- def method_missing(mid, *args)
92
+ def method_missing(mid, *args, **kwargs, &block)
90
93
  len = args.length
91
94
 
92
- if len.zero?
93
- new_ostruct_member!(mid)
94
- @table[mid]
95
- else
96
- super
97
- end
95
+ res = if mid.to_s.ends_with?('!')
96
+ m = mid[0...-1]
97
+ new_ostruct_member!(m)
98
+ @table[m]
99
+ elsif mid.to_s.ends_with?('=')
100
+ m = mid[0...-1]
101
+ new_ostruct_member!(m)
102
+ @table[m] = args.first
103
+ elsif len.zero? && kwargs.blank? && !block
104
+ Deprecation.warn("Initializing a #{nested_class} implicitly (by calling #{mid}) is deprecated. Call it as #{mid}! or pass initialize arguments")
105
+ @table[mid]
106
+ else
107
+ new_ostruct_member!(mid)
108
+ @table[mid] = nested_class.new(*args, **kwargs)
109
+ end
110
+
111
+ block&.call(res)
112
+
113
+ res
98
114
  end
99
115
 
100
116
  private
@@ -45,6 +45,7 @@ module Blacklight
45
45
  ##
46
46
  # Update the :q (query) parameter
47
47
  def where(conditions)
48
+ Deprecation.warn("SearchBuilder#where must be called with a hash, received #{conditions.inspect}.") unless conditions.is_a? Hash
48
49
  params_will_change!
49
50
  @search_state = @search_state.reset(@search_state.params.merge(q: conditions))
50
51
  @blacklight_params = @search_state.params.dup
@@ -32,6 +32,7 @@ module Blacklight::Solr
32
32
  # Take the user-entered query, and put it in the solr params,
33
33
  # including config's "search field" params for current search field.
34
34
  # also include setting spellcheck.q.
35
+ # rubocop:disable Metrics/CyclomaticComplexity
35
36
  def add_query_to_solr(solr_parameters)
36
37
  ###
37
38
  # legacy behavior of user param :qt is passed through, but over-ridden
@@ -64,11 +65,15 @@ module Blacklight::Solr
64
65
  elsif search_field&.solr_local_parameters.present?
65
66
  add_search_field_with_local_parameters(solr_parameters)
66
67
  elsif search_state.query_param.is_a? Hash
67
- add_additional_filters(solr_parameters, search_state.query_param)
68
+ if search_state.query_param == @additional_filters && !processor_chain.include?(:add_additional_filters)
69
+ Deprecation.warn('Expecting to see the processor step add_additional_filters; falling back to legacy query handling')
70
+ add_additional_filters(solr_parameters, search_state.query_param)
71
+ end
68
72
  elsif search_state.query_param
69
73
  solr_parameters.append_query search_state.query_param
70
74
  end
71
75
  end
76
+ # rubocop:enable Metrics/CyclomaticComplexity
72
77
 
73
78
  def add_additional_filters(solr_parameters, additional_filters = nil)
74
79
  q = additional_filters || @additional_filters
@@ -322,6 +327,7 @@ module Blacklight::Solr
322
327
  # around the term unless it's a bare-word. Escape internal quotes
323
328
  # if needed.
324
329
  def solr_param_quote(val, options = {})
330
+ val = val.to_s
325
331
  options[:quote] ||= '"'
326
332
  unless val =~ /^[a-zA-Z0-9$_\-\^]+$/
327
333
  val = options[:quote] +
@@ -33,9 +33,8 @@ RSpec.describe Blacklight::ConfigurationHelperBehavior do
33
33
 
34
34
  describe "#default_document_index_view_type" do
35
35
  it "uses the first view with default set to true" do
36
- blacklight_config.view.a
37
- blacklight_config.view.b
38
- blacklight_config.view.b.default = true
36
+ blacklight_config.view.a({})
37
+ blacklight_config.view.b(default: true)
39
38
  expect(helper.default_document_index_view_type).to eq :b
40
39
  end
41
40
 
@@ -48,8 +47,8 @@ RSpec.describe Blacklight::ConfigurationHelperBehavior do
48
47
  describe "#document_index_views" do
49
48
  before do
50
49
  blacklight_config.view.abc = false
51
- blacklight_config.view.def.if = false
52
- blacklight_config.view.xyz.unless = true
50
+ blacklight_config.view.def(if: false)
51
+ blacklight_config.view.xyz(unless: true)
53
52
  end
54
53
 
55
54
  it "filters views using :if/:unless configuration" do
@@ -62,8 +61,8 @@ RSpec.describe Blacklight::ConfigurationHelperBehavior do
62
61
 
63
62
  describe '#document_index_view_controls' do
64
63
  before do
65
- blacklight_config.view.a
66
- blacklight_config.view.b.display_control = false
64
+ blacklight_config.view.a({})
65
+ blacklight_config.view.b(display_control: false)
67
66
  end
68
67
 
69
68
  it "filters index views to those set to display controls" do
@@ -127,7 +127,7 @@ RSpec.describe BlacklightHelper do
127
127
 
128
128
  it "renders view type specific actions" do
129
129
  allow(helper).to receive(:document_index_view_type).and_return(:custom)
130
- config.view.custom.document_actions = []
130
+ config.view.custom(document_actions: [])
131
131
  expect(helper.render_index_doc_actions(document)).to be_blank
132
132
  end
133
133
  end
@@ -315,7 +315,7 @@ RSpec.describe BlacklightHelper do
315
315
  end
316
316
 
317
317
  it "ignores missing templates" do
318
- blacklight_config.view.view_type.partials = %w[index_header a b]
318
+ blacklight_config.view.view_type(partials: %w[index_header a b])
319
319
 
320
320
  response = helper.render_document_index_with_view :view_type, [obj1, obj1]
321
321
  expect(response).to have_selector "div#documents"
@@ -323,7 +323,7 @@ RSpec.describe CatalogHelper do
323
323
 
324
324
  it "supports view-specific field configuration" do
325
325
  allow(helper).to receive(:document_index_view_type).and_return(:some_view_type)
326
- blacklight_config.view.some_view_type.display_type_field = :other_type
326
+ blacklight_config.view.some_view_type(display_type_field: :other_type)
327
327
  doc = { other_type: "document" }
328
328
  expect(helper.render_document_class(doc)).to eq "blacklight-document"
329
329
  end
@@ -800,4 +800,13 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
800
800
  expect(subject.to_hash.with_indifferent_access.dig(:json, :query, :bool, :must, 1, :edismax, :qf)).to eq '${author_qf}'
801
801
  end
802
802
  end
803
+
804
+ describe '#where' do
805
+ let(:user_params) { {} }
806
+
807
+ it 'adds additional query filters on the search' do
808
+ subject.where(id: [1, 2, 3])
809
+ expect(subject.to_hash).to include q: '{!lucene}id:(1 OR 2 OR 3)'
810
+ end
811
+ end
803
812
  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
 
@@ -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
 
@@ -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.18.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: 2021-04-22 00:00:00.000000000 Z
20
+ date: 2021-04-23 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails