mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added format to percentage
This commit is contained in:
parent
eb1b729408
commit
c0a3fe3c03
3 changed files with 11 additions and 2 deletions
|
@ -169,6 +169,8 @@ module ActionView
|
||||||
# * <tt>:delimiter</tt> - Sets the thousands delimiter (defaults to "").
|
# * <tt>:delimiter</tt> - Sets the thousands delimiter (defaults to "").
|
||||||
# * <tt>:strip_insignificant_zeros</tt> - If +true+ removes insignificant zeros after the decimal separator
|
# * <tt>:strip_insignificant_zeros</tt> - If +true+ removes insignificant zeros after the decimal separator
|
||||||
# (defaults to +false+).
|
# (defaults to +false+).
|
||||||
|
# * <tt>:format</tt> - Specifies the format of the percentage string
|
||||||
|
# The number field is <tt>%n</tt> (defaults to "%n%").
|
||||||
# * <tt>:raise</tt> - If true, raises +InvalidNumberError+ when the argument is invalid.
|
# * <tt>:raise</tt> - If true, raises +InvalidNumberError+ when the argument is invalid.
|
||||||
#
|
#
|
||||||
# ==== Examples
|
# ==== Examples
|
||||||
|
@ -180,6 +182,7 @@ module ActionView
|
||||||
# number_to_percentage(302.24398923423, :precision => 5) # => 302.24399%
|
# number_to_percentage(302.24398923423, :precision => 5) # => 302.24399%
|
||||||
# number_to_percentage(1000, :locale => :fr) # => 1 000,000%
|
# number_to_percentage(1000, :locale => :fr) # => 1 000,000%
|
||||||
# number_to_percentage("98a") # => 98a%
|
# number_to_percentage("98a") # => 98a%
|
||||||
|
# number_to_percentage(100, :format => "%n %") # => 100 %
|
||||||
#
|
#
|
||||||
# number_to_percentage("98a", :raise => true) # => InvalidNumberError
|
# number_to_percentage("98a", :raise => true) # => InvalidNumberError
|
||||||
def number_to_percentage(number, options = {})
|
def number_to_percentage(number, options = {})
|
||||||
|
@ -193,13 +196,17 @@ module ActionView
|
||||||
|
|
||||||
options = options.reverse_merge(defaults)
|
options = options.reverse_merge(defaults)
|
||||||
|
|
||||||
|
format = options[:format] || "%n%"
|
||||||
|
|
||||||
begin
|
begin
|
||||||
"#{number_with_precision(number, options.merge(:raise => true))}%".html_safe
|
value = number_with_precision(number, options.merge(:raise => true))
|
||||||
|
format.gsub(/%n/, value).html_safe
|
||||||
rescue InvalidNumberError => e
|
rescue InvalidNumberError => e
|
||||||
if options[:raise]
|
if options[:raise]
|
||||||
raise
|
raise
|
||||||
else
|
else
|
||||||
e.number.to_s.html_safe? ? "#{e.number}%".html_safe : "#{e.number}%"
|
formatted_number = e.number.to_s.html_safe? ? format.gsub(/%n/, e.number).html_safe : format.gsub(/%n/, e.number)
|
||||||
|
formatted_number.html_safe? ? formatted_number.html_safe : formatted_number
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
# precision:
|
# precision:
|
||||||
# significant: false
|
# significant: false
|
||||||
# strip_insignificant_zeros: false
|
# strip_insignificant_zeros: false
|
||||||
|
format: "%n%"
|
||||||
|
|
||||||
# Used in number_to_precision()
|
# Used in number_to_precision()
|
||||||
precision:
|
precision:
|
||||||
|
|
|
@ -57,6 +57,7 @@ class NumberHelperTest < ActionView::TestCase
|
||||||
assert_equal("1000.000%", number_to_percentage("1000"))
|
assert_equal("1000.000%", number_to_percentage("1000"))
|
||||||
assert_equal("123.4%", number_to_percentage(123.400, :precision => 3, :strip_insignificant_zeros => true))
|
assert_equal("123.4%", number_to_percentage(123.400, :precision => 3, :strip_insignificant_zeros => true))
|
||||||
assert_equal("1.000,000%", number_to_percentage(1000, :delimiter => '.', :separator => ','))
|
assert_equal("1.000,000%", number_to_percentage(1000, :delimiter => '.', :separator => ','))
|
||||||
|
assert_equal("1000.000 %", number_to_percentage(1000, :format => "%n %"))
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_number_with_delimiter
|
def test_number_with_delimiter
|
||||||
|
|
Loading…
Reference in a new issue