[Moscow.pm] Test::Deep: проверка необязательных ключей хеша
Maxim Vuets
maxim.vuets на gmail.com
Чт Июл 19 10:59:35 PDT 2012
On Thu, Jul 19, 2012 at 05:46:08PM +0400, Orlovsky Alexander wrote:
>А что, если попробовать https://metacpan.org/module/JSON::Schema ?
Спасибо, достойная альтернатива.
Против:
- слишком много зависимостей;
- слишком многословная схема.
За:
- хорошие сообщения об ошибках.
Пример:
use JSON::Schema;
my $got = {
login => 'john smith',
password => 'Hello1',
age => 16,
color => 'yellow',
greeting => 'hi',
some => 'rubbish',
};
my $schema = {
type => 'object',
properties => {
login => {
required => 1,
type => 'string',
pattern => '^[a-z0-9]+$',
},
password => {
required => 1,
type => 'string',
pattern => '^[\x21-\x7e]+$',
},
age => {
type => 'integer',
minimum => 18,
},
color => {
type => 'string',
enum => [qw/red green blue/],
},
greeting => {
type => 'string',
format => 'palindrome',
},
},
};
my $validator = JSON::Schema->new($schema, format => {
palindrome => sub {$_[0] eq reverse $_[0]},
});
my $result = $validator->validate($got);
say $result ? 'ok' : ("fail:\n - ", join "\n - ", $result->errors);
Вывод:
fail:
- $.color: does not have a value in the enumeration {red,green,blue}
- $.greeting: does not match format palindrome
- $.age: must be greater than or equal to minimum value 18
- $.login: does not match the regex pattern ^[a-z0-9]+$
--
maxim.vuets.name
Подробная информация о списке рассылки Moscow-pm