Reusing schemas
You can easily reuse existing schemas using nested-schema syntax:
AddressSchema = Dry::Schema.Params do
required(:street).filled(:string)
required(:city).filled(:string)
required(:zipcode).filled(:string)
end
UserSchema = Dry::Schema.Params do
required(:email).filled(:string)
required(:name).filled(:string)
required(:address).hash(AddressSchema)
end
UserSchema.(
email: 'jane@doe',
name: 'Jane',
address: { street: nil, city: 'NYC', zipcode: '123' }
).errors.to_h
# {:address=>{:street=>["must be filled"]}}