Launcher-Cascade

 view release on metacpan or  search on metacpan

lib/Launcher/Cascade/Container.pm  view on Meta::CPAN

package Launcher::Cascade::Container;

=head1 NAME

Launcher::Cascade::Container - a class to run L::C::Base launchers in cascade

=head1 SYNOPSIS

    use Launcher::Cascade::Base::...;
    use Launcher::Cascade::Container;

    my $launcher1 = new Launcher::Cascade::Base:... ...;
    my $launcher2 = new Launcher::Cascade::Base:... ...;
    my $launcher3 = new Launcher::Cascade::Base:... ...;

    my $container = new Launcher::Cascade::Container
	-launchers => [ $launcher1, $launcher2, $launcher3 ];

    $container->run_session();

=head1 DESCRIPTION

A C<L::C::Container> object maintains a list of launchers, which are instances
of C<L::C::Base> or of its subclasses. The run_session() method let all the
launchers run in turn and checks their status until all of them succeed or one
of them fails.

=cut

use strict;
use warnings;

use base qw( Launcher::Cascade );

=head2 Methods

=over 4

=item B<launchers>

=item B<launchers> I<LIST>

=item B<launchers> I<ARRAYREF>

Returns the list of C<Launcher::Cascade::Base> objects that are to be run in this section.

When called with a I<LIST> of arguments, this methods also sets the list of
launchers to I<LIST>. The argument can also be an I<ARRAYREF>, in which case
it will automatically be dereferenced.

All elements in I<LIST> or I<ARRAYREF> should be instances of
C<Launcher::Cascade::Base> or one of its subclasses.

=cut

sub launchers {

    my $self = shift;

    $self->{_launchers} ||= [];
    if ( @_ ) {
	if ( UNIVERSAL::isa($_[0], 'ARRAY') ) {
	    # Dereference the first arg if it is an arrayref (so that the
	    # method can be called with an arrayref from the constructor).
	    $self->{_launchers} = $_[0];



( run in 2.015 seconds using v1.01-cache-2.11-cpan-9581c071862 )