blacklight_range_limit 8.0.1 → 8.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +14 -46
  3. data/README.md +4 -4
  4. data/VERSION +1 -1
  5. data/app/assets/javascripts/blacklight_range_limit/range_limit_distro_facets.js +1 -1
  6. data/app/assets/javascripts/blacklight_range_limit/range_limit_plotting.js +27 -15
  7. data/app/assets/javascripts/blacklight_range_limit/range_limit_slider.js +29 -9
  8. data/app/components/blacklight_range_limit/range_facet_component.html.erb +48 -0
  9. data/app/components/blacklight_range_limit/range_facet_component.rb +29 -0
  10. data/app/components/blacklight_range_limit/range_form_component.html.erb +12 -0
  11. data/app/components/blacklight_range_limit/range_form_component.rb +46 -0
  12. data/app/components/blacklight_range_limit/range_segments_component.html.erb +3 -0
  13. data/app/components/blacklight_range_limit/range_segments_component.rb +26 -0
  14. data/app/helpers/range_limit_helper.rb +70 -79
  15. data/app/presenters/blacklight_range_limit/facet_field_presenter.rb +85 -0
  16. data/app/presenters/blacklight_range_limit/facet_item_presenter.rb +45 -0
  17. data/app/presenters/blacklight_range_limit/filter_field.rb +85 -0
  18. data/app/views/blacklight_range_limit/_range_segments.html.erb +7 -21
  19. data/app/views/blacklight_range_limit/range_segments.html.erb +1 -1
  20. data/app/views/catalog/range_limit_panel.html.erb +1 -0
  21. data/blacklight_range_limit.gemspec +1 -1
  22. data/config/locales/blacklight_range_limit.de.yml +13 -0
  23. data/config/locales/blacklight_range_limit.it.yml +13 -0
  24. data/lib/blacklight_range_limit/controller_override.rb +41 -24
  25. data/lib/blacklight_range_limit/engine.rb +4 -0
  26. data/lib/blacklight_range_limit/facet_field_config_override.rb +25 -0
  27. data/lib/blacklight_range_limit/range_limit_builder.rb +15 -39
  28. data/lib/blacklight_range_limit/segment_calculation.rb +2 -2
  29. data/lib/blacklight_range_limit.rb +31 -12
  30. data/lib/generators/blacklight_range_limit/install_generator.rb +3 -17
  31. data/solr/conf/schema.xml +0 -13
  32. data/solr/conf/solrconfig.xml +1 -0
  33. data/spec/components/range_facet_component_spec.rb +111 -0
  34. data/spec/features/a_javascript_spec.rb +4 -4
  35. data/spec/features/blacklight_range_limit_spec.rb +7 -6
  36. data/spec/helpers/blacklight_range_limit_helper_spec.rb +7 -7
  37. data/spec/presenters/facet_field_presenter_spec.rb +144 -0
  38. data/spec/presenters/facet_item_presenter_spec.rb +47 -0
  39. data/spec/presenters/filter_field_spec.rb +79 -0
  40. data/spec/spec_helper.rb +7 -0
  41. data/spec/support/presenter_test_helpers.rb +11 -0
  42. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  43. metadata +40 -17
  44. data/app/views/blacklight_range_limit/_range_limit_panel.html.erb +0 -90
  45. data/app/views/blacklight_range_limit/range_limit_panel.html.erb +0 -10
  46. data/lib/blacklight_range_limit/view_helper_override.rb +0 -100
  47. data/lib/generators/blacklight_range_limit/templates/search_history_controller.rb +0 -7
  48. data/spec/lib/blacklight_range_limit/view_helper_override_helper_spec.rb +0 -137
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe BlacklightRangeLimit::FilterField do
6
+ let(:search_state) { Blacklight::SearchState.new(params, blacklight_config, controller) }
7
+
8
+ let(:param_values) { {} }
9
+ let(:params) { ActionController::Parameters.new(param_values) }
10
+ let(:blacklight_config) do
11
+ Blacklight::Configuration.new.configure do |config|
12
+ config.add_facet_field 'some_field', filter_class: described_class
13
+ config.filter_search_state_fields = true
14
+ end
15
+ end
16
+ let(:controller) { double }
17
+ let(:filter) { search_state.filter('some_field') }
18
+
19
+ describe '#add' do
20
+ it 'adds a new range parameter' do
21
+ new_state = filter.add(1999..2099)
22
+
23
+ expect(new_state.params.dig(:range, 'some_field')).to include begin: 1999, end: 2099
24
+ end
25
+ end
26
+
27
+ context 'with some existing data' do
28
+ let(:param_values) { { range: { some_field: { begin: '2013', end: '2022' } } } }
29
+
30
+ describe '#add' do
31
+ it 'replaces the existing range' do
32
+ new_state = filter.add(1999..2099)
33
+
34
+ expect(new_state.params.dig(:range, 'some_field')).to include begin: 1999, end: 2099
35
+ end
36
+ end
37
+
38
+ describe '#remove' do
39
+ it 'removes the existing range' do
40
+ new_state = filter.remove(2013..2022)
41
+
42
+ expect(new_state.params.dig(:range, 'some_field')).to be_blank
43
+ end
44
+ end
45
+
46
+ describe '#values' do
47
+ it 'converts the parameters to a Range' do
48
+ expect(filter.values).to eq [2013..2022]
49
+ end
50
+ end
51
+
52
+ describe '#include?' do
53
+ it 'compares the provided value to the parameter values' do
54
+ expect(filter.include?(2013..2022)).to eq true
55
+ expect(filter.include?(1234..2345)).to eq false
56
+ end
57
+ end
58
+ end
59
+
60
+ context 'with missing data' do
61
+ let(:param_values) { { range: { some_field: { begin: '', end: '' } } } }
62
+
63
+ describe '#values' do
64
+ it 'drops the empty range' do
65
+ expect(filter.values).to be_empty
66
+ end
67
+ end
68
+ end
69
+
70
+ context 'with array-mangled data' do
71
+ let(:param_values) { { range: { some_field: { begin: { '0' => '2013' }, end: { '0' => '2022' } } } } }
72
+
73
+ describe '#values' do
74
+ it 'converts the parameters to a Range' do
75
+ expect(filter.values).to eq [2013..2022]
76
+ end
77
+ end
78
+ end
79
+ end
data/spec/spec_helper.rb CHANGED
@@ -21,6 +21,10 @@ Capybara.register_driver :headless_chrome do |app|
21
21
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
22
22
  end
