Sha256: bd2eb39e812fec105c0b9698507157632ed957e9a36855b1e82f6db5b811d918
Contents?: true
Size: 1.3 KB
Versions: 3
Compression:
Stored size: 1.3 KB
Contents
module DataModel # A float type. class Builtin::Float < Type include Errors # Arguments for the float type. class Arguments < Struct prop :optional, :boolean, default: false prop :min, :numeric, default: nil prop :max, :numeric, default: nil end # read a value, and validate it # @param val [Object] the value to read # @param coerce [Boolean] whether to coerce the value # @return [Array(Object, Error)] the result of reading the value 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(type_name)) return [val, err] end if !val.is_a?(Float) && !coerce err.add(type_error(type_name, val)) return [val, err] end if !val.is_a?(Float) && coerce if val.is_a?(String) || val.is_a?(Numeric) val = Float(val) elsif val.respond_to?(:to_f) val = val.to_f end if !val.is_a?(Float) err.add(coerce_error(type_name, val)) return [val, err] end end 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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
data_model-0.6.1 | lib/data_model/builtin/float.rb |
data_model-0.6.0 | lib/data_model/builtin/float.rb |
data_model-0.5.0 | lib/data_model/builtin/float.rb |