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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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