Skip to content

Commit

Permalink
Parse float value only once in number helpers
Browse files Browse the repository at this point in the history
Refactor number helpers output with safety handling to call float
parsing only once. Also remove 'erb' require.
  • Loading branch information
carlosantoniodasilva committed May 29, 2012
1 parent 68f23be commit ef3e696
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions actionpack/lib/action_view/helpers/number_helper.rb
Expand Up @@ -5,7 +5,6 @@
require 'active_support/core_ext/numeric' require 'active_support/core_ext/numeric'
require 'active_support/core_ext/string/output_safety' require 'active_support/core_ext/string/output_safety'
require 'active_support/number_helper' require 'active_support/number_helper'
require 'erb'


module ActionView module ActionView
# = Action View Number Helpers # = Action View Number Helpers
Expand Down Expand Up @@ -112,7 +111,7 @@ def number_to_phone(number, options = {})
def number_to_currency(number, options = {}) def number_to_currency(number, options = {})
return unless number return unless number
options = escape_unsafe_delimiters_and_separators(options.symbolize_keys) options = escape_unsafe_delimiters_and_separators(options.symbolize_keys)

wrap_with_output_safety_handling(number, options[:raise]){ ActiveSupport::NumberHelper.number_to_currency(number, options) } wrap_with_output_safety_handling(number, options[:raise]){ ActiveSupport::NumberHelper.number_to_currency(number, options) }
end end


Expand Down Expand Up @@ -155,7 +154,7 @@ def number_to_currency(number, options = {})
def number_to_percentage(number, options = {}) def number_to_percentage(number, options = {})
return unless number return unless number
options = escape_unsafe_delimiters_and_separators(options.symbolize_keys) options = escape_unsafe_delimiters_and_separators(options.symbolize_keys)

wrap_with_output_safety_handling(number, options[:raise]){ ActiveSupport::NumberHelper.number_to_percentage(number, options) } wrap_with_output_safety_handling(number, options[:raise]){ ActiveSupport::NumberHelper.number_to_percentage(number, options) }
end end


Expand Down Expand Up @@ -400,25 +399,26 @@ def number_to_human(number, options = {})
end end


private private

def escape_unsafe_delimiters_and_separators(options) def escape_unsafe_delimiters_and_separators(options)
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator] && !options[:separator].html_safe? 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[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter] && !options[:delimiter].html_safe?
options options
end end

def wrap_with_output_safety_handling(number, raise_on_invalid, &block) 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 formatted_number = yield

if valid_float?(number) || number.html_safe? if valid_float || number.html_safe?
formatted_number.html_safe formatted_number.html_safe
else else
formatted_number formatted_number
end end
end end

def valid_float?(number) def valid_float?(number)
!parse_float(number, false).nil? !parse_float(number, false).nil?
end end
Expand Down

0 comments on commit ef3e696

Please sign in to comment.