mirror of
https://codeberg.org/scip/Data-Validate-Struct.git
synced 2025-12-17 12:41:09 +01:00
Do not die when comparing hash with array
This commit is contained in:
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
o added cpanfile
|
o added cpanfile
|
||||||
|
|
||||||
|
o don't die when reference types are different
|
||||||
|
|
||||||
0.10
|
0.10
|
||||||
o fixed RT#101884
|
o fixed RT#101884
|
||||||
- _trim() only removed 1st whitespace
|
- _trim() only removed 1st whitespace
|
||||||
@@ -14,7 +16,7 @@
|
|||||||
|
|
||||||
o fixed cached errors bug - if a validator object has
|
o fixed cached errors bug - if a validator object has
|
||||||
been used multiple times and if during the first
|
been used multiple times and if during the first
|
||||||
run some errors occured, subsequent runs would show
|
run some errors occurred, subsequent runs would show
|
||||||
the same error again and again.
|
the same error again and again.
|
||||||
|
|
||||||
0.08
|
0.08
|
||||||
|
|||||||
13
Struct.pm
13
Struct.pm
@@ -195,7 +195,14 @@ sub _traverse {
|
|||||||
my ($self, $reference, $hash, @tree) = @_;
|
my ($self, $reference, $hash, @tree) = @_;
|
||||||
|
|
||||||
foreach my $key (keys %{$reference}) {
|
foreach my $key (keys %{$reference}) {
|
||||||
if (ref($reference->{$key}) eq 'ARRAY') {
|
my $reference_ref = ref $reference->{$key};
|
||||||
|
my $hash_ref = ref $hash->{$key};
|
||||||
|
if ($reference_ref =~ /^ARRAY|HASH$/ && $reference_ref ne $hash_ref)
|
||||||
|
{
|
||||||
|
my $err = sprintf("Different structure types %s vs %s", $reference_ref, $hash_ref);
|
||||||
|
push @{$self->{errors}}, sprintf(q{%s at '%s'}, $err, join(' => ', @tree));
|
||||||
|
}
|
||||||
|
elsif ($reference_ref eq 'ARRAY') {
|
||||||
# just use the 1st one, more elements in array are expected to be the same
|
# just use the 1st one, more elements in array are expected to be the same
|
||||||
foreach my $item (@{$hash->{$key}}) {
|
foreach my $item (@{$hash->{$key}}) {
|
||||||
if (ref($item) eq q(HASH)) {
|
if (ref($item) eq q(HASH)) {
|
||||||
@@ -212,10 +219,10 @@ sub _traverse {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif (ref($reference->{$key}) eq 'HASH') {
|
elsif ($reference_ref eq 'HASH') {
|
||||||
$self->_traverse($reference->{$key}, $hash->{$key}, @tree, $key);
|
$self->_traverse($reference->{$key}, $hash->{$key}, @tree, $key);
|
||||||
}
|
}
|
||||||
elsif (ref($reference->{$key}) eq '') {
|
elsif ($reference_ref eq '') {
|
||||||
$self->_debug("Checking $key at " . join(', ', @tree));
|
$self->_debug("Checking $key at " . join(', ', @tree));
|
||||||
if (my $err = $self->_check_type($key, $reference, $hash)) {
|
if (my $err = $self->_check_type($key, $reference, $hash)) {
|
||||||
push @{$self->{errors}}, sprintf(q{%s at '%s'}, $err, join(' => ', @tree));
|
push @{$self->{errors}}, sprintf(q{%s at '%s'}, $err, join(' => ', @tree));
|
||||||
|
|||||||
6
t/run.t
6
t/run.t
@@ -126,7 +126,7 @@ my $cfg = {
|
|||||||
|
|
||||||
my $v = new_ok('Data::Validate::Struct', [ $ref ]);
|
my $v = new_ok('Data::Validate::Struct', [ $ref ]);
|
||||||
ok ($v->validate($cfg), "validate a reference against a OK config");
|
ok ($v->validate($cfg), "validate a reference against a OK config");
|
||||||
|
print STDERR "\n\n\n",$v->errstr(),"\n\n\n";
|
||||||
|
|
||||||
|
|
||||||
# check failure matching
|
# check failure matching
|
||||||
@@ -401,5 +401,9 @@ my $v4 = Data::Validate::Struct->new({age => 'int'});
|
|||||||
ok(!$v4->validate({age => 'eight'}), "cache check first run, error");
|
ok(!$v4->validate({age => 'eight'}), "cache check first run, error");
|
||||||
ok($v4->validate({age => 8}), "cache check second run, no error");
|
ok($v4->validate({age => 8}), "cache check second run, no error");
|
||||||
|
|
||||||
|
# different references
|
||||||
|
my $v5 = Data::Validate::Struct->new({ foo => [{bar => 'int'}]});
|
||||||
|
ok(!$v5->validate({foo=>{bar=>10}}));
|
||||||
|
|
||||||
done_testing();
|
done_testing();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user