From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use Moo;
has is_not_scalar => (is=>'ro', required=>1, default=>sub {_t 'is_not_a_scalar'});
sub normalize_shortcut {
my ($class, $arg) = @_;
return +{} if $arg eq '1' ;
}
sub validate_each {
my ($self, $record, $attribute, $value, $opts) = @_;
return if ref( \$value ) eq 'SCALAR' or ref( \( my $val = $value ) ) eq 'SCALAR';
$record->errors->add($attribute, $self->is_not_scalar, $opts)
}
1;
=head1 NAME
Valiant::Validator::Scalar - Validate that a value is a scalar (like a string or number)
=head1 SYNOPSIS
package Local::Test::Scalar;
use Moo;
use Valiant::Validations;
has name => (is=>'ro');
validates name => ( scalar => 1 );
ok my $object = Local::Test::Scalar->new(name=>[111,'John']);
ok $object->validate->invalid;
is_deeply +{ $object->errors->to_hash(full_messages=>1) },
{
'name' => [
'Name must be a string or number',
]
};
=head1 DESCRIPTION
Validates that the value in question is a scalar.
=head1 SHORTCUT FORM
This validator supports the follow shortcut forms:
validates attribute => ( scalar => 1, ... );
Which is the same as:
validates attribute => (
scalar => { },
);
=head1 GLOBAL PARAMETERS
This validator supports all the standard shared parameters: C<if>, C<unless>,
C<message>, C<strict>, C<allow_undef>, C<allow_blank>.
=head1 AUTHOR
John Napiorkowski L<email:jjnapiork@cpan.org>
=head1 SEE ALSO
L<Valiant>, L<Valiant::Validator>, L<Valiant::Validator::Each>.
=head1 COPYRIGHT & LICENSE
Copyright 2020, John Napiorkowski L<email:jjnapiork@cpan.org>
This library is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.
=cut