my ($self, $path) = @_;
my @files = ();
- my @dirs = io->dir($path)->splitdir;
+ my @dir_parts = io->dir($path)->splitdir;
+ my @dirs = map io->dir('')->catdir(@dir_parts[1..$_]), 1..($#dir_parts - 1);
- shift @dirs;
- pop @dirs;
- my $buildpath = io('');
-
- foreach my $dir (@dirs) {
- $buildpath = $buildpath->catdir("/$dir");
- #/home/.../share/pages/blog.conf etc
-
- my $file = $self->_top_dir->catfile("$buildpath.conf");
-
- if (!$file->exists || !$file->file || $file->empty) {
- next;
- }
-
- push @files, $file;
- }
-
- return \@files;
+ return grep +($_->file and not $_->empty),
+ map $self->_top_dir->catfile("${_}.conf"), @dirs;
}
sub _inflate {
(my $cache_name = $io->name) =~ s/\/([^\/]+)$/\/.htcache.$1.json/;
my $cache = io($cache_name);
my $config_files = $self->_config_files_for($path);
- my $maxstat = 0;
-
- if (scalar @$config_files) {
- my $maxfile = reduce { $a->mtime > $b->mtime ? $a : $b } @$config_files;
- $maxstat = $maxfile->mtime;
- }
+ my $max_stat = max map $_->mtime, $io, @$config_files;
if (-f $cache_name) {
- if ($cache->mtime >= max($io->mtime, $maxstat)) {
+ if ($cache->mtime >= $max_stat) {
return try {
$self->_new_page($path, $self->_json->decode($cache->all));
} catch {