App-Plog

 view release on metacpan or  search on metacpan

lib/App/Plog.pm  view on Meta::CPAN

#-------------------------------------------------------------------------------

sub parse_configuration
{

=head2 parse_configuration(@arguments)

 my ($command, $arguments, $configuration, $blog_id, $blog_directory, $blog_configuration_file, $blog_configuration, $temporary_directory)
	= parse_configuration(@arguments) ;

The global I<plog> configuration is located in I<~:.plog> but can be overridden by the I<--configuration_path> option. 
I<Arguments>

=over 2 

=item * @arguments - command line arguments passed to the I<plog> script in the format

 $> plog [--option[s]] command [argument] [argument] ...

=back

I<Returns> 

=over 2 

=item * $command - the command  to execute

=item * \@arguments - the arguments to the command to execute

=item * \%configuration -  the global plog configuration

=item * $blog_id - the name of the blog to work on. extracted from the global configuration or passed
through the I<--blog_id> option

=item * $blog_directory - the directory where the '$blog_id' data are

=item * $blog_configuration_file -  the file name of the '$blog_id' configuration

=item * \%blog_configuration - the '$blog_id' plog configuration

=item * $temporary_directory - a temporary directory created during the run of the script or the 
directory passed thought the I<--temporary_directory> option

=back

I<Exceptions>

=over 2

=item * Invalid options

=item * missing configuration files

=item * errors in configuration files

=back

=cut

my (@arguments) = @_ ;
local @ARGV = @arguments ;

# parse command line
my $blog_id ;
my $configuration_path ;
my $temporary_directory ;

croak 'Invalid option!' unless GetOptions 
			(
			'h|help' => \&display_help,
			'blog_id=s'   => \$blog_id,
			'configuration_path=s'   => \$configuration_path,
			'temporary_directory=s' => \$temporary_directory,
			) ;

$configuration_path = File::HomeDir->my_home()  . "/.plog" unless defined $configuration_path ;

# parse global configuration
my $configuration_file = $configuration_path . '/config.pl' ;
croak "Error: Can't find Plog configuration! ($configuration_file)\n" unless(-e $configuration_file)  ;

my $configuration = do $configuration_file or croak "Error: Can't parse Plog config! ($configuration_file) $EVAL_ERROR\n" ;

$blog_id = $configuration->{default_blog} unless defined $blog_id ;
my $blog_directory = "$configuration->{plog_root_directory}/$blog_id" ;

# parse blog configuration
my $blog_configuration_file = "$blog_directory/config.pl" ;
my $blog_configuration  ;

if(-e $blog_configuration_file)
        {
        $blog_configuration = do $blog_configuration_file or croak "Error: Can't parse blog configuration! ($blog_configuration_file) $EVAL_ERROR\n" ;
        }
else
        {
        croak "Error: Can't find blog '$blog_id' configuration! ($blog_configuration_file)\n" ;
        }

# create temporary directory to work in
$temporary_directory = tempdir( CLEANUP => 1 ) unless defined $temporary_directory ;
mkpath $temporary_directory unless -e $temporary_directory ;
$blog_configuration->{temporary_directory} = $temporary_directory ;

my @files_in_temporary_directory = glob("$temporary_directory/*") ;
carp "Warning: temporary directory '$temporary_directory' is not empty!" if @files_in_temporary_directory ;

my $command = shift @ARGV ;

return($command, [@ARGV], $configuration, $blog_id, $blog_directory, $blog_configuration_file, $blog_configuration, $temporary_directory) ;
}

#-------------------------------------------------------------------------------

sub display_help
{

=head2 display_help()

I<Arguments> - None



( run in 2.226 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )