Skip to content

Commit ef3e696

Browse files
Parse float value only once in number helpers
Refactor number helpers output with safety handling to call float parsing only once. Also remove 'erb' require.
1 parent 68f23be commit ef3e696

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

actionpack/lib/action_view/helpers/number_helper.rb

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
require 'active_support/core_ext/numeric'
66
require 'active_support/core_ext/string/output_safety'
77
require 'active_support/number_helper'
8-
require 'erb'
98

109
module ActionView
1110
# = Action View Number Helpers
@@ -112,7 +111,7 @@ def number_to_phone(number, options = {})
112111
def number_to_currency(number, options = {})
113112
return unless number
114113
options = escape_unsafe_delimiters_and_separators(options.symbolize_keys)
115-
114+
116115
wrap_with_output_safety_handling(number, options[:raise]){ ActiveSupport::NumberHelper.number_to_currency(number, options) }
117116
end
118117

@@ -155,7 +154,7 @@ def number_to_currency(number, options = {})
155154
def number_to_percentage(number, options = {})
156155
return unless number
157156
options = escape_unsafe_delimiters_and_separators(options.symbolize_keys)
158-
157+
159158
wrap_with_output_safety_handling(number, options[:raise]){ ActiveSupport::NumberHelper.number_to_percentage(number, options) }
160159
end
161160

@@ -400,25 +399,26 @@ def number_to_human(number, options = {})
400399
end
401400

402401
private
403-
402+
404403
def escape_unsafe_delimiters_and_separators(options)
405404
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator] && !options[:separator].html_safe?
406405
options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter] && !options[:delimiter].html_safe?
407406
options
408407
end
409-
408+
410409
def wrap_with_output_safety_handling(number, raise_on_invalid, &block)
411-
raise InvalidNumberError, number if raise_on_invalid && !valid_float?(number)
412-
410+
valid_float = valid_float?(number)
411+
raise InvalidNumberError, number if raise_on_invalid && !valid_float
412+
413413
formatted_number = yield
414-
415-
if valid_float?(number) || number.html_safe?
414+
415+
if valid_float || number.html_safe?
416416
formatted_number.html_safe
417417
else
418418
formatted_number
419-
end
419+
end
420420
end
421-
421+
422422
def valid_float?(number)
423423
!parse_float(number, false).nil?
424424
end

0 commit comments

Comments
 (0)