70 lines
1.6 KiB
Ruby
70 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "dry/monads/result"
|
|
|
|
module Dry
|
|
module Validation
|
|
# Hints extension
|
|
#
|
|
# @example
|
|
# Dry::Validation.load_extensions(:hints)
|
|
#
|
|
# contract = Dry::Validation::Contract.build do
|
|
# schema do
|
|
# required(:name).filled(:string, min_size?: 2..4)
|
|
# end
|
|
# end
|
|
#
|
|
# contract.call(name: "fo").hints
|
|
# # {:name=>["size must be within 2 - 4"]}
|
|
#
|
|
# contract.call(name: "").messages
|
|
# # {:name=>["must be filled", "size must be within 2 - 4"]}
|
|
#
|
|
# @api public
|
|
module Hints
|
|
# Hints extensions for Result
|
|
#
|
|
# @api public
|
|
module ResultExtensions
|
|
# Return error messages excluding hints
|
|
#
|
|
# @macro errors-options
|
|
# @return [MessageSet]
|
|
#
|
|
# @api public
|
|
def errors(new_options = EMPTY_HASH)
|
|
opts = new_options.merge(hints: false)
|
|
@errors.with(schema_errors(opts), opts)
|
|
end
|
|
|
|
# Return errors and hints
|
|
#
|
|
# @macro errors-options
|
|
#
|
|
# @return [MessageSet]
|
|
#
|
|
# @api public
|
|
def messages(new_options = EMPTY_HASH)
|
|
errors.with(hints.to_a, options.merge(**new_options))
|
|
end
|
|
|
|
# Return hint messages
|
|
#
|
|
# @macro errors-options
|
|
#
|
|
# @return [MessageSet]
|
|
#
|
|
# @api public
|
|
def hints(new_options = EMPTY_HASH)
|
|
schema_result.hints(new_options)
|
|
end
|
|
end
|
|
|
|
Dry::Schema.load_extensions(:hints)
|
|
|
|
Result.prepend(ResultExtensions)
|
|
end
|
|
end
|
|
end
|