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 )