Skip to content

Commit

Permalink
Allocation free Integer#to_s
Browse files Browse the repository at this point in the history
  • Loading branch information
byroot committed Jan 19, 2017
1 parent 190b82a commit b9bda7f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 16 deletions.
31 changes: 15 additions & 16 deletions activesupport/lib/active_support/core_ext/numeric/conversions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -99,31 +99,30 @@ module ActiveSupport::NumericWithFormat
# 1234567.to_s(:human, precision: 1,
# separator: ',',
# significant: false) # => "1,2 Million"
def to_s(*args)
format, options = args
options ||= {}

def to_s(format = nil, options = nil)
case format
when nil
super()
when Integer, String
super(format)
when :phone
return ActiveSupport::NumberHelper.number_to_phone(self, options)
return ActiveSupport::NumberHelper.number_to_phone(self, options || {})
when :currency
return ActiveSupport::NumberHelper.number_to_currency(self, options)
return ActiveSupport::NumberHelper.number_to_currency(self, options || {})
when :percentage
return ActiveSupport::NumberHelper.number_to_percentage(self, options)
return ActiveSupport::NumberHelper.number_to_percentage(self, options || {})
when :delimited
return ActiveSupport::NumberHelper.number_to_delimited(self, options)
return ActiveSupport::NumberHelper.number_to_delimited(self, options || {})
when :rounded
return ActiveSupport::NumberHelper.number_to_rounded(self, options)
return ActiveSupport::NumberHelper.number_to_rounded(self, options || {})
when :human
return ActiveSupport::NumberHelper.number_to_human(self, options)
return ActiveSupport::NumberHelper.number_to_human(self, options || {})
when :human_size
return ActiveSupport::NumberHelper.number_to_human_size(self, options)
return ActiveSupport::NumberHelper.number_to_human_size(self, options || {})
when Symbol
super()
else
if is_a?(Float) || format.is_a?(Symbol)
super()
else
super
end
super(format)
end
end
end
Expand Down
4 changes: 4 additions & 0 deletions activesupport/test/core_ext/numeric_ext_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,10 @@ def test_default_to_s

assert_equal "1000010.0", BigDecimal("1000010").to_s
assert_equal "10000 10.0", BigDecimal("1000010").to_s("5F")

assert_raises TypeError do
1.to_s({})
end
end

def test_in_milliseconds
Expand Down

0 comments on commit b9bda7f

Please sign in to comment.