23
23
 
24
+ # Requires supporting ruby files with custom matchers and macros, etc,
25
+ # in spec/support/ and its subdirectories.
26
+ Dir[Pathname.new(File.expand_path('support/**/*.rb', __dir__))].sort.each { |f| require f }
27
+
24
28
  RSpec.configure do |config|
25
29
  # rspec-rails 3 will no longer automatically infer an example group's spec type
26
30
  # from the file location. You can explicitly opt-in to the feature using this
@@ -32,4 +36,7 @@ RSpec.configure do |config|
32
36
  # # Equivalent to being in spec/controllers
33
37
  # end
34
38
  config.infer_spec_type_from_file_location!
39
+
40
+ config.include PresenterTestHelpers, type: :presenter
41
+ config.include ViewComponent::TestHelpers, type: :component
35
42
  end
@@ -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
@@ -27,7 +27,7 @@ class TestAppGenerator < Rails::Generators::Base
27
27
 
28
28
  def inject_into_catalog_controller
29
29
  inject_into_file 'app/controllers/catalog_controller.rb', after: /config.add_facet_field 'format'.*$/ do
30
- "\n config.add_facet_field 'pub_date_si', label: 'Publication Date Sort', range: true"
30
+ "\n config.add_facet_field 'pub_date_si', label: 'Publication Date Sort', **default_range_config"
31
31
  end
32
32
  end
33
33
 
metadata CHANGED
@@ -1,30 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight_range_limit
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.1
4
+ version: 8.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
8
8
  - Chris Beer
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-08-19 00:00:00.000000000 Z
12
+ date: 2022-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: blacklight
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 7.22.2
21
+ - - "<"
19
22
  - !ruby/object:Gem::Version
