Next-gen ruby libs! » github.com/dry-rb » website: https://dry-rb.org » forum: https://discourse.dry-rb.org
class MyLoader < ::Dry::System::Loader
def call(*args)
if constant.kind_of?(::Dry::Validation::Schema)
constant
else
super
end
end
end
class Container < Dry::Web::Container
# ...
configure do |config|
config.loader = MyLoader
# ...
end
# ...
end
require_relative '../base'
module Validation
module Users
class Update
include Import['persistence.user_email_uniqueness_check']
def initialize(*args)
super
@schema = Dry::Validation.Form(Base) do
configure do
option :user_email_uniqueness_check
def email_unique?(value)
user_email_uniqueness_check.call(value)
end
end
optional(:first_name).filled(:str?)
optional(:last_name).filled(:str?)
optional(:email).filled(:str?, :email?)
optional(:previous_email).maybe
rule(email_unique: [:email, :previous_email]) do |email, previous_email|
email.not_eql?(previous_email).then(email.email_unique?)
end
end
end
def call(*args)
@schema
.with(user_email_uniqueness_check: user_email_uniqueness_check)
.call(*args)
end
end
end
end
Update = Dry::Validation.Form(Base) do end
class Base < Dry::Validation::Schema
configure do
config.messages = :i18n
end
end
Validation::Schema
rather than a built schema instance