Changeset 11102 for lang/perl/Punc/trunk

Show
Ignore:
Timestamp:
05/04/08 20:28:19 (7 months ago)
Author:
mizzy
Message:

モジュールの仕組みをMooseつかって書き直してみた

Location:
lang/perl/Punc/trunk/lib/Punc/Slave
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Punc/trunk/lib/Punc/Slave/Module.pm

    r10107 r11102  
    33use strict; 
    44use warnings; 
     5use Punc::Util; 
     6use Moose; 
     7use MooseX::ClassAttribute; 
    58use Module::Pluggable; 
    6 use Punc::Util; 
     9 
     10class_has 'default_for' => ( isa => 'HashRef', is => 'rw', default => sub { {} } ); 
     11 
     12sub import { 
     13    my ( $class, $args ) = @_; 
     14    my $pkg = caller(0); 
     15    no strict 'refs'; 
     16    unshift @{"$pkg\::ISA"}, $class; 
     17    $pkg->default_for($args); 
     18} 
    719 
    820sub new { 
    921    my $class = shift; 
    10     $class->search_path( new => $class ); 
     22    my $self = bless {}, $class; 
     23    $self->delegate; 
     24} 
    1125 
    12     my @modules = $class->plugins; 
     26sub delegate { 
     27    my $self = shift; 
     28 
     29    $self->search_path( new => ref $self ); 
     30    my @modules = $self->plugins; 
     31    my $module_to_delegate; 
    1332    for my $module ( @modules ) { 
     33        next if $module =~ /Role$/; 
    1434        $module->require or die $@; 
    1535        my $default_for = $module->default_for; 
    1636        next unless $default_for; 
    17  
    1837        my ( $fact ) = keys %$default_for; 
    1938        if ( grep { Punc::Util->fact($fact) =~ /$_/i } @{ $default_for->{$fact} } ) { 
    20             $class = $module; 
     39            $module_to_delegate = $module; 
    2140        } 
    2241    } 
    2342 
    24     bless {}, $class; 
     43    bless $self, $module_to_delegate; 
    2544} 
    26  
    27 sub default_for { } 
    2845 
    2946sub exec { 
  • lang/perl/Punc/trunk/lib/Punc/Slave/Module/Service.pm

    r8565 r11102  
    33use strict; 
    44use warnings; 
    5 use base qw( Punc::Slave::Module ); 
    6 use UNIVERSAL::require; 
    75 
    8 sub status { 
    9     die; 
    10 } 
     6use Moose; 
    117 
     8extends 'Punc::Slave::Module'; 
     9 
     10package Punc::Slave::Module::Service::Role; 
     11use Moose::Role; 
     12requires 'status'; 
    1213 
    13141; 
  • lang/perl/Punc/trunk/lib/Punc/Slave/Module/Service/Debian.pm

    r10108 r11102  
    33use strict; 
    44use warnings; 
    5 use base qw( Punc::Slave::Module::Service ); 
     5use Punc::Slave::Module::Service { operatingsystem => [ qw / debian ubuntu / ] }; 
     6use Moose; 
    67 
    7 sub default_for { 
    8     return { 'operatingsystem' => [ 'debian', 'ubuntu' ] } 
    9 } 
     8with 'Punc::Slave::Module::Service::Role'; 
     9 
    1010 
    1111sub status { 
  • lang/perl/Punc/trunk/lib/Punc/Slave/Module/Service/RedHat.pm

    r10463 r11102  
    33use strict; 
    44use warnings; 
    5 use base qw( Punc::Slave::Module::Service ); 
     5use Punc::Slave::Module::Service { operatingsystem => [ qw / redhat fedora centos / ] }; 
     6use Moose; 
    67 
    7 ### TODO: もっと簡単に定義できないか考える 
    8 ### default_for { operatingsystem => [ qw/ redhat fedora centos / ] } とか 
    9 ### use Punc::Slave::Module::Service { operatingsystem => [ qw / fedora / ] } とか 
    10 sub default_for { 
    11     return { 'operatingsystem' => [ 'redhat', 'fedora', 'centos' ] } 
    12 } 
     8with 'Punc::Slave::Module::Service::Role'; 
    139 
    1410sub status { 
    1511    my ( $self, $args ) = @_; 
    16  
    1712    return $self->_command($args->[0], 'status'); 
    1813}