20
- version: '7.0'
23
+ version: '9'
21
24
  type: :runtime
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
- - - "~>"
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 7.22.2
31
+ - - "<"
26
32
  - !ruby/object:Gem::Version
27
- version: '7.0'
33
+ version: '9'
28
34
  - !ruby/object:Gem::Dependency
29
35
  name: rspec
30
36
  requirement: !ruby/object:Gem::Requirement
@@ -165,7 +171,7 @@ dependencies:
165
171
  - - ">="
166
172
  - !ruby/object:Gem::Version
167
173
  version: '0'
168
- description:
174
+ description:
169
175
  email:
170
176
  - blacklight-development@googlegroups.com
171
177
  executables: []
@@ -188,31 +194,40 @@ files:
188
194
  - app/assets/javascripts/blacklight_range_limit/range_limit_slider.js
189
195
  - app/assets/stylesheets/blacklight_range_limit.css.scss
190
196
  - app/assets/stylesheets/blacklight_range_limit/blacklight_range_limit.css
197
+ - app/components/blacklight_range_limit/range_facet_component.html.erb
198
+ - app/components/blacklight_range_limit/range_facet_component.rb
199
+ - app/components/blacklight_range_limit/range_form_component.html.erb
200
+ - app/components/blacklight_range_limit/range_form_component.rb
201
+ - app/components/blacklight_range_limit/range_segments_component.html.erb
202
+ - app/components/blacklight_range_limit/range_segments_component.rb
191
203
  - app/helpers/range_limit_helper.rb
192
- - app/views/blacklight_range_limit/_range_limit_panel.html.erb
204
+ - app/presenters/blacklight_range_limit/facet_field_presenter.rb
205
+ - app/presenters/blacklight_range_limit/facet_item_presenter.rb
206
+ - app/presenters/blacklight_range_limit/filter_field.rb
193
207
  - app/views/blacklight_range_limit/_range_segments.html.erb
194
- - app/views/blacklight_range_limit/range_limit_panel.html.erb
195
208
  - app/views/blacklight_range_limit/range_segments.html.erb
209
+ - app/views/catalog/range_limit_panel.html.erb
196
210
  - blacklight_range_limit.gemspec
197
211
  - config/jetty.yml
198
212
  - config/locales/blacklight_range_limit.ar.yml
213
+ - config/locales/blacklight_range_limit.de.yml
199
214
  - config/locales/blacklight_range_limit.en.yml
215
+ - config/locales/blacklight_range_limit.it.yml
200
216
  - config/routes.rb
201
217
  - config/solr.yml
202
218
  - doc/example-screenshot.png
203
219
  - lib/blacklight_range_limit.rb
204
220
  - lib/blacklight_range_limit/controller_override.rb
205
221
  - lib/blacklight_range_limit/engine.rb
222
+ - lib/blacklight_range_limit/facet_field_config_override.rb
206
223
  - lib/blacklight_range_limit/range_limit_builder.rb
207
224
  - lib/blacklight_range_limit/route_sets.rb
208
225
  - lib/blacklight_range_limit/routes.rb
209
226
  - lib/blacklight_range_limit/routes/range_searchable.rb
210
227
  - lib/blacklight_range_limit/segment_calculation.rb
211
228
  - lib/blacklight_range_limit/version.rb
212
- - lib/blacklight_range_limit/view_helper_override.rb
213
229
  - lib/generators/blacklight_range_limit/assets_generator.rb
214
230
  - lib/generators/blacklight_range_limit/install_generator.rb
215
- - lib/generators/blacklight_range_limit/templates/search_history_controller.rb
216
231
  - lib/tasks/blacklight_range_limit.rake
217
232
  - solr/conf/_rest_managed.json
218
233
  - solr/conf/admin-extra.html
@@ -231,14 +246,18 @@ files:
231
246
  - solr/conf/xslt/example_rss.xsl
232
247
  - solr/conf/xslt/luke.xsl
233
248
  - solr/sample_solr_documents.yml
249
+ - spec/components/range_facet_component_spec.rb
234
250
  - spec/features/a_javascript_spec.rb
235
251
  - spec/features/blacklight_range_limit_spec.rb
236
252
  - spec/fixtures/solr_documents/unknown_year.yml
