aboutsummaryrefslogtreecommitdiff
path: root/lib/WebCoso/Config.pm
blob: a72e49c2ef2f062e7af964ad0a5c2b711b2e3b73 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package WebCoso::Config; 
use strict;
use warnings;
use WebCoso::Config::Collections;
use WebCoso::Pipeline;
use WebCoso::X;
 
my @resources;
my $collections=WebCoso::Config::Collections->new();
my %resource_to_pipeline;
 
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 get_pipeline_for {
    my ($class$resource)=@_;
 
    WebCoso::X::NoSuchResource->throw(
        resource => $resource,
    unless exists $resource_to_pipeline{$resource};
 
    return $resource_to_pipeline{$resource};
}
 
sub clear {
    @resources=();
    $collections=WebCoso::Config::Collections->new();
    %resource_to_pipeline=();
}
 
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 $short_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;
 
    my $pipeline_name="WebCoso::Pipeline::$short_pipeline_name";
    if (! $pipeline_name->can('process') ) {
        WebCoso::X::NoSuchPipeline->throw(
            pipeline => $short_pipeline_name,
        );
    };
 
    my $resource=WebCoso::Config::Resource->new({
        sources=>[@abs_source_files],
        destination=>$dest_filename
    });
 
    # brutto! 
    $resource_to_pipeline{$resource}=$pipeline_name;
 
    return $resource;
}
 
sub coll {
    my ($name,$parents,$children,$resources)=@_;
 
    my $collection=WebCoso::Config::Collection->new({
        name=>$name,
        parents=>$parents||[],
        children=>$children||[],
        resources=>$resources||[],
    });
 
    return $collection;
}
 
1;