aboutsummaryrefslogtreecommitdiff
path: root/lib/WebCoso/Config.pm
blob: f8dee5ace543494b7a47b011964168b4a3bf3a21 (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package WebCoso::Config; 
use strict;
use warnings;
use WebCoso::Config::Collections;
use WebCoso::X;
 
my @resources;
my $collections=WebCoso::Config::Collections->new();
 
sub read_scalar {
    my ($class,$content,$filename)=@_;
    $WebCoso::Config::Helpers::FILENAME=$filename;
    $content=<<'EOF'.$content;
package WEBCOSO::CONFIG;
no strict;
WebCoso::Config::Helpers->import();
EOF
    eval $content;
    if ($@) {
        WebCoso::X::ConfigError->throw(
            filename => $filename,
            error => $@);
    }
    else {
        return 1;
    }
}
 
sub add_resource {
    my ($class,$resource)=@_;
    push @resources,$resource;
}
 
sub get_all_resources {
    return @resources;
}
 
sub add_collection {
    my ($class,$collection)=@_;
    $collections->add_collection($collection);
}
 
sub get_collections {
    return $collections;
}
 
sub clear {
    @resources=();
    $collections=WebCoso::Config::Collections->new();
}
 
package WebCoso::Config::Helpers; 
use Path::Class;
use WebCoso::Config::Resource;
use WebCoso::Config::Collection;
use Exporter::Lite;
use vars qw($FILENAME @EXPORT);
 
@EXPORT=qw(res coll);
 
sub res {
    my $dest_filename=pop @_;
    my $pipeline_name=pop @_;
    my @source_files=@_;
 
    my $config_dir=file($FILENAME)->parent->absolute;
 
    $dest_filename=file($dest_filename)->absolute($config_dir);
 
    my @abs_source_files = map {
        my $abs_name=file($_)->absolute($config_dir);
        if (!-e $abs_name) {
            WebCoso::X::FileNotFound->throw(
                filename => $_,
                abs_filename => $abs_name);
        };
        $abs_name;
    @source_files;
 
    WebCoso::Config::Resource->new({
        sources=>[@abs_source_files],
        pipeline=>$pipeline_name,
        destination=>$dest_filename
    });
}
 
sub coll {
    my ($name,$parents,$children,$resources)=@_;
    WebCoso::Config::Collection->new({
        name=>$name,
        parents=>$parents||[],
        children=>$children||[],
        resources=>$resources||[],
    });
}
 
1;