diff Lib/Form/Filter/Regexp.pm @ 0:03e58a454b20

Создан репозитарий
author Sergey
date Tue, 14 Jul 2009 12:54:37 +0400
parents
children 16ada169ca75
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/Form/Filter/Regexp.pm	Tue Jul 14 12:54:37 2009 +0400
@@ -0,0 +1,38 @@
+package Form::Filter::Regexp;
+use strict;
+use Common;
+use Form::Filter;
+use base qw(Form::Filter);
+
+BEGIN {
+    DeclareProperty Regexp => ACCESS_READ;
+}
+
+sub CTOR {
+    my ($this,@args) = @_;
+    
+    $this->SUPER::CTOR(@args[0,1]);
+
+    my $re = $args[2] or die new Exception('A regular expression is required');
+
+    $this->{$Regexp} = qr/$re/;
+}
+
+sub SUPPORTED_CONTEXT { Form::Filter::CTX_SINGLE | Form::Filter::CTX_EXISTENT }
+
+sub Invoke {
+    my ($this,$object) = @_;
+
+    if ($object->isa('Form::ValueItem')) {
+        my $re = $this->{$Regexp};
+        if ($object->isEmpty or $object->Value =~ m/$re/) {
+            return new Form::FilterResult(State => Form::FilterResult::STATE_SUCCESS);
+        } else {
+            return new Form::FilterResult(Sate => Form::FilterResult::STATE_ERROR, Message => $this->FormatMessage($object), Target => $object );
+        }
+    } else {
+        die new Exception('Only a value items can be verified against a regular expression');
+    }
+}
+
+1;
\ No newline at end of file