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 )