Front page | perl.beginners |
Postings from February 2009
Data validation
Thread Next
From:
Dermot
Date:
February 13, 2009 10:49
Subject:
Data validation
Message ID:
9c7446e70902131049y5440a0f6x86bf08b60a16e06f@mail.gmail.com
Hi All,
I have been at this for a couple of days and could really use some
help. I have been trying to validate some data. I opted for a module
called Data::Domain by Dami Laurent. I have emailed him but he's
server is not collecting (which is odd because I have seen him on
other lists).
My problem is that, under the "concept" key, the string data should
contain at least one entry; history, space, environment...etc
A created a test script with 2 records, one with concepts=>
['flowers', 'environment'], and the other with a single item
['environment']. This last one fails. I have been trying combinations
of Enum, List and One_off method to try and achieve my aims but I can
configure the Struct that fits.
If anyone can spot what I am doing wrong or worse case, suggest a
completely different validation framework, please let me know.
TIA,
Dp.
#########################
#!/usr/bin/perl
use strict;
use warnings;
use Data::Domain qw/:all/;
my $rec1 = {
'concepts' => ['flowers', 'environment'],
'keywords' => 'Cheese biscuits, biscuits, biscuit, stack,
baked goods, ciutout, cut out, white background',
'title' => 'Cheese biscuits',
};
my $rec2 = {
'concepts' => ['environment'],
'keywords' => 'Cheese biscuits, biscuits, biscuit, stack,
baked goods, ciutout, cut out, white background',
'title' => 'Cheese cake',
};
my @tests = ($rec1, $rec2);
my @concepts = (
[ qr/\s?history\s?/i, 'history'],
[ qr/\s?science\s+(\&|and)\s+technology\s?/i, 'science and
technology'],
[ qr/\s?heathcare\s?/i, 'healthcare'],
[ qr/\s?flower(s|)\s?/i, 'flowers'],
[ qr/\s?space\s?/i, 'space'],
[ qr/\s?environment\s?/i, 'environment'],
[ qr/\s?animal(s|)\s?/i, 'animals'],
);
my $domain = Struct(
concepts => List(-any =>
[String($concepts[3]->[0]), String($concepts[5]->[0]) ]),
keywords => String(-regex =>
qr/^[A-Za-z0-9_\s\.\-]+/, -min => 3, -name => 'keywords'),
title => String(-length => [1, 42], -name => "title"),
);
foreach my $t (@tests) {
print "Check $t->{'title'}\n";
my $msg = $domain->inspect($t);
if ($msg) {
for (keys %{$msg} ) {
print "Error: $t->{'title'} \t$_ - ", $msg->{$_},"\n";
}
}
}
###########
# http://search.cpan.org/~dami/Data-Domain-0.09/lib/Data/Domain.pm
Thread Next
-
Data validation
by Dermot