blacklight_range_limit 7.5.0 → 7.6.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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/blacklight_range_limit/range_limit_builder.rb +5 -3
- data/lib/blacklight_range_limit/segment_calculation.rb +3 -1
- data/lib/blacklight_range_limit/view_helper_override.rb +26 -26
- data/spec/features/a_javascript_spec.rb +19 -0
- data/spec/features/blacklight_range_limit_spec.rb +4 -0
- data/spec/lib/blacklight_range_limit/segment_calculation_spec.rb +14 -0
- data/spec/lib/blacklight_range_limit/view_helper_override_helper_spec.rb +120 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +7 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e1997f0d260501d40769b046bfaa9a31492bb4398bbb144a37d2eb4cc9e6513
|
4
|
+
data.tar.gz: 46c9a11dbf347c2d9a5554f0d92e1b7e324bb6158acffe98908b8ecc4f519713
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9ff387fa687d752654314b976e82e2528c71403374febc52e38e07f22042514d0564ea08d46a4ec6e3f27dead5bf3db2a8942f529af1bd3fbc3a64b6a8516cb
|
7
|
+
data.tar.gz: b186d9febaad180fb2ac5347cd87ec098738a9e8a4a90c54c8305153edb3553bcfb0d83411c3a4f6303229d35efcada3e495f6ec8879da658d95246a762a8a31
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
7.
|
1
|
+
7.6.0
|
@@ -23,6 +23,8 @@ module BlacklightRangeLimit
|
|
23
23
|
solr_params["stats.field"] ||= []
|
24
24
|
solr_params["stats.field"] << config.field
|
25
25
|
|
26
|
+
range_config = BlacklightRangeLimit.range_config(blacklight_config, config.field)
|
27
|
+
|
26
28
|
hash = blacklight_params["range"] && blacklight_params["range"][field_key] ?
|
27
29
|
blacklight_params["range"][field_key] :
|
28
30
|
{}
|
@@ -40,13 +42,13 @@ module BlacklightRangeLimit
|
|
40
42
|
solr_params[:fq] ||= []
|
41
43
|
solr_params[:fq] << "#{config.field}: [#{start} TO #{finish}]"
|
42
44
|
|
43
|
-
if (
|
45
|
+
if (range_config[:segments] != false && start != "*" && finish != "*")
|
44
46
|
# Add in our calculated segments, can only do with both boundaries.
|
45
47
|
add_range_segments_to_solr!(solr_params, field_key, start.to_i, finish.to_i)
|
46
48
|
end
|
47
49
|
|
48
|
-
elsif (
|
49
|
-
boundaries =
|
50
|
+
elsif (range_config[:segments] != false &&
|
51
|
+
boundaries = range_config[:assumed_boundaries])
|
50
52
|
# assumed_boundaries in config
|
51
53
|
add_range_segments_to_solr!(solr_params, field_key, boundaries[0], boundaries[1])
|
52
54
|
end
|
@@ -15,6 +15,8 @@ module BlacklightRangeLimit
|
|
15
15
|
raise InvalidRange, "The min date must be before the max date" if min > max
|
16
16
|
field_config = blacklight_config.facet_fields[facet_field.to_s]
|
17
17
|
|
18
|
+
return solr_params unless field_config
|
19
|
+
|
18
20
|
range_config = BlacklightRangeLimit.range_config(blacklight_config, facet_field)
|
19
21
|
|
20
22
|
solr_params[:"facet.query"] ||= []
|
@@ -29,7 +31,7 @@ module BlacklightRangeLimit
|
|
29
31
|
solr_params[:"facet.query"] << "#{field_config.field}:[#{first} TO #{last}]"
|
30
32
|
end
|
31
33
|
|
32
|
-
|
34
|
+
solr_params
|
33
35
|
end
|
34
36
|
|
35
37
|
# returns an array of 'boundaries' for producing approx num_div
|
@@ -29,39 +29,26 @@
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def render_constraints_filters(my_params = params)
|
32
|
-
content = super(my_params)
|
33
32
|
# add a constraint for ranges?
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
:escape_value => false,
|
42
|
-
:remove => remove_range_param(solr_field, my_params)
|
43
|
-
)
|
44
|
-
end
|
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: remove_range_param(solr_field, my_params)
|
39
|
+
)
|
45
40
|
end
|
46
|
-
return content
|
47
41
|
end
|
48
42
|
|
49
43
|
def render_search_to_s_filters(my_params)
|
50
|
-
content = super(my_params)
|
51
44
|
# add a constraint for ranges?
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
range_display(solr_field, my_params),
|
59
|
-
:escape_value => false
|
60
|
-
)
|
61
|
-
|
62
|
-
end
|
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
|
+
)
|
63
51
|
end
|
64
|
-
return content
|
65
52
|
end
|
66
53
|
|
67
54
|
def remove_range_param(solr_field, my_params = params)
|
@@ -97,4 +84,17 @@
|
|
97
84
|
BlacklightRangeLimit.range_config(blacklight_config, solr_field)
|
98
85
|
end
|
99
86
|
|
87
|
+
private
|
88
|
+
|
89
|
+
def range_params(my_params = params)
|
90
|
+
return {} unless my_params[:range].is_a?(ActionController::Parameters)
|
91
|
+
|
92
|
+
my_params[:range].select do |_solr_field, range_options|
|
93
|
+
next unless range_options
|
94
|
+
|
95
|
+
[range_options['missing'],
|
96
|
+
range_options['begin'],
|
97
|
+
range_options['end']].any?
|
98
|
+
end
|
99
|
+
end
|
100
100
|
end
|
@@ -21,6 +21,25 @@ describe 'JavaScript', js: true do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
context 'when assumed boundaries configured' do
|
25
|
+
before do
|
26
|
+
CatalogController.blacklight_config.facet_fields['pub_date_si'].range = {
|
27
|
+
assumed_boundaries: [1990, 2000]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
after do
|
32
|
+
CatalogController.blacklight_config.facet_fields['pub_date_si'].range = true
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should show the range limit with set boundaries' do
|
36
|
+
visit '/catalog'
|
37
|
+
click_button 'Publication Date Sort'
|
38
|
+
expect(page).to have_field :range_pub_date_si_begin, with: '1990'
|
39
|
+
expect(page).to have_field :range_pub_date_si_end, with: '2000'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
24
43
|
describe '"Unknown" link' do
|
25
44
|
context 'when in the facet (e.g. non-xhr)' do
|
26
45
|
it 'is displayed' do
|
@@ -40,6 +40,10 @@ describe "Blacklight Range Limit" do
|
|
40
40
|
I18n.backend.store_translations(:en, blacklight: {search: {fields: {facet: {pub_date_si: 'Publication Date I18n'}}}})
|
41
41
|
end
|
42
42
|
|
43
|
+
after do
|
44
|
+
I18n.backend.store_translations(:en, blacklight: {search: {fields: {facet: {pub_date_si: 'Publication Date Sort'}}}})
|
45
|
+
end
|
46
|
+
|
43
47
|
it 'should render the I18n label' do
|
44
48
|
visit search_catalog_path
|
45
49
|
click_link 'View distribution'
|
@@ -4,6 +4,10 @@ RSpec.describe BlacklightRangeLimit::SegmentCalculation do
|
|
4
4
|
let(:dummy_class) do
|
5
5
|
Class.new do
|
6
6
|
include BlacklightRangeLimit::SegmentCalculation
|
7
|
+
|
8
|
+
def blacklight_config
|
9
|
+
Blacklight::Configuration.new
|
10
|
+
end
|
7
11
|
end
|
8
12
|
end
|
9
13
|
|
@@ -45,5 +49,15 @@ RSpec.describe BlacklightRangeLimit::SegmentCalculation do
|
|
45
49
|
'The min date must be before the max date'
|
46
50
|
end
|
47
51
|
end
|
52
|
+
|
53
|
+
context 'when a field that does not exist is passed in' do
|
54
|
+
let(:min) { 100 }
|
55
|
+
let(:max) { 800 }
|
56
|
+
let(:solr_field) { 'i_am_not_real' }
|
57
|
+
|
58
|
+
it 'returns the original solr_params (and does not raise an error)' do
|
59
|
+
expect(subject).to eq({})
|
60
|
+
end
|
61
|
+
end
|
48
62
|
end
|
49
63
|
end
|
@@ -0,0 +1,120 @@
|
|
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: '/remove'
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'does not return any content when the range parameter invalid' do
|
13
|
+
params = ActionController::Parameters.new(range: 'garbage')
|
14
|
+
|
15
|
+
expect(helper.render_constraints_filters(params)).to eq ''
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'renders a constraint for the given data in the range param' do
|
19
|
+
params = ActionController::Parameters.new(
|
20
|
+
range: { range_field: { 'begin' => 1900, 'end' => 2000 } }
|
21
|
+
)
|
22
|
+
constraints = helper.render_constraints_filters(params)
|
23
|
+
|
24
|
+
expect(constraints).to have_css(
|
25
|
+
'.constraint .filter-name', text: 'Date Range'
|
26
|
+
)
|
27
|
+
expect(constraints).to have_css(
|
28
|
+
'.constraint .filter-value', text: '1900 to 2000'
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'render_search_to_s_filters' do
|
34
|
+
before do
|
35
|
+
allow(helper).to receive_messages(facet_field_label: 'Date Range')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'does not return any content when the range parameter invalid' do
|
39
|
+
params = ActionController::Parameters.new(range: 'garbage')
|
40
|
+
|
41
|
+
expect(helper.render_search_to_s_filters(params)).to eq ''
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'renders a constraint for the given data in the range param' do
|
45
|
+
params = ActionController::Parameters.new(
|
46
|
+
range: { range_field: { 'begin' => 1900, 'end' => 2000 } }
|
47
|
+
)
|
48
|
+
constraints = helper.render_search_to_s_filters(params)
|
49
|
+
|
50
|
+
expect(constraints).to have_css(
|
51
|
+
'.constraint .filter-name', text: 'Date Range:'
|
52
|
+
)
|
53
|
+
expect(constraints).to have_css(
|
54
|
+
'.constraint .filter-values', text: '1900 to 2000'
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#range_params' do
|
60
|
+
it 'handles no range input' do
|
61
|
+
expect(
|
62
|
+
helper.send(:range_params, ActionController::Parameters.new(q: 'blah'))
|
63
|
+
).to eq({})
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'handles non-compliant range input' do
|
67
|
+
expect(
|
68
|
+
helper.send(:range_params, ActionController::Parameters.new(range: 'blah'))
|
69
|
+
).to eq({})
|
70
|
+
|
71
|
+
expect(
|
72
|
+
helper.send(:range_params, ActionController::Parameters.new(range: ['blah']))
|
73
|
+
).to eq({})
|
74
|
+
|
75
|
+
expect(
|
76
|
+
helper.send(:range_params, ActionController::Parameters.new(range: { 'wrong' => 'data' }))
|
77
|
+
).to eq({})
|
78
|
+
|
79
|
+
expect(
|
80
|
+
helper.send(
|
81
|
+
:range_params,
|
82
|
+
ActionController::Parameters.new(range: { field_name: { 'wrong' => 'data' } })
|
83
|
+
)
|
84
|
+
).to eq({})
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'returns the range parameters that are present' do
|
88
|
+
expect(
|
89
|
+
helper.send(
|
90
|
+
:range_params,
|
91
|
+
ActionController::Parameters.new(range: { field_name: { 'missing' => true } })
|
92
|
+
).permit!.to_h
|
93
|
+
).to eq({ 'field_name' => { 'missing' => true } })
|
94
|
+
|
95
|
+
expect(
|
96
|
+
helper.send(
|
97
|
+
:range_params,
|
98
|
+
ActionController::Parameters.new(range: { field_name: { 'begin' => '1800', 'end' => '1900' } })
|
99
|
+
).permit!.to_h
|
100
|
+
).to eq({ 'field_name' => { 'begin' => '1800', 'end' => '1900' } })
|
101
|
+
|
102
|
+
expect(
|
103
|
+
helper.send(
|
104
|
+
:range_params,
|
105
|
+
ActionController::Parameters.new(
|
106
|
+
range: {
|
107
|
+
field_name: { 'begin' => '1800', 'end' => '1900' },
|
108
|
+
field_name2: { 'begin' => '1800', 'end' => '1900' }
|
109
|
+
}
|
110
|
+
)
|
111
|
+
).permit!.to_h
|
112
|
+
).to eq(
|
113
|
+
{
|
114
|
+
'field_name' => { 'begin' => '1800', 'end' => '1900' },
|
115
|
+
'field_name2' => { 'begin' => '1800', 'end' => '1900' }
|
116
|
+
}
|
117
|
+
)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -30,4 +30,11 @@ class TestAppGenerator < Rails::Generators::Base
|
|
30
30
|
"\n config.add_facet_field 'pub_date_si', label: 'Publication Date Sort', range: true"
|
31
31
|
end
|
32
32
|
end
|
33
|
+
|
34
|
+
def assets
|
35
|
+
return if !defined?(Sprockets::VERSION) || Sprockets::VERSION < '4'
|
36
|
+
|
37
|
+
append_to_file 'app/assets/config/manifest.js', "\n//= link application.js"
|
38
|
+
empty_directory 'app/assets/images'
|
39
|
+
end
|
33
40
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blacklight_range_limit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Rochkind
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: blacklight
|
@@ -222,6 +222,7 @@ files:
|
|
222
222
|
- spec/fixtures/solr_documents/zero_year.yml
|
223
223
|
- spec/helpers/blacklight_range_limit_helper_spec.rb
|
224
224
|
- spec/lib/blacklight_range_limit/segment_calculation_spec.rb
|
225
|
+
- spec/lib/blacklight_range_limit/view_helper_override_helper_spec.rb
|
225
226
|
- spec/spec_helper.rb
|
226
227
|
- spec/test_app_templates/Gemfile.extra
|
227
228
|
- spec/test_app_templates/lib/generators/test_app_generator.rb
|
@@ -266,6 +267,7 @@ test_files:
|
|
266
267
|
- spec/fixtures/solr_documents/zero_year.yml
|
267
268
|
- spec/helpers/blacklight_range_limit_helper_spec.rb
|
268
269
|
- spec/lib/blacklight_range_limit/segment_calculation_spec.rb
|
270
|
+
- spec/lib/blacklight_range_limit/view_helper_override_helper_spec.rb
|
269
271
|
- spec/spec_helper.rb
|
270
272
|
- spec/test_app_templates/Gemfile.extra
|
271
273
|
- spec/test_app_templates/lib/generators/test_app_generator.rb
|