Skip to content

Commit 74fabdf

Browse files
Do not mutate given options hash in number helpers
1 parent c753e3a commit 74fabdf

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

actionpack/lib/action_view/helpers/number_helper.rb

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def initialize(number)
5757
# # => +1.123.555.1234 x 1343
5858
def number_to_phone(number, options = {})
5959
return unless number
60-
options.symbolize_keys!
60+
options = options.symbolize_keys
6161

6262
parse_float(number, true) if options[:raise]
6363

@@ -118,8 +118,7 @@ def number_to_phone(number, options = {})
118118
# # => 1234567890,50 £
119119
def number_to_currency(number, options = {})
120120
return unless number
121-
122-
options.symbolize_keys!
121+
options = options.symbolize_keys
123122

124123
currency = translations_for('currency', options[:locale])
125124
currency[:negative_format] ||= "-" + currency[:format] if currency[:format]
@@ -181,8 +180,7 @@ def number_to_currency(number, options = {})
181180
# number_to_percentage("98a", :raise => true) # => InvalidNumberError
182181
def number_to_percentage(number, options = {})
183182
return unless number
184-
185-
options.symbolize_keys!
183+
options = options.symbolize_keys
186184

187185
defaults = format_translations('percentage', options[:locale])
188186
options = defaults.merge!(options)
@@ -227,7 +225,7 @@ def number_to_percentage(number, options = {})
227225
#
228226
# number_with_delimiter("112a", :raise => true) # => raise InvalidNumberError
229227
def number_with_delimiter(number, options = {})
230-
options.symbolize_keys!
228+
options = options.symbolize_keys
231229

232230
parse_float(number, options[:raise]) or return number
233231

@@ -271,7 +269,7 @@ def number_with_delimiter(number, options = {})
271269
# number_with_precision(1111.2345, :precision => 2, :separator => ',', :delimiter => '.')
272270
# # => 1.111,23
273271
def number_with_precision(number, options = {})
274-
options.symbolize_keys!
272+
options = options.symbolize_keys
275273

276274
number = (parse_float(number, options[:raise]) or return number)
277275

@@ -338,7 +336,7 @@ def number_with_precision(number, options = {})
338336
# number_to_human_size(1234567890123, :precision => 5) # => "1.1229 TB"
339337
# number_to_human_size(524288000, :precision => 5) # => "500 MB"
340338
def number_to_human_size(number, options = {})
341-
options.symbolize_keys!
339+
options = options.symbolize_keys
342340

343341
number = (parse_float(number, options[:raise]) or return number)
344342

@@ -448,7 +446,7 @@ def number_to_human_size(number, options = {})
448446
# number_to_human(0.34, :units => :distance) # => "34 centimeters"
449447
#
450448
def number_to_human(number, options = {})
451-
options.symbolize_keys!
449+
options = options.symbolize_keys
452450

453451
number = (parse_float(number, options[:raise]) or return number)
454452

actionpack/test/template/number_helper_test.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,31 @@ def test_number_helpers_should_return_nil_when_given_nil
268268
assert_nil number_to_human(nil)
269269
end
270270

271+
def test_number_helpers_do_not_mutate_options_hash
272+
options = { 'raise' => true }
273+
274+
number_to_phone(1, options)
275+
assert_equal({ 'raise' => true }, options)
276+
277+
number_to_currency(1, options)
278+
assert_equal({ 'raise' => true }, options)
279+
280+
number_to_percentage(1, options)
281+
assert_equal({ 'raise' => true }, options)
282+
283+
number_with_delimiter(1, options)
284+
assert_equal({ 'raise' => true }, options)
285+
286+
number_with_precision(1, options)
287+
assert_equal({ 'raise' => true }, options)
288+
289+
number_to_human_size(1, options)
290+
assert_equal({ 'raise' => true }, options)
291+
292+
number_to_human(1, options)
293+
assert_equal({ 'raise' => true }, options)
294+
end
295+
271296
def test_number_helpers_should_return_non_numeric_param_unchanged
272297
assert_equal("+1-x x 123", number_to_phone("x", :country_code => 1, :extension => 123))
273298
assert_equal("x", number_to_phone("x"))

0 commit comments

Comments
 (0)