237
253
  - spec/fixtures/solr_documents/zero_year.yml
238
254
  - spec/helpers/blacklight_range_limit_helper_spec.rb
239
255
  - spec/lib/blacklight_range_limit/segment_calculation_spec.rb
240
- - spec/lib/blacklight_range_limit/view_helper_override_helper_spec.rb
256
+ - spec/presenters/facet_field_presenter_spec.rb
257
+ - spec/presenters/facet_item_presenter_spec.rb
258
+ - spec/presenters/filter_field_spec.rb
241
259
  - spec/spec_helper.rb
260
+ - spec/support/presenter_test_helpers.rb
242
261
  - spec/test_app_templates/Gemfile.extra
243
262
  - spec/test_app_templates/lib/generators/test_app_generator.rb
244
263
  - vendor/assets/javascripts/bootstrap-slider.js
@@ -257,7 +276,7 @@ homepage: https://github.com/projectblacklight/blacklight_range_limit
257
276
  licenses:
258
277
  - Apache 2.0
259
278
  metadata: {}
260
- post_install_message:
279
+ post_install_message:
261
280
  rdoc_options: []
262
281
  require_paths:
263
282
  - lib
@@ -272,18 +291,22 @@ required_rubygems_version: !ruby/object:Gem::Requirement
272
291
  - !ruby/object:Gem::Version
273
292
  version: '0'
274
293
  requirements: []
275
- rubygems_version: 3.1.2
276
- signing_key:
294
+ rubygems_version: 3.2.32
295
+ signing_key:
277
296
  specification_version: 4
278
297
  summary: Blacklight Range Limit plugin
279
298
  test_files:
299
+ - spec/components/range_facet_component_spec.rb
280
300
  - spec/features/a_javascript_spec.rb
281
301
  - spec/features/blacklight_range_limit_spec.rb
282
302
  - spec/fixtures/solr_documents/unknown_year.yml
283
303
  - spec/fixtures/solr_documents/zero_year.yml
284
304
  - spec/helpers/blacklight_range_limit_helper_spec.rb
285
305
  - spec/lib/blacklight_range_limit/segment_calculation_spec.rb
286
- - spec/lib/blacklight_range_limit/view_helper_override_helper_spec.rb
306
+ - spec/presenters/facet_field_presenter_spec.rb
307
+ - spec/presenters/facet_item_presenter_spec.rb
308
+ - spec/presenters/filter_field_spec.rb
287
309
  - spec/spec_helper.rb
310
+ - spec/support/presenter_test_helpers.rb
288
311
  - spec/test_app_templates/Gemfile.extra
289
312
  - spec/test_app_templates/lib/generators/test_app_generator.rb
