Sha256: dfe915c109b27da62edf300550e98a5008a7ad018b4094645fb14ddced50a9f9

Contents?: true

Size: 1.4 KB

Versions: 4

Compression:

Stored size: 1.4 KB

Contents

# typed: strict

module DataModel
	class Builtin::Time < Type
		include Errors

		class Arguments < T::Struct
			prop :optional, T::Boolean, default: false
			prop :earliest, T.nilable(::Time), default: nil
			prop :latest, T.nilable(::Time), default: nil
		end

		sig { override.params(val: Object, coerce: T::Boolean).returns(TTypeResult) }
		def read(val, coerce: false)
			args = Arguments.new(type_args)
			err = Error.new

			# missing, but allowed, don't do any more checks
			if val.nil? && args.optional
				return [val, err]
			end

			# missing, but not allowed, don't do any more checks
			if val.nil?
				err.add(missing_error(Time))
				return [val, err]
			end

			# coercion is enabled, and the value is a string, try to parse it
			if val.is_a?(String) && coerce
				begin
					val = Time.parse(val)
				rescue ArgumentError
					err.add(type_error(Time, val))
					return [val, err]
				end
			end

			# not a date, don't do any more checks
			if !val.is_a?(Time)
				err.add(type_error(Time, val))
				return [val, err]
			end

			# date is before the earliest point allowed
			if args.earliest && (val < T.must(args.earliest))
				error = earliest_error(T.must(args.earliest), val)
				err.add(error)
			end

			# date is after the latest point allowed
			if args.latest && (val > T.must(args.latest))
				error = latest_error(T.must(args.latest), val)
				err.add(error)
			end

			return [val, err]
		end
	end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
data_model-0.4.0 lib/data_model/builtin/time.rb
data_model-0.3.0 lib/data_model/builtin/time.rb
data_model-0.2.0 lib/data_model/builtin/time.rb
data_model-0.1.0 lib/data_model/builtin/time.rb