aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/core_ext/bigdecimal.rb4
-rw-r--r--activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb58
2 files changed, 39 insertions, 23 deletions
diff --git a/activesupport/lib/active_support/core_ext/bigdecimal.rb b/activesupport/lib/active_support/core_ext/bigdecimal.rb
index b442ae9655..d429078c91 100644
--- a/activesupport/lib/active_support/core_ext/bigdecimal.rb
+++ b/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
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