### ### Copyright 2000-2007 University of Illinois Board of Trustees ### All rights reserved. ### ### AppConfig - psgconf action class for AppConfig files ### ### Campus Information Technologies and Educational Services ### University of Illinois at Urbana-Champaign ### package PSGConf::Action::GenerateFile::AppConfig; use strict; use PSGConf::Action::GenerateFile; our @ISA = qw(PSGConf::Action::GenerateFile); ############################################################################### ### generate method ############################################################################### sub _print_entry { my ($self, $fh, $key, $value) = @_; $value = " " if ( ! defined ($value) || ! length ($value) ); ### Backslash any quotes in the value itself. $value =~ s/"/\\"/g if ( $value =~ m/"/o ); # quote any values as well. $value = '"' . $value . '"' if ( $value =~ m/[\s\t\n]/o ); ### Backslash any carriage returns in the value. $value =~ s/\n/\\ /g if ( $value =~ m/\n/o ); print $fh "$key = $value\n"; } sub _deref_entry { my ($self, $fh, $key, $value) = @_; my ($ref, $c); $ref = ref($value); ### If we are pointing to an ARRAY, get each element. if ( $ref eq 'ARRAY' ) { for ( $c = 0; $c < scalar @$value; $c++ ) { $self->_deref_entry ($fh, $key, $value->[$c]); } ### If we are pointing to A HASH, get both the key and value. } elsif ( $ref eq 'HASH' ) { print $fh "[$key]\n" if ( exists $self->{stanza} ); foreach $c (sort keys %{$value}) { $self->_deref_entry ( $fh, (exists $self->{stanza})? $c: "$key $c", $value->{$c} ); } print $fh "\n" if ( exists $self->{stanza} ); ### Base case, print out the entry... } else { $self->_print_entry ($fh, $key, $value); } } sub generate { my ($self, $fh, $psgconf) = @_; my ($var); foreach $var (sort keys %{$self->{vars}}) { $self->_deref_entry ($fh, $var, $self->{vars}->{$var}); } return 1; } ############################################################################### ### documentation ############################################################################### 1; __END__ =head1 NAME PSGConf::Action::GenerateFile::AppConfig - generate environment files =head1 SYNOPSIS use PSGConf::Action::GenerateFile::AppConfig; $psgconf->register_actions( PSGConf::Action::GenerateFile::AppConfig->new( 'name' => '/path/to/file', 'stanza' => 1, 'vars' => { 'var1' => 'value1', ... }, ... ), ... ); =head1 DESCRIPTION The B module provides a B action class for generating files in the format that AppConfig perl module can use. The B class is derived from the B class, but it defines/overrides the following methods: =over 4 =item generate() Generates the AppConfig formatted file. =back In addition to the attributes supported by the B class, the B class supports the following attributes: =over 4 =item I If it exists, it uses the key from a hash as a starting stanza, i.e. I<[key]> format. =item I An anonymous hash containing the AppConfig variable definitions. =back =head1 SEE ALSO L L L L =cut