Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Standardise the implementation of the extensions to BigDecimal. Closes

…#10608 [mikong]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9091 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit dcbdd004fc3b28ec976ffa946954f1700e3a553d 1 parent c10b225
@NZKoz NZKoz authored
View
4 activesupport/lib/active_support/core_ext/bigdecimal.rb
@@ -1,2 +1,6 @@
require 'bigdecimal'
require 'active_support/core_ext/bigdecimal/conversions'
+
+class BigDecimal#:nodoc:
+ include ActiveSupport::CoreExtensions::BigDecimal::Conversions
+end
View
58 activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb
@@ -1,29 +1,41 @@
require 'yaml'
-class BigDecimal #:nodoc:
- alias :_original_to_s :to_s
- def to_s(format="F")
- _original_to_s(format)
- end
-
- yaml_as "tag:yaml.org,2002:float"
- def to_yaml( opts = {} )
- YAML::quick_emit( nil, opts ) do |out|
- # This emits the number without any scientific notation.
- # I prefer it to using self.to_f.to_s, which would lose precision.
- #
- # Note that YAML allows that when reconsituting floats
- # to native types, some precision may get lost.
- # There is no full precision real YAML tag that I am aware of.
- str = self.to_s
- if str == "Infinity"
- str = ".Inf"
- elsif str == "-Infinity"
- str = "-.Inf"
- elsif str == "NaN"
- str = ".NaN"
+module ActiveSupport #:nodoc:
+ module CoreExtensions #:nodoc:
+ module BigDecimal #:nodoc:
+ module Conversions
+ def self.included(base) #:nodoc:
+ base.instance_eval do
+ alias_method :_original_to_s, :to_s
+ alias_method :to_s, :to_formatted_s
+ end
+ end
+
+ def to_formatted_s(format="F")
+ _original_to_s(format)
+ end
+
+ yaml_as "tag:yaml.org,2002:float"
+ def to_yaml( opts = {} )
+ YAML::quick_emit( nil, opts ) do |out|
+ # This emits the number without any scientific notation.
+ # I prefer it to using self.to_f.to_s, which would lose precision.
+ #
+ # Note that YAML allows that when reconsituting floats
+ # to native types, some precision may get lost.
+ # There is no full precision real YAML tag that I am aware of.
+ str = self.to_s
+ if str == "Infinity"
+ str = ".Inf"
+ elsif str == "-Infinity"
+ str = "-.Inf"
+ elsif str == "NaN"
+ str = ".NaN"
+ end
+ out.scalar( "tag:yaml.org,2002:float", str, :plain )
+ end
+ end
end
- out.scalar( "tag:yaml.org,2002:float", str, :plain )
end
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.