Sha256: 8c1a013737e6cdce64784190e0711f17909b39c26873e7d9e2d3772d85ffb2fc
Contents?: true
Size: 1.35 KB
Versions: 4
Compression:
Stored size: 1.35 KB
Contents
# typed: strict module DataModel class Builtin::BigDecimal < Type include Errors class Arguments < T::Struct prop :optional, T::Boolean, default: false prop :min, T.nilable(T.any(Integer, Float, Rational, BigDecimal)), default: nil prop :max, T.nilable(T.any(Integer, Float, Rational, BigDecimal)), default: nil end sig { override.params(val: Object, coerce: T::Boolean).returns(TTypeResult) } def read(val, coerce: false) err = Error.new args = Arguments.new(type_args) if args.optional && val.nil? return [val, err] end if !args.optional && val.nil? err.add(missing_error(BigDecimal)) return [val, err] end if !val.is_a?(BigDecimal) && !coerce err.add(type_error(BigDecimal, val)) return [val, err] end if !val.is_a?(BigDecimal) && coerce if val.is_a?(String) || val.is_a?(Numeric) val = BigDecimal(T.unsafe(val)) elsif val.respond_to?(:to_d) val = T.cast(T.unsafe(val).to_d, BigDecimal) end if !val.is_a?(BigDecimal) err.add(coerce_error(BigDecimal, val)) return [val, err] end end val = T.cast(val, BigDecimal) min = args.min if min && val <= min err.add(min_error(min, val)) return [val, err] end max = args.max if max && val <= max err.add(max_error(max, val)) return [val, err] end [val, err] end end end
Version data entries
4 entries across 4 versions & 1 rubygems