1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
use utf8;
use strict;
use warnings;
use Test::More;
{
package T1;
use Validation::Class;
field 'title';
field 'rating';
field 'name';
field 'id';
document 'company' => {
'company.name' => 'name',
'company.supervisor.name' => 'name',
'company.supervisor.rating.@.*' => 'rating',
'company.tags.@' => 'name'
};
package main;
my $class;
eval { $class = T1->new; };
ok "T1" eq ref $class, "T1 instantiated";
my $person = {
"id" => "1234-ABC",
"name" => "Anita Campbell-Green",
"title" => "Designer",
"company" => {
"name" => "House of de Vil",
"supervisor" => {
"name" => "Cruella de Vil",
"rating" => [
{ "support" => -9,
"guidance" => -9
}
]
},
"tags" => [
"evil",
"cruelty",
"dogs"
]
},
};
ok $class->validate_document(company => $person), "T1 document (company) validated";
}
{
package T2;
use Validation::Class;
field 'id' => {
mixin => [':str'],
filters => ['numeric'],
max_length => 2,
};
field 'name' => {
mixin => [':str'],
pattern => qr/^[A-Za-z ]+$/,
max_length => 20,
};
field 'tag' => {
mixin => [':str'],
pattern => qr/^(?!evil)\w+/,
max_length => 20,
};
document 'company' => {
'id' => 'id',
'company.name' => 'name',
'company.supervisor.name' => 'name',
'company.tags.@' => 'tag'
};
package main;
my $class;
eval { $class = T2->new(ignore_unknown => 1); };
ok "T2" eq ref $class, "T2 instantiated";
my $person = {
"id" => "1234-ABC",
"name" => "Anita Campbell-Green",
"title" => "Designer",
"company" => {
"name" => "House of de Vil",
"supervisor" => {
"name" => "Cruella de Vil",
"rating" => [
{ "support" => -9,
"guidance" => -9
}
]
},
"tags" => [
"evil",
"cruelty",
"dogs"
]
},
};
ok ! $class->validate_document(company => $person), "T2 document (company) did not validate";
}
done_testing;
|