Using Dry::Types in Your Application
-
Make
Dry::Typesavailable to the application by creating a namespace that includesDry::Types:include Dry.Types() end -
Reload the environment, & type
Types::Coercible::Stringin the ruby console to confirm it worked:Types::Coercible::String # => #<Dry::Types::Constructor type=#<Dry::Types::Definition primitive=String options={}>>
Creating Your First Type
-
Define a struct's types by passing the name & type to the
attributemethod:attribute :name, Types::String end -
Define Custom Types in the
Typesmodule, then pass the name & type toattribute:include Dry.Types() = String.constrained(format: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i) = Integer.constrained(gt: 18) end attribute :name, Types::String attribute :email, Types::Email attribute :age, Types::Age end -
Use a
Dry::Structas a type:attribute :body, Types::String attribute :to, User end