Changeset 8740

Show
Ignore:
Timestamp:
04/03/08 15:52:01 (8 months ago)
Author:
yappo
Message:

lang/perl/HTTP-MobileAttribute?: plugin は一度しか new しないようにしたよ

Location:
lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP/MobileAttribute.pm

    r8738 r8740  
    88use Scalar::Util qw/refaddr/; 
    99 
    10 __PACKAGE__->load_components(qw/Autocall::InjectMethod/); 
     10__PACKAGE__->load_components(qw/DisableDynamicPlugin Autocall::InjectMethod/); 
    1111__PACKAGE__->load_plugins(qw/ 
    1212    Carrier IS GPS 
     13    Default::DoCoMo Default::ThirdForce Default::EZweb Default::NonMobile Default::AirHPhone 
    1314/); 
    1415 
     
    2223    # create a function that does the right thing and use it 
    2324    my $carrier_longname = HTTP::MobileAttribute::CarrierDetector::detect($request->get('User-Agent')); 
    24     my $self = $class->NEXT( 
     25    my $carrier_class = $class->agent_class($carrier_longname); 
     26 
     27    for my $type (qw/ components plugins methods hooks /) { 
     28        my $method = "class_component_$type"; 
     29        $carrier_class->$method($class->$method); 
     30    } 
     31 
     32    my $self = $carrier_class->NEXT( 
    2533        'new' => +{ 
    2634            request          => $request, 
     
    2836        } 
    2937    ); 
    30     $self = bless {%$self}, "HTTP::MobileAttribute::Agent::$carrier_longname"; # rebless to carrier specific package. 
    31     $self->load_plugins("Default::$carrier_longname"); 
     38 
     39    $self->run_hook("instance_clear"); # clear instance data 
    3240    $self->run_hook("initialize_$carrier_longname"); 
    3341    return $self; 
     
    4048 
    4149sub user_agent { shift->request->get('User-Agent') } 
     50 
     51sub agent_class { 'HTTP::MobileAttribute::Agent::' . $_[1] } 
    4252 
    4353package # hide from pause 
  • lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP/MobileAttribute/Attribute/CarrierMethod.pm

    r8709 r8740  
    77    my ( $class, $plugin, $c, $method, $carrier, $code ) = @_; 
    88 
    9     if ($c->carrier_longname eq $carrier) { 
    10         $c->register_method( $method => $plugin ); 
    11     } 
     9    $c->agent_class($carrier)->register_method( $method => $plugin ); 
    1210} 
    1311 
  • lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP/MobileAttribute/Plugin.pm

    r8672 r8740  
    55 
    66sub mk_register_accessors { 
    7     my $self = shift; 
    8     my $c    = shift; 
    9     my $class = ref $self; 
     7    my $self    = shift; 
     8    my $carrier = shift; 
     9    my $class   = ref $self; 
    1010 
     11    my $pkg = HTTP::MobileAttribute->agent_class($carrier); 
    1112    for my $method (@_) { 
    1213        no strict 'refs'; 
    1314        *{"$class\::$method"} = sub { shift->{$method} } unless *{"$class\::$method"}{CODE}; 
    14         $c->register_method( $method => $self ); 
     15        $pkg->register_method( $method => $self ); 
    1516    } 
    1617} 
     18 
     19sub instance_clear : Hook('instance_clear') { 
     20    my($self, $c) = @_; 
     21    for my $key (keys %{ $self }) { 
     22        delete $self->{$key} unless $key eq 'config'; 
     23    } 
     24} 
     25 
    17261; 
  • lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP/MobileAttribute/Plugin/Default/AirHPhone.pm

    r8736 r8740  
    77    my ($self, $c) = @_; 
    88 
    9     $self->mk_register_accessors( $c => qw(name vendor model model_version browser_version cache_size)); 
     9    $self->mk_register_accessors( AirHPhone => qw(name vendor model model_version browser_version cache_size)); 
    1010    $self->parse($c->user_agent); 
    1111} 
  • lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP/MobileAttribute/Plugin/Default/DoCoMo.pm

    r8736 r8740  
    66our $DefaultCacheSize = 5; 
    77 
     8 
    89sub initialize : Hook('initialize_DoCoMo') { 
    910    my ( $self, $c ) = @_; 
    1011 
    11     $self->mk_register_accessors( $c => qw/version model status bandwidth serial_number is_foma card_id xhtml_compliant comment/); 
    12  
     12    $self->mk_register_accessors( DoCoMo => qw/version model status bandwidth serial_number is_foma card_id xhtml_compliant comment/); 
    1313    $self->parse( $c ); 
    1414} 
  • lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP/MobileAttribute/Plugin/Default/EZweb.pm

    r8736 r8740  
    77    my ( $self, $c ) = @_; 
    88 
    9     $self->mk_register_accessors( $c => qw(name version model device_id server xhtml_compliant comment)); 
     9    $self->mk_register_accessors( EZweb => qw(name version model device_id server xhtml_compliant comment)); 
    1010 
    1111    $self->parse( $c ); 
  • lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP/MobileAttribute/Plugin/Default/ThirdForce.pm

    r8736 r8740  
    77    my ($self, $c) = @_; 
    88 
    9     $self->mk_register_accessors( $c => qw(name version model type packet_compliant serial_number vendor vendor_version java_info)); 
     9    $self->mk_register_accessors( ThirdForce => qw(name version model type packet_compliant serial_number vendor vendor_version java_info)); 
    1010    $self->{user_agent} = $c->user_agent; 
    1111    $self->parse($c);