Skip to content

Commit 85a06b0

Browse files
committed
range values clamped by config'd min and max, to avoid solr error
1 parent 0d16d99 commit 85a06b0

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

lib/blacklight_range_limit.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ def self.default_range_config
3131
chart_segment_border_color: 'rgb(54, 162, 235)',
3232
chart_segment_bg_color: 'rgba(54, 162, 235, 0.5)',
3333
chart_aspect_ratio: 2,
34-
assumed_boundaries: nil
34+
assumed_boundaries: nil,
35+
min_value: -2_147_483_648, # solr intfield min and max
36+
max_value: 2_147_483_648
3537
},
3638
filter_class: BlacklightRangeLimit::FilterField,
3739
presenter: BlacklightRangeLimit::FacetFieldPresenter,

lib/blacklight_range_limit/range_limit_builder.rb

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,7 @@ def add_range_limit_params(solr_params)
2626

2727
selected_value = search_state.filter(config.key).values.first
2828

29-
range = if selected_value.is_a? Range
30-
selected_value
31-
elsif range_config[:assumed_boundaries]
32-
Range.new(*range_config[:assumed_boundaries])
33-
else
34-
nil
35-
end
29+
range = bl_create_selected_range_value(selected_value, config)
3630

3731
# If we have both ends of a range
3832
add_range_segments_to_solr!(solr_params, field_key, range.begin, range.end) if range && range.count != Float::INFINITY
@@ -98,5 +92,30 @@ def facet_value_to_fq_string(facet_field, value, use_local_params: true)
9892
end
9993
end
10094

95+
# @returns Range or nil
96+
#
97+
# Range created from a range value or from assumed boundaries if present, and clamped between min and max
98+
def bl_create_selected_range_value(selected_value, field_config)
99+
range_config = field_config.range_config
100+
101+
range = if selected_value.is_a? Range
102+
selected_value
103+
elsif range_config[:assumed_boundaries]
104+
Range.new(*range_config[:assumed_boundaries])
105+
else
106+
nil
107+
end
108+
109+
# clamp between config'd min and max
110+
min = range_config[:min_value]
111+
max = range_config[:max_value]
112+
113+
range = Range.new(
114+
(range.begin.clamp(min, max) if range.begin),
115+
(range.end.clamp(min, max) if range.end),
116+
) if range
117+
118+
range
119+
end
101120
end
102121
end

0 commit comments

Comments
 (0)