/[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.3 by joko, Mon Dec 16 19:57:12 2002 UTC revision 1.4 by joko, Mon Jan 20 16:55:15 2003 UTC
# Line 2  Line 2 
2  ##  $Id$  ##  $Id$
3  ## --------------------------------------------------------------------------------  ## --------------------------------------------------------------------------------
4  ##  $Log$  ##  $Log$
5    ##  Revision 1.4  2003/01/20 16:55:15  joko
6    ##  + sub mixinPackage
7    ##  + sub include
8    ##
9  ##  Revision 1.3  2002/12/16 19:57:12  joko  ##  Revision 1.3  2002/12/16 19:57:12  joko
10  ##  + sub unload  ##  + sub unload
11  ##  ##
# Line 100  my $meta; Line 104  my $meta;
104      my $self = shift;      my $self = shift;
105      my $modulename_load = shift;      my $modulename_load = shift;
106    
107        my $self_modulename = ref $self;
108      my $package = $self->_getPluginPackage($modulename_load);      my $package = $self->_getPluginPackage($modulename_load);
109            
110      if ($meta->{loaded}->{$package}) {      if ($meta->{loaded}->{$package}) {
111        return 1;        return 1;
112      }      }
113            
114      $logger->info( __PACKAGE__ . "->load: $package" );      #$logger->info( __PACKAGE__ . "->load: $package" );
115        #$logger->info( __PACKAGE__ . "->load: $self_modulename" );
116        $logger->debug( $self_modulename . "->load: $package\t[via " . __PACKAGE__ . "]" );
117    
118      # 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
119      eval("use $package;");      eval("use $package;");
# Line 126  my $meta; Line 133  my $meta;
133    
134      # V2:      # V2:
135      # switch into foreign package and mixin plugin-module      # switch into foreign package and mixin plugin-module
136        $self->mixinPackage($package);
137    
138        return 1;
139        
140      }
141    
142      # TODO: maybe refactor to DesignPattern::Object? what about the '$logger'?
143      sub mixinPackage {
144        my $self = shift;
145        my $package = shift;
146        # switch into foreign package and mixin plugin-module
147      my $self_classname = ref $self;      my $self_classname = ref $self;
148      eval("package $self_classname; use mixin '$package';");      eval("package $self_classname; use mixin '$package';");
149      #eval("use mixin_all '$package';");      #eval("use mixin_all '$package';");
# Line 135  my $meta; Line 153  my $meta;
153      } else {      } else {
154        $meta->{loaded}->{$package} = 1;        $meta->{loaded}->{$package} = 1;
155      }      }
   
     return 1;  
       
156    }    }
157    
158    sub unload {    sub unload {
# Line 160  my $meta; Line 175  my $meta;
175      my $self = shift;      my $self = shift;
176      $self->_abstract_function('boot');      $self->_abstract_function('boot');
177    }    }
178      
179      sub include {
180        my $self = shift;
181        my $includefile = shift;
182        my $package = shift;
183        # TODO: do better error-detection here / prevent dies under all circumstances!
184        require $includefile;
185        $self->mixinPackage($package) if $package;
186      }
187    
188  1;  1;

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

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