class Athena::Validator::Constraints::AtLeastOneOf
- Athena::Validator::Constraints::AtLeastOneOf
- Athena::Validator::Constraints::Composite
- Athena::Validator::Constraint
- Reference
- Object
Overview
Validates that a value satisfies at least one of the provided constraints. Validation stops as soon as one constraint is satisfied.
Configuration
Required Arguments
constraints
Type: Array(AVD::Constraint) | AVD::Constraint
The AVD::Constraint
(s) from which at least one of has to be satisfied in order for the validation to succeed.
Optional Arguments
include_internal_messages
Type: Bool
Default: true
If the validation failed message should include the list of messages for the internal constraints. See the message argument for an example.
message_collection
Type: String
Default: Each element of this collection should satisfy its own set of constraints.
The message that will be shown if validation fails and the internal constraint is an AVD::Constraints::All
.
See the message argument for an example.
message
Type: String
Default: This value should satisfy at least one of the following constraints:
The intro that will be shown if validation fails. By default, it'll be followed by the list of messages from the internal constraints; configurable via the include_internal_messages argument.
For example, if the grades
property in the example below fails to validate, the message will be:
This value should satisfy at least one of the following constraints: [1] This value is too short. It should have 3 items or more. [2] Each element of this collection should satisfy its own set of constraints.
groups
Type: Array(String) | String | Nil
Default: nil
The [validation groups][Athena::Validator::Constraint--validation-groups] this constraint belongs to.
AVD::Constraint::DEFAULT_GROUP
is assumed if nil
.
payload
Type: Hash(String, String)?
Default: nil
Any arbitrary domain-specific data that should be stored with this constraint.
The [payload][Athena::Validator::Constraint--payload] is not used by Athena::Validator
, but its processing is completely up to you.
Usage
class Example
include AVD::Validatable
def initialize(@password : String, @grades : Array(Int32)); end
# Asserts the password contains an `#` or is at least 10 characters long.
@[Assert::AtLeastOneOf([
@[Assert::Regex(/#/)],
@[Assert::Size(10..)],
])]
getter password : String
# Asserts the `grades` array contains at least 3 elements or
# that each element is greater than or equal to 5.
@[Assert::AtLeastOneOf([
@[Assert::Size(3..)],
@[Assert::All([
@[Assert::GreaterThanOrEqual(5)],
])],
])]
getter grades : Array(Int32)
end
NOTE The annotation approach only supports two levels of nested annotations. Manually wire up the constraint via code if you require more than that.
Defined in:
constraints/at_least_one_of.crConstant Summary
-
AT_LEAST_ONE_OF_ERROR =
"811994eb-b634-42f5-ae98-13eec66481b6"
-
DEFAULT_ERROR_MESSAGE =
"This value should satisfy at least one of the following constraints:"
Constructors
Instance Method Summary
- #include_internal_messages : Bool
- #message_collection : String
-
#validated_by : AVD::ConstraintValidator.class
Returns the
AVD::ConstraintValidator.class
that should handle validatingself
.
Instance methods inherited from class Athena::Validator::Constraints::Composite
add_implicit_group(group : String) : Nil
add_implicit_group,
constraints : Array(AVD::Constraint)
constraints
Constructor methods inherited from class Athena::Validator::Constraints::Composite
new(constraints : Array(AVD::Constraint) | AVD::Constraint, message : String, groups : Array(String) | String | Nil = nil, payload : Hash(String, String) | Nil = nil)
new
Instance methods inherited from class Athena::Validator::Constraint
add_implicit_group(group : String) : Nil
add_implicit_group,
groups : Array(String)
groups,
groups=(groups : Array(String))
groups=,
message : String
message,
payload : Hash(String, String) | Nil
payload,
validated_by : AVD::ConstraintValidator.class
validated_by
Constructor methods inherited from class Athena::Validator::Constraint
new(message : String, groups : Array(String) | String | Nil = nil, payload : Hash(String, String) | Nil = nil)
new
Class methods inherited from class Athena::Validator::Constraint
error_name(error_code : String) : String
error_name
Constructor Detail
Instance Method Detail
Returns the AVD::ConstraintValidator.class
that should handle validating self
.