Bigtop
view release on metacpan or search on metacpan
lib/Bigtop/TentMaker.pm view on Meta::CPAN
$config->{__STATEMENTS__}[$i][1]{__NAME__} eq $backend
) {
if ( $value eq 'undef' or $value eq 'undefined' ) {
delete $config->{__STATEMENTS__}[$i][1]{ $keyword };
}
else {
$config->{__STATEMENTS__}[$i][1]{ $keyword } = $value;
}
last STATEMENT;
}
}
}
sub drop_backend {
my $tree = shift;
my $type = shift;
my $backend = shift;
my $config = $tree->get_config();
# remove the item from the __STATEMENTS__ list
my $doomed_element = -1;
STATEMENT:
for( my $i = 0; $i <= $#{ $config->{__STATEMENTS__} }; $i++ ) {
next STATEMENT unless (
ref( $config->{__STATEMENTS__}[$i][1] ) eq 'HASH'
); # find backends, skip simple statements
if ( $config->{__STATEMENTS__}[$i][0] eq $type
and
$config->{__STATEMENTS__}[$i][1]{__NAME__} eq $backend
) {
$doomed_element = $i;
last STATEMENT;
}
}
if ( $doomed_element >= 0 ) {
splice @{ $config->{__STATEMENTS__} }, $doomed_element, 1;
}
}
sub add_backend {
my $tree = shift;
my $type = shift;
my $backend = shift;
my $config = $tree->get_config();
if ( $type eq 'Init' ) { # put it at the top
unshift @{ $config->{__STATEMENTS__} },
[ 'Init', { __NAME__ => $backend } ];
}
else {
push @{ $config->{__STATEMENTS__} },
[ $type, { __NAME__ => $backend } ];
}
$config->{ $type } = { __NAME__ => $backend };
}
sub update_backends {
my $self = shift;
my $tree = shift;
my $config = $tree->get_config();
# remove old values
foreach my $type ( keys %backends ) {
foreach my $backend ( keys %{ $backends{ $type } } ) {
$backends{ $type }{ $backend }{ in_use } = 0;
$backends{ $type }{ $backend }{ statements } = {};
}
}
# set current values
CONFIG_ITEM:
foreach my $block ( @{ $config->{__STATEMENTS__} } ) {
my ( $type, $backend ) = @{ $block };
next CONFIG_ITEM unless ( ref( $backend ) eq 'HASH' ); # blocks only
my $name = $backend->{__NAME__};
my $statements = _get_backend_block_statements( $backend );
$backends{ $type }{ $name }{ in_use } = 1;
$backends{ $type }{ $name }{ statements } = $statements;
}
}
sub _get_backend_block_statements {
my $backend = shift;
my %retval;
STATEMENT:
foreach my $statement ( keys %{ $backend } ) {
next STATEMENT if $statement eq '__NAME__';
$retval{ $statement } = [ $backend->{ $statement } ];
}
return \%retval;
}
# Accessors and global helpers
sub read_file {
my $self = shift;
my $new_app_name = shift || 'Sample';
my $BIGTOP_FILE;
my $file_name = $self->get_file;
my $retval;
if ( $file_name ) {
unless ( open $BIGTOP_FILE, '<', $file_name ) {
die "Couldn't read '$file_name': $!\n perhaps you needed -n?\n";
return '';
}
( run in 0.447 second using v1.01-cache-2.11-cpan-ceb78f64989 )