Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
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.
  • Loading branch information...
commit ef3e696d1fbfde7a77592bc1fd24586a214c505d 1 parent 68f23be
@carlosantoniodasilva carlosantoniodasilva authored
Showing with 11 additions and 11 deletions.
  1. +11 −11 actionpack/lib/action_view/helpers/number_helper.rb
View
22 actionpack/lib/action_view/helpers/number_helper.rb
@@ -5,7 +5,6 @@
require 'active_support/core_ext/numeric'
require 'active_support/core_ext/string/output_safety'
require 'active_support/number_helper'
-require 'erb'
module ActionView
# = Action View Number Helpers
@@ -112,7 +111,7 @@ def number_to_phone(number, options = {})
def number_to_currency(number, options = {})
return unless number
options = escape_unsafe_delimiters_and_separators(options.symbolize_keys)
-
+
wrap_with_output_safety_handling(number, options[:raise]){ ActiveSupport::NumberHelper.number_to_currency(number, options) }
end
@@ -155,7 +154,7 @@ def number_to_currency(number, options = {})
def number_to_percentage(number, options = {})
return unless number
options = escape_unsafe_delimiters_and_separators(options.symbolize_keys)
-
+
wrap_with_output_safety_handling(number, options[:raise]){ ActiveSupport::NumberHelper.number_to_percentage(number, options) }
end
@@ -400,25 +399,26 @@ def number_to_human(number, options = {})
end
private
-
+
def escape_unsafe_delimiters_and_separators(options)
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator] && !options[:separator].html_safe?
options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter] && !options[:delimiter].html_safe?
options
end
-
+
def wrap_with_output_safety_handling(number, raise_on_invalid, &block)
- raise InvalidNumberError, number if raise_on_invalid && !valid_float?(number)
-
+ valid_float = valid_float?(number)
+ raise InvalidNumberError, number if raise_on_invalid && !valid_float
+
formatted_number = yield
-
- if valid_float?(number) || number.html_safe?
+
+ if valid_float || number.html_safe?
formatted_number.html_safe
else
formatted_number
- end
+ end
end
-
+
def valid_float?(number)
!parse_float(number, false).nil?
end
Please sign in to comment.
Something went wrong with that request. Please try again.