App-Spec
view release on metacpan or search on metacpan
lib/App/Spec/Run/Validator.pm view on Meta::CPAN
if ($spec->multiple) {
if (defined $value and $value !~ m/^\d+$/) {
die "Value for '$name': '$value' shouldn't happen";
}
}
else {
if (defined $value and $value != 1) {
die "Value for '$name': '$value' shouldn't happen";
}
}
next;
}
my $values;
if ($spec->multiple and $spec->mapping) {
if (not defined $value) {
$items->{ $name } = $value = {};
}
$values = $value;
if (not keys %$values) {
if (defined (my $default = $spec->default)) {
$values = { split m/=/, $default, 2 };
$items->{ $name } = $values;
}
}
if (not keys %$values and $spec->required) {
$errs->{ $type }->{ $name } = "missing";
next;
}
if (not keys %$values) {
next;
}
}
elsif ($spec->multiple) {
if (not defined $value) {
$items->{ $name } = $value = [];
}
$values = $value;
if (not @$values) {
if (defined (my $default = $spec->default)) {
$values = [ $default ];
$items->{ $name } = $values;
}
}
if ( not @$values and $spec->required) {
$errs->{ $type }->{ $name } = "missing";
next;
}
if (not @$values) {
next;
}
if ($spec->unique and (uniq @$values) != @$values) {
$errs->{ $type }->{ $name } = "not_unique";
next;
}
}
else {
if (not defined $value) {
if (defined (my $default = $spec->default)) {
$value = $default;
$items->{ $name } = $value;
}
}
if ( not defined $value and $spec->required) {
$errs->{ $type }->{ $name } = "missing";
next;
}
if (not defined $value) {
next;
}
$values = [ $value ];
}
my $def;
if (ref $param_type eq 'HASH') {
($param_type, $def) = %$param_type;
}
my $code = $validate{ $param_type }
or die "Missing method for validation type $param_type";
my $possible_values = $spec->mapping ? {} : [];
if (my $spec_values = $spec->values) {
if (my $op = $spec_values->{op}) {
my $args = {
runmode => "validation",
parameter => $name,
};
$possible_values = $run->cmd->$op($run, $args) || [];
}
elsif ($spec->mapping) {
$possible_values = $spec_values->{mapping};
}
else {
$possible_values = $values->{enum};
}
}
my @to_check = $spec->mapping
? map { [ $_ => $values->{ $_ } ] } keys %$values
: @$values;
for my $item (@to_check) {
my ($key, $v);
if ($spec->mapping) {
($key, $v) = @$item;
}
else {
$v = $item;
}
( run in 2.024 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )