diff options
Diffstat (limited to 'activemodel/lib/active_model/type/float.rb')
-rw-r--r-- | activemodel/lib/active_model/type/float.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/activemodel/lib/active_model/type/float.rb b/activemodel/lib/active_model/type/float.rb new file mode 100644 index 0000000000..9dbe32e5a6 --- /dev/null +++ b/activemodel/lib/active_model/type/float.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module ActiveModel + module Type + class Float < Value # :nodoc: + include Helpers::Numeric + + def type + :float + end + + def type_cast_for_schema(value) + return "::Float::NAN" if value.try(:nan?) + case value + when ::Float::INFINITY then "::Float::INFINITY" + when -::Float::INFINITY then "-::Float::INFINITY" + else super + end + end + + alias serialize cast + + private + + def cast_value(value) + case value + when ::Float then value + when "Infinity" then ::Float::INFINITY + when "-Infinity" then -::Float::INFINITY + when "NaN" then ::Float::NAN + else value.to_f + end + end + end + end +end |