summaryrefslogtreecommitdiff
path: root/lib/WebCoso/Maker.pm
blob: bcf759bb99f4d7de301ce54ae19637c614d061cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# -*- mode: perl6 -*- 
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;
    }
}