The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Mojolicious::Plugin::Vparam::Bool;
use Mojo::Base -strict;
use Mojolicious::Plugin::Vparam::Common;

sub check_bool($) {
    return 'Wrong format'               unless defined $_[0];
    return 0;
}

sub parse_bool($) {
    my ($str) = @_;
    # HTML forms do not transmit if checkbox off
    return 0 unless defined $str;
    return 0 unless length  $str;
    return 0 if $str =~ m{^(?:0|no|false|fail)$}i;
    return 1 if $str =~ m{^(?:1|yes|true|ok)$}i;
    return undef;
}

sub register {
    my ($class, $self, $app, $conf) = @_;

    $app->vtype(
        bool        =>
            pre     => sub { parse_bool trim    $_[1] },
            valid   => sub { check_bool         $_[1] },
    );

    return;
}

1;