develooper 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


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About