Hanami::Validations is a mixin that, once included by an object, adds lightweight set of validations to it.

    It works with input hashes and lets us to define a set of validation rules for each key/value pair. These rules are wrapped by lambdas (or special DSL) that check the input for a specific key to determine if it’s valid or not. To do that, we translate business requirements into predicates that are chained together with Ruby faux boolean logic operators (eg. & or |).

    Think of a signup form. We need to ensure data integrity for the name field with the following rules. It is required, it has to be: filled and a string and its size must be greater than 3 chars, but lesser than 64. Here’s the code, read it aloud and notice how it perfectly expresses our needs for name.

    1. class Signup
    2. include Hanami::Validations
    3. validations do
    4. required(:name) { filled? & str? & size?(3..64) }
    5. end
    6. end
    7. result = Signup.new(name: "Luca").validate
    8. result.success? # => true

    There is more that Hanami::Validations can do: type safety, composition, complex data structures, built-in and custom predicates.