Hilfsfunktion call_sub_if
authorMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 18 Nov 2010 13:03:17 +0000 (14:03 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 12 May 2011 08:45:38 +0000 (10:45 +0200)
SL/DB/Object.pm

index 71e0a39..a2db47f 100644 (file)
@@ -84,6 +84,16 @@ sub call_sub {
   return $self->$sub(@_);
 }
 
+sub call_sub_if {
+  my $self  = shift;
+  my $sub   = shift;
+  my $check = shift;
+
+  $check    = $check->($self) if ref($check) eq 'CODE';
+
+  return $check ? $self->$sub(@_) : $self;
+}
+
 1;
 
 __END__
@@ -145,6 +155,16 @@ name is a composite, e.g.
 
   my $chart_id = $buchungsgruppe->call_sub(($is_sales ? "income" : "expense") . "_accno_id_${taxzone_id}");
 
+=item C<call_sub_if $name, $check, @args>
+
+Calls the sub C<$name> on C<$self> with the arguments C<@args> if
+C<$check> is trueish. If C<$check> is a code reference then it will be
+called with C<$self> as the only argument and its result determines
+whether or not C<$name> is called.
+
+Returns the sub's result if the check is positive and C<$self>
+otherwise.
+
 =back
 
 =head1 AUTHOR