@@ -1,90 +0,0 @@
1
- <%- # requires solr_config local passed in
2
- field_config = range_config(field_name)
3
- label = facet_field_label(field_name)
4
-
5
- input_label_range_begin = field_config[:input_label_range_begin] || t("blacklight.range_limit.range_begin", field_label: label)
6
- input_label_range_end = field_config[:input_label_range_end] || t("blacklight.range_limit.range_end", field_label: label)
7
- maxlength = field_config[:maxlength]
8
- -%>
9
-
10
- <div class="limit_content range_limit <%= field_name %>-config blrl-plot-config">
11
- <% if has_selected_range_limit?(field_name) %>
12
- <ul class="current list-unstyled facet-values">
13
- <li class="selected">
14
- <span class="facet-label">
15
- <span class="selected"><%= range_display(field_name) %></span>
16
- <%= link_to search_action_url(remove_range_param(field_name).except(:controller, :action)), :class=>"remove", :title => t('blacklight.range_limit.remove_limit') do %>
17
- <span class="remove-icon">✖</span>
18
- <span class="sr-only">[<%= t('blacklight.range_limit.remove_limit') %>]</span>
19
- <% end %>
20
- </span>
21
- <span class="selected facet-count"><%= number_with_delimiter(@response.total) %></span>
22
- </li>
23
- </ul>
24
-
25
- <% end %>
26
-
27
- <!-- no results profile if missing is selected -->
28
- <% unless selected_missing_for_range_limit?(field_name) %>
29
- <!-- you can hide this if you want, but it has to be on page if you want
30
- JS slider and calculated facets to show up, JS sniffs it. -->
31
- <div class="profile">
32
- <% if stats_for_field?(field_name) %>
33
- <!-- No stats information found for field in search response -->
34
- <% end %>
35
-
36
- <% if (min = range_results_endpoint(field_name, :min)) &&
37
- (max = range_results_endpoint(field_name, :max)) %>
38
-
39
- <% if field_config[:segments] != false %>
40
- <div class="distribution subsection <%= 'chart_js' unless field_config[:chart_js] == false %>">
41
- <!-- if we already fetched segments from solr, display them
42
- here. Otherwise, display a link to fetch them, which JS
43
- will AJAX fetch. -->
44
- <% if solr_range_queries_to_a(field_name).length > 0 %>
45
-
46
- <%= render(:partial => "blacklight_range_limit/range_segments", :locals => {:solr_field => field_name}) %>
47
-
48
- <% else %>
49
- <%= link_to(t('blacklight.range_limit.view_distribution'), range_limit_url(range_field: field_name, range_start: min, range_end: max), :class => "load_distribution") %>
50
- <% end %>
51
- </div>
52
- <% end %>
53
- <p class="range subsection <%= "slider_js" unless field_config[:slider_js] == false %>">
54
- <%= t('blacklight.range_limit.results_range_html', min: range_results_endpoint(field_name, :min), max: range_results_endpoint(field_name, :max)) %>
55
- </p>
56
- <% end %>
57
- </div>
58
-
59
- <%= form_tag search_action_path, :method => :get, class: [BlacklightRangeLimit.classes[:form], "range_#{field_name} d-flex justify-content-center"].join(' ') do %>
60
- <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:page)) %>
61
- <div class="input-group input-group-sm mb-3 flex-nowrap range-limit-input-group">
62
- <%= render_range_input(field_name, :begin, input_label_range_begin, maxlength) %>
63
- <%= render_range_input(field_name, :end, input_label_range_end, maxlength) %>
64
- <div class="input-group-append">
65
- <%= submit_tag t('blacklight.range_limit.submit_limit'), class: BlacklightRangeLimit.classes[:submit] %>
66
- </div>
67
- </div>
68
- <% end %>
69
-
70
- <%= link_to t('blacklight.range_limit.view_larger', field_name: label),
71
- range_limit_panel_url(id: field_name, range_start: 0, range_end: 2019),
72
- class: 'view_larger mt-1',
73
- data: { blacklight_modal: 'trigger' } %>
74
-
75
- <% unless request.xhr? %>
76
- <% if (stats = stats_for_field(field_name)) && stats["missing"] > 0 %>
77
- <ul class="missing list-unstyled facet-values subsection">
78
- <li>
79
- <span class="facet-label">
80
- <%= link_to t('blacklight.range_limit.missing'), search_action_url(add_range_missing(field_name).except(:controller, :action)) %>
81
- </span>
82
- <%# note important there be no whitespace inside facet-count to avoid
83
- bug in some versions of Blacklight (including 7.1.0.alpha) %>
84
- <span class="facet-count"><%= number_with_delimiter(stats["missing"]) %></span>
85
- </li>
86
- </ul>
87
- <% end %>
88
- <% end %>
89
- <% end %>
90
- </div>
@@ -1,10 +0,0 @@
1
- <div class="modal-header">
2
- <h1 class="modal-title"><%= facet_field_label(@facet.key) %></h1>
3
- <button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>">
4
- <span aria-hidden="true">&times;</span>
5
- </button>
6
- </div>
7
-
8
- <div class="modal-body">
9
- <%= render :partial => "blacklight_range_limit/range_limit_panel", :locals => {field_name: @facet.key} %>
10
- </div>
@@ -1,100 +0,0 @@
1
- # Meant to be applied on top of Blacklight helpers, to over-ride
2
- # Will add rendering of limit itself in sidebar, and of constraings
3
- # display.
4
- module BlacklightRangeLimit::ViewHelperOverride
5
-
6
-
7
-
8
- def facet_partial_name(display_facet)
9
- config = range_config(display_facet.name)
10
- return config[:partial] || 'blacklight_range_limit/range_limit_panel' if config && should_show_limit(display_facet.name)
11
- super
12
- end
13
-
14
- def query_has_constraints?(my_params = params)
15
- super || has_range_limit_parameters?(my_params)
16
- end
17
-
18
- # Over-ride to recognize our custom params for range facets
19
- def facet_field_in_params?(field_name)
20
- return super || (
21
- range_config(field_name) &&
22
- params[:range] &&
23
- params[:range][field_name] &&
24
- ( params[:range][field_name]["begin"].present? ||
25
- params[:range][field_name]["end"].present? ||
26
- params[:range][field_name]["missing"].present?
27
- )
28
- )
29
- end
30
-
31
- def render_constraints_filters(my_params = params)
32
- # add a constraint for ranges?
33
- range_params(my_params).keys.each_with_object(super) do |solr_field, content|
34
- content << render_constraint_element(
35
- facet_field_label(solr_field),
36
- range_display(solr_field, my_params),
37
- escape_value: false,
38
- remove: search_action_path(remove_range_param(solr_field, my_params))
39
- )
40
- end
41
- end
42
-
43
- def render_search_to_s_filters(my_params)
44
- # add a constraint for ranges?
45
- range_params(my_params).keys.each_with_object(super) do |solr_field, content|
46
- content << render_search_to_s_element(
47
- facet_field_label(solr_field),
48
- range_display(solr_field, my_params),
49
- escape_value: false
50
- )
51
- end
52
- end
53
-
54
- def remove_range_param(solr_field, my_params = params)
55
- my_params = Blacklight::SearchState.new(my_params, blacklight_config).to_h
56
- if ( my_params["range"] )
57
- my_params = my_params.dup
58
- my_params["range"] = my_params["range"].dup
59
- my_params["range"].delete(solr_field)
60
- end
61
- return my_params
62
- end
63
-
64
- # Looks in the solr @response for ["facet_counts"]["facet_queries"][solr_field], for elements
65
- # expressed as "solr_field:[X to Y]", turns them into
66
- # a list of hashes with [:from, :to, :count], sorted by
67
- # :from. Assumes integers for sorting purposes.
68
- def solr_range_queries_to_a(solr_field)
69
- return [] unless @response["facet_counts"] && @response["facet_counts"]["facet_queries"]
70
-
71
- array = []
72
-
73
- @response["facet_counts"]["facet_queries"].each_pair do |query, count|
74
- if query =~ /#{solr_field}: *\[ *(-?\d+) *TO *(-?\d+) *\]/
75
- array << {:from => $1, :to => $2, :count => count}
76
- end
77
- end
78
- array = array.sort_by {|hash| hash[:from].to_i }
79
-
80
- return array
81
- end
82
-
83
- def range_config(solr_field)
84
- BlacklightRangeLimit.range_config(blacklight_config, solr_field)
85
- end
86
-
87
- private
88
-
89
- def range_params(my_params = params)
90
- return {} unless my_params[:range].is_a?(ActionController::Parameters) || my_params[:range].is_a?(Hash)
91
-
92
- my_params[:range].select do |_solr_field, range_options|
93
- next unless range_options
94
-
95
- [range_options['missing'].presence,
96
- range_options['begin'].presence,
97
- range_options['end'].presence].any?
98
- end
99
- end
100
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
- class SearchHistoryController < ApplicationController
3
- include Blacklight::SearchHistory
4
-
5
- helper BlacklightRangeLimit::ViewHelperOverride
6
- helper RangeLimitHelper
7
- end
@@ -1,137 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe BlacklightRangeLimit::ViewHelperOverride, type: :helper do
4
- describe '#render_constraints_filters' do
5
- before do
6
- allow(helper).to receive_messages(
7
- facet_field_label: 'Date Range',
8
- remove_range_param: {},
9
- search_action_path: '/catalog',
10
- blacklight_config: CatalogController.blacklight_config,
11
- search_state: {},
12
- )
13
- allow(controller).to receive_messages(
14
- search_state_class: Blacklight::SearchState,
15
- )
16
- end
17
-
18
- it 'does not return any content when the range parameter invalid' do
19
- params = ActionController::Parameters.new(range: 'garbage')
20
-
21
- expect(helper.render_constraints_filters(params)).to eq ''
22
- end
23
-
24
- it 'renders a constraint for the given data in the range param' do
25
- params = ActionController::Parameters.new(
26
- range: { range_field: { 'begin' => 1900, 'end' => 2000 } }
27
- )
28
- constraints = helper.render_constraints_filters(params)
29
-
30
- expect(constraints).to have_css(
31
- '.constraint .filter-name', text: 'Date Range'
32
- )
33
- expect(constraints).to have_css(
34
- '.constraint .filter-value', text: '1900 to 2000'
35
- )
36
- end
37
- end
38
-
39
- describe 'render_search_to_s_filters' do
40
- before do
41
- allow(helper).to receive_messages(
42
- facet_field_label: 'Date Range',
43
- blacklight_config: CatalogController.blacklight_config,
44
- search_state: {},
45
- )
46
- end
47
-
48
- it 'does not return any content when the range parameter invalid' do
49
- params = ActionController::Parameters.new(range: 'garbage')
50
-
51
- expect(helper.render_search_to_s_filters(params)).to eq ''
52
- end
53
-
54
- it 'renders a constraint for the given data in the range param' do
55
- params = ActionController::Parameters.new(
56
- range: { range_field: { 'begin' => 1900, 'end' => 2000 } }
57
- )
58
- constraints = helper.render_search_to_s_filters(params)
59
-
60
- expect(constraints).to have_css(
61
- '.constraint .filter-name', text: 'Date Range:'
62
- )
63
- expect(constraints).to have_css(
64
- '.constraint .filter-values', text: '1900 to 2000'
65
- )
66
- end
67
- end
68
-
69
- describe '#range_params' do
70
- it 'handles no range input' do
71
- expect(
72
- helper.send(:range_params, ActionController::Parameters.new(q: 'blah'))
73
- ).to eq({})
74
- end
75
-
76
- it 'handles non-compliant range input' do
77
- expect(
78
- helper.send(:range_params, ActionController::Parameters.new(range: 'blah'))
79
- ).to eq({})
80
-
81
- expect(
82
- helper.send(:range_params, ActionController::Parameters.new(range: ['blah']))
83
- ).to eq({})
84
-
85
- expect(
86
- helper.send(:range_params, ActionController::Parameters.new(range: { 'wrong' => 'data' }))
87
- ).to eq({})
88
-
89
- expect(
90
- helper.send(
91
- :range_params,
92
- ActionController::Parameters.new(range: { field_name: { 'wrong' => 'data' } })
93
- )
94
- ).to eq({})
95
-
96
- expect(
97
- helper.send(
98
- :range_params,
99
- ActionController::Parameters.new(range: { field_name: { 'begin' => '', 'end' => '' } })
100
- )
101
- ).to eq({})
102
- end
103
-
104
- it 'returns the range parameters that are present' do
105
- expect(
106
- helper.send(
107
- :range_params,
108
- ActionController::Parameters.new(range: { field_name: { 'missing' => true } })
109
- ).permit!.to_h
110
- ).to eq({ 'field_name' => { 'missing' => true } })
111
-
112
- expect(
113
- helper.send(
114
- :range_params,
115
- ActionController::Parameters.new(range: { field_name: { 'begin' => '1800', 'end' => '1900' } })
116
- ).permit!.to_h
117
- ).to eq({ 'field_name' => { 'begin' => '1800', 'end' => '1900' } })
118
-
119
- expect(
120
- helper.send(
121
- :range_params,
122
- ActionController::Parameters.new(
123
- range: {
124
- field_name: { 'begin' => '1800', 'end' => '1900' },
125
- field_name2: { 'begin' => '1800', 'end' => '1900' }
126
- }
127
- )
128
- ).permit!.to_h
129
- ).to eq(
130
- {
131
- 'field_name' => { 'begin' => '1800', 'end' => '1900' },
132
- 'field_name2' => { 'begin' => '1800', 'end' => '1900' }
133
- }
134
- )
135
- end
136
- end
137
- end