Merge pull request #17816 from byroot/prevent-numeric-to-s-to-allocate-an-array
Prevent Numeric#to_s from allocating an array
This commit is contained in:
commit
4eb68d8ed4
@ -3,14 +3,13 @@
|
||||
|
||||
class BigDecimal
|
||||
DEFAULT_STRING_FORMAT = 'F'
|
||||
def to_formatted_s(*args)
|
||||
if args[0].is_a?(Symbol)
|
||||
super
|
||||
alias_method :to_default_s, :to_s
|
||||
|
||||
def to_s(format = nil, options = nil)
|
||||
if format.is_a?(Symbol)
|
||||
to_formatted_s(format, options || {})
|
||||
else
|
||||
format = args[0] || DEFAULT_STRING_FORMAT
|
||||
_original_to_s(format)
|
||||
to_default_s(format || DEFAULT_STRING_FORMAT)
|
||||
end
|
||||
end
|
||||
alias_method :_original_to_s, :to_s
|
||||
alias_method :to_s, :to_formatted_s
|
||||
end
|
||||
|
@ -118,18 +118,28 @@ def to_formatted_s(format = :default, options = {})
|
||||
end
|
||||
end
|
||||
|
||||
[Float, Fixnum, Bignum, BigDecimal].each do |klass|
|
||||
klass.send(:alias_method, :to_default_s, :to_s)
|
||||
|
||||
klass.send(:define_method, :to_s) do |*args|
|
||||
if args[0].is_a?(Symbol)
|
||||
format = args[0]
|
||||
options = args[1] || {}
|
||||
|
||||
self.to_formatted_s(format, options)
|
||||
else
|
||||
to_default_s(*args)
|
||||
[Fixnum, Bignum].each do |klass|
|
||||
klass.class_eval do
|
||||
alias_method :to_default_s, :to_s
|
||||
def to_s(base_or_format = 10, options = nil)
|
||||
if base_or_format.is_a?(Symbol)
|
||||
to_formatted_s(base_or_format, options || {})
|
||||
else
|
||||
to_default_s(base_or_format)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Float.class_eval do
|
||||
alias_method :to_default_s, :to_s
|
||||
def to_s(*args)
|
||||
if args.empty?
|
||||
to_default_s
|
||||
else
|
||||
to_formatted_s(*args)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user