/[cvs]/nfo/perl/libs/Data/Rap/Engine.pm
ViewVC logotype

Annotation of /nfo/perl/libs/Data/Rap/Engine.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Tue Feb 18 15:35:25 2003 UTC (21 years, 4 months ago) by joko
Branch: MAIN
+ initial commit

1 joko 1.1 ## ----------------------------------------------------------------------
2     ## $Id: Ref.pm,v 1.1 2003/01/22 17:59:22 root Exp $
3     ## ----------------------------------------------------------------------
4     ## $Log: Ref.pm,v $
5     ## ----------------------------------------------------------------------
6    
7    
8     package Data::Rap::Engine;
9    
10     use strict;
11     use warnings;
12    
13    
14     use Data::Dumper;
15     use Data::Transform::Deep qw( refexpr2perlref );
16     use Iterate;
17     use Hash::Merge qw( merge );
18    
19    
20     sub performTarget {
21     my $self = shift;
22     my $targetname = shift;
23     my $target = $self->getTargetMetadata($targetname);
24    
25     # trace
26     #print Dumper($target);
27     #exit;
28    
29     # resolve dependencies (just run prior)
30     if (my $targetname_dep = $target->{attrib}->{depends}) {
31     $self->performTarget($targetname_dep);
32     delete $target->{attrib}->{depends};
33     }
34    
35     foreach my $entry (@{$target->{content}}) {
36     my $command = $entry->{name};
37     my $args = $entry->{attrib};
38     $self->run_command($command, $args);
39     }
40     }
41    
42     sub rc {
43     my $self = shift;
44     return $self->run_command(@_);
45     }
46    
47     sub run_command {
48     my $self = shift;
49     my $command = shift;
50    
51     if (!$command) {
52     $self->log("Command was empty!", 'warning');
53     return;
54     }
55    
56     my $args_list = shift;
57     my $args = {};
58     #print Dumper($args_list);
59     if ($args_list) {
60     if (ref $args_list eq 'ARRAY') {
61     foreach (@$args_list) {
62     $args = merge($args, $_);
63     }
64     } else {
65     $args = $args_list;
66     }
67     }
68     $command = '_' . $command;
69     if ($self->can($command)) {
70     $self->$command($args);
71     } else {
72     $self->log("Command \"$command\" not implemented.", "warning");
73     }
74     }
75    
76     sub set_property {
77     my $self = shift;
78     my $args = shift;
79    
80     my $name;
81     my $value;
82    
83     if (ref $args) {
84     $self->interpolate($args) ;
85     $name = $args->{name};
86     $value = $args->{value};
87    
88     } else {
89     $name = $args;
90     $value = shift;
91     }
92    
93     # check if slot (or childs of it) is/are already occupied
94     if (my $oldvalue = refexpr2perlref($self, $name, undef, '.')) {
95     # FIXME: review - any options for 'merge' here?
96     $value = merge($oldvalue, $value);
97     }
98    
99     # fill property slot with given value
100     if ($value) {
101     refexpr2perlref($self, $name, $value, '.');
102     }
103    
104     # FIXME!!!
105     return if ! ref $args;
106    
107     # fill property slot with (probably bigger) data structure from property-/configuration-style - file
108     if (my $file = $args->{file}) {
109     my $type = $args->{type};
110     if (!$type) {
111     die("default file (no type specified) is not implemented yet!");
112    
113     } elsif ($type eq 'perl-eval') {
114     #die($type);
115     $self->loadFromPerlFile($file, $name, $args->{'varnames'});
116    
117     } elsif ($type eq 'App::Config') {
118     die("not implemented: $type");
119    
120     }
121    
122     } elsif (my $command = $args->{command}) {
123     $self->run_command($command, $args);
124    
125     }
126    
127     }
128    
129     sub get_property {
130     my $self = shift;
131     #my $args = shift;
132     my $name = shift;
133    
134     #$self->interpolate($args);
135    
136     #my $name = $args->{name};
137    
138     # get property slot and return value
139     return refexpr2perlref($self, $name, undef, '.');
140    
141     }
142    
143     sub interpolate {
144     my $self = shift;
145     my $ref = shift;
146     IterHash %$ref, sub {
147     #print $_[1], "\n";
148     $_[1] =~ s/\${(.+)}/$self->get_property($1)/e;
149     }
150     }
151    
152     1;
153     __END__

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed