Unknown::Programming このページをアンテナに追加 RSSフィード

2007-05-07 方向

HTTP::MobileAgent::Plugin::UserIDの方がいいのかも

あんまりHTTP::MobileAgentが肥大化していくのがどうなの?っていうのとユーザID取得するモジュールがないっぽかったので切り離して作ってみたんだけども、やっぱりHTTP::MobileAgentオブジェクトから$agent->user_idとか呼べた方が良いのかもしれない。

個人的には分かれてるほうが保守しやすいと思うのでHTTP::MobileUserIDはこれでおきつつ別途Pluginを作ってみたり。


package HTTP::MobileAgent::Plugin::UserID;
use strict;
use warnings;
use HTTP::MobileUserID;

our $VERSION = '0.01';

no strict 'refs';
for my $accessor (qw/user_id is_supported_user_id/) {
    *{"HTTP::MobileAgent::$accessor"} = sub {
        my ($self) = @_;
        $self->{mobile_userid} ||= do {
            my $userid = HTTP::MobileUserID->new($self);
            +{ user_id => $userid->id , is_supported_user_id => $userid->supported };
        };
        return $self->{mobile_userid}->{$accessor};
    };
}

1;

さてさて。ハラ減った。

こゆこと?

http://d.hatena.ne.jp/tokuhirom/20070507/1178495922


package HTTP::MobileAgent::Plugin::UserID;
use strict;
use warnings;
use HTTP::MobileUserID;

our $VERSION = '0.01';

sub import {
    my $pkg = caller(0);
    
    my $getter = sub {
        my $self   = shift;
        my $userid = HTTP::MobileUserID->new($self);
        return +{ user_id => $userid->id , supported => $userid->supported };
    };
    
    my $key = join ",", __PACKAGE__, 'user_id';
    
    no strict 'refs';
    *{"${pkg}::user_id"} = sub {
        my ($self, ) = @_;
        $self->{$key} ||= $self->$getter;
        return $self->{$key}->{user_id};
    };
    *{"${pkg}::is_supported_user_id"} = sub {
        my ($self, ) = @_;
        $self->{$key} ||= $self->$getter;
        return $self->{$key}->{supported};
    }
}

1;

ふぅむ。確かにMobileAgentから扱えたほうが便利っぽくていいのかなぁ。