Getting Started
Using Dry::Types
in Your Application
Make
Dry::Types
available to the application by creating a namespace that includesDry::Types
:module Types include Dry.Types() end
Reload the environment, & type
Types::Coercible::String
in 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
attribute
method:class User < Dry::Struct attribute :name, Types::String end
Define Custom Types in the
Types
module, then pass the name & type toattribute
:module Types include Dry.Types() Email = String.constrained(format: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i) Age = Integer.constrained(gt: 18) end class User < Dry::Struct attribute :name, Types::String attribute :email, Types::Email attribute :age, Types::Age end
Use a
Dry::Struct
as a type:class Message < Dry::Struct attribute :body, Types::String attribute :to, User end