summaryrefslogtreecommitdiff
path: root/lib/WebCoso.pm
blob: a990b6702a7787bfd93aeebb641c51ef6214b1ec (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
67
68
69
70
# -*- mode: perl6 -*- 
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) {
        say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-src-files($dir,$basename,$ext)";
        my @files = gather {
            for $.srcdir,$!tmpdir -> $base {
                take $_ for try {
                    CATCH { when X::IO { } }
                    $dir ?? $base.child($dir) !! $base ).dir(
                        test => /$basename \. .+? \. $ext/,
                    )
                // ();
            }
        }
        say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-src-files($dir,$basename,$ext) files = {@files.perl}";        
        return (
            map {
                (.basename ~~ /$basename \. (.+?) \. $ext/)[0]
                =>
                $_
            }, @files
        ).values;
    }
 
    method get-made-files($dir,$basename,$ext) {
        say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-made-files($dir,$basename,$ext)";
        if %!docs{$dir}{$basename-> $doc {
            say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-made-files($dir,$basename,$ext) at $doc";
            return $doc.make-by-ext($ext)
        }
        return ();
    }
    
    method get-files($dir,$basename,$ext,:$make=True) {
        say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-files($dir,$basename,$ext,$make)";
        my %src = self.get-src-files($dir,$basename,$ext);
        my %made = ( $make ?? self.get-made-files($dir,$basename,$ext) !! () );
        return flat %src,%made;
    }
 
    method put-file($dir,$basename,$lang,$ext,$contents) {
        say "WebCoso($.srcdir,$.destdir,$!tmpdir)::put-file($dir,$basename,$lang,$ext)";
        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
    }
}