[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, '');
 						},