Sha256: 14bd13dc5915e01bc3dddeab6cef2ad1c1b5ac05627e28768d4dac1dc8a73016
Contents?: true
Size: 1.71 KB
Versions: 4
Compression:
Stored size: 1.71 KB
Contents
# typed: strict module DataModel class Builtin::Array < Type include Errors class Arguments < T::Struct prop :optional, T::Boolean, default: false prop :wrap_single_value, 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 prop :length, T.nilable(T.any(Integer, Float, Rational, BigDecimal)), default: nil end # support either :string shorthand or [:string, {optional: true}] sig { override.params(params: T::Array[Object]).void } def configure(params) if params.first.is_a?(Array) params = params.first end params = T.cast(params, TSchema) node = Scanner.scan(params) type = instantiate(node.type, args: node.args, params: node.params) @child_type = T.let(type, T.nilable(Type)) end sig { returns(Type) } def child_type if @child_type.nil? raise "children not configured" end return @child_type end sig { override.params(val: Object, coerce: T::Boolean).returns(TTypeResult) } def read(val, coerce: false) args = Arguments.new(type_args) err = Error.new if val.nil? && !args.optional err.add(missing_error(Array)) return [val, err] end if coerce && args.wrap_single_value val = Array(val) end if !val.is_a?(Array) err.add(type_error(Array, val)) return [val, err] end coerced = [] for i in 0...val.length child_val = T.let(val[i], Object) child, child_err = child_type.read(child_val, coerce:) if child_err err.merge_child(i.to_s.to_sym, child_err) end coerced << child end result = coerce ? coerced : val return [result, err] end end end
Version data entries
4 entries across 4 versions & 1 rubygems