view Lib/IMPL/DOM/Schema/Validator/RegExp.pm @ 295:9b25e1f50144

sync
author cin
date Fri, 01 Mar 2013 03:15:30 +0400
parents b8c724f6de36
children 5aff94ba842f
line wrap: on
line source

package IMPL::DOM::Schema::Validator::RegExp;
use strict;
use parent qw(IMPL::DOM::Schema::Validator);

our %CTOR = (
    'IMPL::DOM::Schema::Validator' => sub {
        my %args = @_;
        $args{nodeName} ||= 'RegExp';
        %args;
    }
);

use IMPL::Class::Property;

BEGIN {
    public property message => prop_all;
    public property launder => prop_all;
    private property _rx => prop_all;
}

sub CTOR {
    my ($this,%args) = @_;
    
    $this->message($args{message} || "A %node.nodeName% doesn't match to the format %schema.display%");
}

sub Validate {
    my ($this,$node,$ctx) = @_;
    
    my $rx = $this->_rx() || $this->_rx( map qr{$_}, $this->nodeValue );
    
    return new IMPL::DOM::Schema::ValidationError(
        node => $node,
        source => $ctx && $ctx->{Source} || $this->parentNode,
        schema => $this->parentNode,
        message => $this->message
    ) unless (not $node->isComplex) and $node->nodeValue =~ /($rx)/;
    
    $node->nodeValue($1) if $this->launder;
    
    return ();
}

1;