use strict;
sub get_cb_list { shift->{cb_list} }
sub set_cb_list { shift->{cb_list} = $_[1] }
sub new {
my $class = shift;
my @cb_list = @_;
my $self = bless {
cb_list => \@cb_list,
}, $class;
return $self;
}
sub prepend {
my $self = shift;
my (@cb) = @_;
unshift @{$self->get_cb_list}, @cb;
return $self;
}
sub add {
my $self = shift;
my (@cb) = @_;
push @{$self->get_cb_list}, @cb;
return $self;
}
sub execute {
my $self = shift;
my ($job) = @_;
foreach my $cb ( @{$self->get_cb_list} ) {
eval { $cb->(@_) };
print "Catched Callbacks Exception: $@" if $@;
if ( $@ ) {
$job->set_error_message($@);
return 0;
}
}
1;
}
1;
__END__
=head1 NAME
Event::ExecFlow::Callbacks - Callbacks attached to jobs
=head1 SYNOPSIS
#-- Create a new Callbacks object
my $callbacks = Event::ExecFlow::Callbacks->new (
sub { print "sub called\n" },
sub { print "another sub of this called\n" },
);
#-- Attach callbacks to a job
$job->set_pre_callbacks($callbacks);
#-- Add more subs
$callbacks->add(sub { print "a sub added later\n" });
$callbacks->prepend(sub { print "a sub prepended to the list of subs } );
#-- the execute() methods is executed later by Event::ExecFlow
$callbacks->execute($job);
=head1 DESCRIPTION
This class represents one or more closures which can be attached as
callbacks to an Event::ExecFlow::Job.
=head1 OBJECT HIERARCHY
Event::ExecFlow
Event::ExecFlow::Job
+--- Event::ExecFlow::Job::Group
+--- Event::ExecFlow::Job::Command
+--- Event::ExecFlow::Job::Code
Event::ExecFlow::Frontend
Event::ExecFlow::Callbacks
Event::ExecFlow::Scheduler
+--- Event::ExecFlow::Scheduler::SimpleMax
=head1 ATTRIBUTES
Attributes can by accessed at runtime using the common get_ATTR(),
set_ATTR() style accessors.
[ FIXME: describe all attributes in detail ]
=head1 METHODS
[ FIXME: describe all methods in detail ]
=head1 AUTHORS
Jörn Reder <joern at zyn dot de>
=head1 COPYRIGHT AND LICENSE
Copyright 2005-2006 by Jörn Reder.
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307
USA.
=cut