Sha256: 3b924c6cb34681bb032a73c91c2f46c53b36ad87fd51b115f742d569d3c53abc

Contents?: true

Size: 868 Bytes

Versions: 1

Compression:

Stored size: 868 Bytes

Contents

# typed: strict

module Typed
  class Field < T::Struct
    extend T::Sig

    include ActsAsComparable

    Type = T.type_alias { T.any(T::Class[T.anything], T::Types::Base) }

    const :name, Symbol
    const :type, Type
    const :required, T::Boolean, default: true

    sig { returns(T::Boolean) }
    def required?
      required
    end

    sig { returns(T::Boolean) }
    def optional?
      !required
    end

    sig { params(value: Value).returns(Validations::ValidationResult) }
    def validate(value)
      Validations::FieldTypeValidator.new.validate(field: self, value: value)
    end

    sig { params(value: Value).returns(T::Boolean) }
    def works_with?(value)
      value.class == type || T.cast(type, T::Types::Base).recursively_valid?(value) # standard:disable Style/ClassEqualityComparison
    rescue TypeError
      false
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sorbet-schema-0.4.0 lib/typed/field.rb