Sha256: 55c2b0198aa38a2bcd212afdb4bf0b6482ec45e99422414f789f1575cf67f2d4

Contents?: true

Size: 1.24 KB

Versions: 25

Compression:

Stored size: 1.24 KB

Contents

require 'yaml'

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
    end
  end
end

Version data entries

25 entries across 25 versions & 7 rubygems

Version Path
activesupport-2.1.0 lib/active_support/core_ext/bigdecimal/conversions.rb
antfarm-0.3.0 rails/vendor/rails/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb
antfarm-0.4.0 rails/vendor/rails/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb
radiant-0.7.0 vendor/rails/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb
radiant-0.7.1 vendor/rails/activesupport/lib/active_support/core_ext/bigdecimal/conversions.rb