App-Followme
view release on metacpan or search on metacpan
lib/App/Followme.pm view on Meta::CPAN
my $config_file = catfile($directory, $self->{configuration_file});
my @configuration_files = ($config_file);
my @dirs = splitdir($directory);
pop(@dirs);
# Find configuration files in and above directory
while (@dirs) {
$config_file = catfile(@dirs, $self->{configuration_file});
push(@configuration_files, $config_file) if -e $config_file;
pop(@dirs);
}
@configuration_files = reverse @configuration_files;
# The topmost configuration file is the top and base directory
$self->set_configuration(@configuration_files);
return \@configuration_files;
}
#----------------------------------------------------------------------
# Load a modeule and then run it
sub load_and_run_modules {
my ($self, $modules, $base_directory, $directory, %configuration) = @_;
$configuration{base_directory} = $base_directory;
foreach my $module (@$modules) {
eval "require $module" or die "Module not found: $module\n";
my $object = $module->new(%configuration);
$object->run($directory);
}
return;
}
#----------------------------------------------------------------------
# Set the initial configuration parameters
sub set_configuration {
my ($self, @configuration_files) = @_;
my ($directory, $file) = fio_split_filename($configuration_files[0]);
$self->{configuration}{base_directory} = $directory;
$self->{configuration}{top_directory} = $directory;
$self->{configuration}{case_sensitive} =
$self->check_sensitivity($configuration_files[0]);
return;
}
#----------------------------------------------------------------------
# Update files in one folder
sub update_folder {
my ($self, $directory, $configuration_files, %configuration) = @_;
my $configuration_file = shift(@$configuration_files) ||
catfile($directory, $self->{configuration_file});
my ($base_directory, $filename) = fio_split_filename($configuration_file);
my ($run_before, $run_after);
if (-e $configuration_file) {
%configuration = $self->read_configuration($configuration_file,
%configuration);
$run_before = $configuration{run_before};
delete $configuration{run_before};
$run_after = $configuration{run_after};
delete $configuration{run_after};
}
$self->load_and_run_modules($run_before,
$base_directory,
$directory,
%configuration);
if (@$configuration_files) {
$self->update_folder($directory,
$configuration_files,
%configuration);
} elsif (! $self->{quick_update}) {
my ($filenames, $directories) = fio_visit($directory);
foreach my $subdirectory (@$directories) {
$self->update_folder($subdirectory,
$configuration_files,
%configuration);
}
}
$self->load_and_run_modules($run_after,
$base_directory,
$directory,
%configuration);
return;
}
1;
__END__
=encoding utf-8
=head1 NAME
App::Followme - Update a static website
=head1 SYNOPSIS
use App::Followme;
my $app = App::Followme->new(\%configuration);
$app->run($directory);
( run in 0.587 second using v1.01-cache-2.11-cpan-13bb782fe5a )