[interchange-cvs] interchange - heins modified lib/Vend/Order.pm
interchange-core@interchange.redhat.com
interchange-core@interchange.redhat.com
Thu Nov 8 11:23:00 2001
User: heins
Date: 2001-11-08 16:17:32 GMT
Modified: lib/Vend Order.pm
Log:
* Add "filter" check type which performs a filter operation on the checked
value and returns an error if the filtered value doesn't equal the unfiltered
value.
Revision Changes Path
2.10 +24 -2 interchange/lib/Vend/Order.pm
rev 2.10, prev_rev 2.9
Index: Order.pm
===================================================================
RCS file: /anon_cvs/repository/interchange/lib/Vend/Order.pm,v
retrieving revision 2.9
retrieving revision 2.10
diff -u -r2.9 -r2.10
--- Order.pm 2001/10/06 06:29:54 2.9
+++ Order.pm 2001/11/08 16:17:31 2.10
@@ -1,6 +1,6 @@
# Vend::Order - Interchange order routing routines
#
-# $Id: Order.pm,v 2.9 2001/10/06 06:29:54 mheins Exp $
+# $Id: Order.pm,v 2.10 2001/11/08 16:17:31 mheins Exp $
#
# Copyright (C) 1996-2001 Red Hat, Inc. <interchange@redhat.com>
#
@@ -28,7 +28,7 @@
package Vend::Order;
require Exporter;
-$VERSION = substr(q$Revision: 2.9 $, 10);
+$VERSION = substr(q$Revision: 2.10 $, 10);
@ISA = qw(Exporter);
@@ -112,6 +112,28 @@
$len,
$max) if ! $msg;
return(0, $name, $msg);
+ }
+ return (1, $name, '');
+ },
+ 'filter' => sub {
+ my($name, $value, $code) = @_;
+ my $message;
+ my $filter;
+
+ $code =~ s/\\/\\\\/g;
+ if($code =~ /(["']).+?\1$/) {
+ my @code = Text::ParseWords::shellwords($code);
+ $message = pop(@code);
+ $filter = join " ", @code;
+ }
+ else {
+ ($filter, $message) = split /\s+/, $code, 2;
+ }
+
+ my $test = Vend::Interpolate::filter_value($filter, $value, $name);
+ if($test ne $value) {
+ $message ||= errmsg("%s caught by filter %s", $name, $filter);
+ return ( 0, $name, $message);
}
return (1, $name, '');
},