/[cvs]/nfo/perl/libs/DesignPattern/Bridge.pm
ViewVC logotype

Diff of /nfo/perl/libs/DesignPattern/Bridge.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7 by joko, Tue Feb 11 10:34:19 2003 UTC revision 1.11 by joko, Fri Feb 21 08:38:21 2003 UTC
# Line 2  Line 2 
2  ##  $Id$  ##  $Id$
3  ## --------------------------------------------------------------------------------  ## --------------------------------------------------------------------------------
4  ##  $Log$  ##  $Log$
5    ##  Revision 1.11  2003/02/21 08:38:21  joko
6    ##  + additional checks
7    ##  + raising exceptions
8    ##
9    ##  Revision 1.10  2003/02/20 20:50:32  joko
10    ##  + small exception handling: now inheriting from little Exception object
11    ##
12    ##  Revision 1.9  2003/02/18 18:35:30  joko
13    ##  + encapsulated/abstracted some more functionality: sub load_single
14    ##
15    ##  Revision 1.8  2003/02/14 14:20:05  joko
16    ##  + modified mixin behaviour
17    ##
18  ##  Revision 1.7  2003/02/11 10:34:19  joko  ##  Revision 1.7  2003/02/11 10:34:19  joko
19  ##  + loaded module may now lack 'mixin::with' declaration  ##  + loaded module may now lack 'mixin::with' declaration
20  ##  + this gets us the possibility to load modules from any perl namespace  ##  + this gets us the possibility to load modules from any perl namespace
# Line 34  package DesignPattern::Bridge; Line 47  package DesignPattern::Bridge;
47  use strict;  use strict;
48  use warnings;  use warnings;
49    
50  use base qw( DesignPattern::Object );  use base qw(
51      DesignPattern::Object
52      DesignPattern::Exception
53    );
54    
55    
56  use Data::Dumper;  use Data::Dumper;
57    
# Line 126  sub new { Line 143  sub new {
143    sub load {    sub load {
144    
145      my $self = shift;      my $self = shift;
146        my $modulename = shift;
147        my $options = shift;
148    
149        if (ref $modulename eq 'ARRAY') {
150          foreach (@$modulename) {
151            $self->load_single($_, $options);
152          }
153        } else {
154          $self->load_single($modulename, $options);
155        }
156    
157      }
158    
159      sub load_single {
160    
161        my $self = shift;
162      my $modulename_load = shift;      my $modulename_load = shift;
163    
164      my $options = shift;      my $options = shift;
# Line 143  sub new { Line 176  sub new {
176    
177      # this is the module testing phase - use mixin doesn't seem to propagate errors by default      # this is the module testing phase - use mixin doesn't seem to propagate errors by default
178      eval("use $package;");      eval("use $package;");
179        $self->checkExceptions();
180        
181    =pod    
182      if ($@) {      if ($@) {
183        $meta->{loaded}->{$package} = 0;        $meta->{loaded}->{$package} = 0;
184        # include caller information        # include caller information
# Line 155  sub new { Line 191  sub new {
191          print $msg, "\n";          print $msg, "\n";
192        }        }
193      }      }
194    =cut
195    
196  #print "ref-1: ", ref $self, "\n";  #print "ref-1: ", ref $self, "\n";
197  #print "ref-2: ", ref $self::SUPER, "\n";  #print "ref-2: ", ref $self::SUPER, "\n";
# Line 163  sub new { Line 200  sub new {
200      #bless $self, $package;      #bless $self, $package;
201    
202      # V2:      # V2:
203        $self->mixinPackage($package);
204        
205        if (my $method = $options->{method}) {
206          $self->$method();
207        }
208    
209        return 1;
210        
211      }
212      
213      sub mixinPackage {
214        my $self = shift;
215        my $package = shift;
216        
217      # switch into foreign package and prepare for mixin      # switch into foreign package and prepare for mixin
218      $self->mixin_prepare($package);      $self->mixin_prepare($package);
219    
220      # switch into local package (scope which uses DesignPattern::Bridge) and mixin plugin-module      # switch into local package (scope which uses DesignPattern::Bridge) and mixin plugin-module
221      $self->mixin_do($package);      $self->mixin_do($package);
222    
     if (my $method = $options->{method}) {  
       $self->$method();  
     }  
   
     return 1;  
       
223    }    }
224    
225    # TODO: maybe refactor to DesignPattern::Object? what about the '$logger'?    # TODO: maybe refactor to DesignPattern::Object? what about the '$logger'?
# Line 240  sub new { Line 284  sub new {
284      my $self = shift;      my $self = shift;
285      my $includefile = shift;      my $includefile = shift;
286      my $package = shift;      my $package = shift;
287      # TODO: do better error-detection here / prevent dies under all circumstances!      
288      require $includefile;      # pre-flight checks
289        if (!$includefile) {
290          $self->raiseException('Filename for inclusion was empty.');
291          return;
292        }
293        
294        # go for it ...
295        eval("require '$includefile';");
296        # ... and handle errors afterwards catching every message from perl itself ...
297        return if $self->checkExceptions();
298        
299        # ... otherwise continue assuming everything is fine
300      $self->mixinPackage($package) if $package;      $self->mixinPackage($package) if $package;
301        
302    }    }
303    
304  1;  1;

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.11

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