aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb
diff options
context:
space:
mode:
authorMichael Koziarski <michael@koziarski.com>2008-03-26 02:43:38 +0000
committerMichael Koziarski <michael@koziarski.com>2008-03-26 02:43:38 +0000
commitdcbdd004fc3b28ec976ffa946954f1700e3a553d (patch)
treebc813a1fb3b0046aa2e9c4d2e17c5f331367e442 /activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb
parentc10b2255b580de9b763bab28872ebf3434a16d8f (diff)
downloadrails-dcbdd004fc3b28ec976ffa946954f1700e3a553d.tar.gz
rails-dcbdd004fc3b28ec976ffa946954f1700e3a553d.tar.bz2
rails-dcbdd004fc3b28ec976ffa946954f1700e3a553d.zip
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
Diffstat (limited to 'activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb')
-rw-r--r--activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb58
1 files changed, 35 insertions, 23 deletions
diff --git a/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb b/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb
index d2504302cd..d2b01b1b8d 100644
--- a/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb
+++ b/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