use File::Temp;
use WebCoso::Doc::Page;
use WebCoso::Doc::Feed;
class WebCoso {
has $.srcdir;
has $.destdir;
has $!tmpdir = tempdir.IO;
has %!docs;
method get-src-files($dir,$basename,$ext) {
return try {
CATCH { when X::IO { } }
( $dir ?? $.srcdir.child($dir) !! $.srcdir ).dir(
test => /$basename \. .+? \. $ext/,
);
} // ();
}
method get-made-files($dir,$basename,$ext) {
if %!docs{$dir}{$basename} -> $doc {
return $doc.get-files-by-ext($ext)
}
return;
}
method get-files($dir,$basename,$ext) {
my @files = self.get-src-files($dir,$basename,$ext) // self.get-made-files($dir,$basename,$ext);
return map {
(.basename ~~ /$basename \. (.+?) \. $ext/)[0]
=>
$_
}, @files;
}
method put-file($dir,$basename,$lang,$ext,$contents) {
my $t = ($dir ?? $!tmpdir.child($dir) !! $!tmpdir);
$t.mkdir;
my $f = $t.child("{$basename}.{$lang}.{$ext}");
$f.spurt($contents);
return $f;
}
method new-page($dir) {
%!docs{$dir}{WebCoso::Doc::Page.basename}
= WebCoso::Doc::Page.new(:$dir,wc=>self);
}
method new-feed($dir) {
%!docs{$dir}{WebCoso::Doc::Feed.basename}
= WebCoso::Doc::Feed.new(:$dir,wc=>self);
}
method run() {
.make() for %!docs.values».values.flat
}
}