role WebCoso::Maker[$from,$to] {
has $.wc;
has $.basename;
has $.dir;
method process-contents($src) { ... }
method dest-files() {
say "Maker[$from,$to]($.dir/$.basename)::dest-files";
return $.wc.get-files($.dir,$.basename,$to,:!make);
}
method src-files() {
say "Maker[$from,$to]($.dir/$.basename)::src-files";
return $.wc.get-files($.dir,$.basename,$from);
}
method get-file($path) {
return $.wc.get-file($.dir,$path);
}
method dep-files() {
return $.wc.load-deps($.dir,$.basename,$to);
}
method set-deps($deps) {
$.wc.save-deps($.dir,$.basename,$to,$deps);
}
method make() {
say "Maker[$from,$to]($.dir/$.basename)::make";
my $srcs = $.src-files();
my $dsts = $.dest-files();
my $deps = $.dep-files();
say "Maker[$from,$to]($.dir/$.basename)::make from {$srcs.perl} and {$deps.perl} to {$dsts.perl}";
for $srcs.langs -> $lang {
my $src = $srcs.for-lang($lang)[0];
my $dst = $dsts.for-lang($lang)[0];
my @deps = $deps.for-lang($lang);
say "Maker[$from,$to]($.dir/$.basename)::make lang $lang";
say "Maker[$from,$to]($.dir/$.basename)::make dst modified {$dst ?? $dst.modified !! 'not-there'} src modified {$src.modified} deps modified {@deps».modified}";
next if $dst and $dst.modified >=
all($src.modified,@deps».modified.flat);
say "Maker[$from,$to]($.dir/$.basename)::make processing $lang";
my ($processed-contents,@new_deps) = self.process-contents(
$src,
);
$dsts.set-for-lang(
$lang,
$.wc.put-file($.dir,$.basename,$lang,$to,
$processed-contents),
);
$deps.set-for-lang($lang,@new_deps)
if @new_deps;
}
$.set-deps($deps);
return $dsts;
}
}