@@ -37,15 +37,16 @@ def aggs(*args, **kwargs)
3737
3838 def aggs! ( *args , **kwargs )
3939 check_loaded
40- @options [ : aggs] || = { }
40+ aggs = { }
4141 args . flatten . each do |arg |
4242 if arg . is_a? ( Hash )
43- @options [ : aggs] . merge! ( arg )
43+ aggs . merge! ( arg )
4444 else
45- @options [ : aggs] [ arg ] = { }
45+ aggs [ arg ] = { }
4646 end
4747 end
48- @options [ :aggs ] . merge! ( kwargs )
48+ aggs . merge! ( kwargs )
49+ @options [ :aggs ] = ( @options [ :aggs ] || { } ) . merge ( aggs )
4950 self
5051 end
5152
@@ -69,7 +70,7 @@ def body_options(value)
6970
7071 def body_options! ( value )
7172 check_loaded
72- ( @options [ :body_options ] ||= { } ) . merge! ( value )
73+ @options [ :body_options ] = ( @options [ :body_options ] || { } ) . merge ( value )
7374 self
7475 end
7576
@@ -94,7 +95,7 @@ def boost_by!(value)
9495 elsif !value . is_a? ( Hash )
9596 value = { value => { factor : 1 } }
9697 end
97- ( @options [ :boost_by ] ||= { } ) . merge! ( value )
98+ @options [ :boost_by ] = ( @options [ :boost_by ] || { } ) . merge ( value )
9899 self
99100 end
100101
@@ -106,7 +107,7 @@ def boost_by_distance!(value)
106107 check_loaded
107108 # legacy format
108109 value = { value [ :field ] => value . except ( :field ) } if value [ :field ]
109- ( @options [ :boost_by_distance ] ||= { } ) . merge! ( value )
110+ @options [ :boost_by_distance ] = ( @options [ :boost_by_distance ] || { } ) . merge ( value )
110111 self
111112 end
112113
@@ -116,7 +117,7 @@ def boost_by_recency(value)
116117
117118 def boost_by_recency! ( value )
118119 check_loaded
119- ( @options [ :boost_by_recency ] ||= { } ) . merge! ( value )
120+ @options [ :boost_by_recency ] = ( @options [ :boost_by_recency ] || { } ) . merge ( value )
120121 self
121122 end
122123
@@ -127,7 +128,7 @@ def boost_where(value)
127128 def boost_where! ( value )
128129 check_loaded
129130 # TODO merge duplicate fields
130- ( @options [ :boost_where ] ||= { } ) . merge! ( value )
131+ @options [ :boost_where ] = ( @options [ :boost_where ] || { } ) . merge ( value )
131132 self
132133 end
133134
@@ -197,7 +198,8 @@ def exclude(*values)
197198
198199 def exclude! ( *values )
199200 check_loaded
200- ( @options [ :exclude ] ||= [ ] ) . concat ( values . flatten )
201+ @options [ :exclude ] ||= [ ]
202+ @options [ :exclude ] += values . flatten
201203 self
202204 end
203205
@@ -217,7 +219,8 @@ def fields(*values)
217219
218220 def fields! ( *values )
219221 check_loaded
220- ( @options [ :fields ] ||= [ ] ) . concat ( values . flatten )
222+ @options [ :fields ] ||= [ ]
223+ @options [ :fields ] += values . flatten
221224 self
222225 end
223226
@@ -237,7 +240,8 @@ def includes(*values)
237240
238241 def includes! ( *values )
239242 check_loaded
240- ( @options [ :includes ] ||= [ ] ) . concat ( values . flatten )
243+ @options [ :includes ] ||= [ ]
244+ @options [ :includes ] += values . flatten
241245 self
242246 end
243247
@@ -251,7 +255,8 @@ def index_name!(*values)
251255 if values . all? { |v | v . respond_to? ( :searchkick_index ) }
252256 models! ( *values )
253257 else
254- ( @options [ :index_name ] ||= [ ] ) . concat ( values )
258+ @options [ :index_name ] ||= [ ]
259+ @options [ :index_name ] += values
255260 self
256261 end
257262 end
@@ -262,7 +267,7 @@ def indices_boost(value)
262267
263268 def indices_boost! ( value )
264269 check_loaded
265- ( @options [ :indices_boost ] ||= { } ) . merge! ( value )
270+ @options [ :indices_boost ] = ( @options [ :indices_boost ] || { } ) . merge ( value )
266271 self
267272 end
268273
@@ -327,7 +332,8 @@ def models(*values)
327332
328333 def models! ( *values )
329334 check_loaded
330- ( @options [ :models ] ||= [ ] ) . concat ( values . flatten )
335+ @options [ :models ] ||= [ ]
336+ @options [ :models ] += values . flatten
331337 self
332338 end
333339
@@ -337,7 +343,8 @@ def model_includes(*values)
337343
338344 def model_includes! ( *values )
339345 check_loaded
340- ( @options [ :model_includes ] ||= [ ] ) . concat ( values . flatten )
346+ @options [ :model_includes ] ||= [ ]
347+ @options [ :model_includes ] += values . flatten
341348 self
342349 end
343350
@@ -381,7 +388,8 @@ def order(*values)
381388
382389 def order! ( *values )
383390 check_loaded
384- ( @options [ :order ] ||= [ ] ) . concat ( values . flatten )
391+ @options [ :order ] ||= [ ]
392+ @options [ :order ] += values . flatten
385393 self
386394 end
387395
@@ -444,7 +452,7 @@ def request_params(value)
444452
445453 def request_params! ( value )
446454 check_loaded
447- ( @options [ :request_params ] ||= { } ) . merge! ( value )
455+ @options [ :request_params ] = ( @options [ :request_params ] || { } ) . merge ( value )
448456 self
449457 end
450458
@@ -494,7 +502,8 @@ def select(*values, &block)
494502
495503 def select! ( *values )
496504 check_loaded
497- ( @options [ :select ] ||= [ ] ) . concat ( values . flatten )
505+ @options [ :select ] ||= [ ]
506+ @options [ :select ] += values . flatten
498507 self
499508 end
500509
@@ -558,7 +567,8 @@ def type(*values)
558567
559568 def type! ( *values )
560569 check_loaded
561- ( @options [ :type ] ||= [ ] ) . concat ( values . flatten )
570+ @options [ :type ] ||= [ ]
571+ @options [ :type ] += values . flatten
562572 self
563573 end
564574
@@ -695,7 +705,8 @@ def ensure_permitted(obj)
695705
696706 def initialize_copy ( other )
697707 super
698- @options = @options . deep_dup
708+ # shallow dup and avoid updating values in-place
709+ @options = @options . dup
699710 @execute = nil
700711 end
701712 end
0 commit comments