@@ -26,13 +26,7 @@ def add_range_limit_params(solr_params)
26
26
27
27
selected_value = search_state . filter ( config . key ) . values . first
28
28
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 )
36
30
37
31
# If we have both ends of a range
38
32
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)
98
92
end
99
93
end
100
94
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
101
120
end
102
121
end
0 commit comments