Hatena::Groupcatalyst

LAPISLAZULI HILL#Catalyst このページをアンテナに追加 RSSフィード

2007-10-10

[][]Catalyst::Model::Adapter調査中のメモ1 Catalyst::Model::Adapter調査中のメモ1 - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Catalyst::Model::Adapter調査中のメモ1 - LAPISLAZULI HILL#Catalyst Catalyst::Model::Adapter調査中のメモ1 - LAPISLAZULI HILL#Catalyst のブックマークコメント

AdaptorとかFactoryデザインパターンのだろうか.デザインパターン勉強しないとダメ

URL

使い方

SYNOPSISのとおり.

package MyApp::Model::SomeClass;
use strict;
use warnings;
use base 'Catalyst::Model::Adaptor';

__PACKAGE__->config(
    class       => 'MyApp::Backend::SomeClass',
    constructor => 'new',
    args        => 'hoge',
);

1;

Helper

podではcatalyst.plになってるけど,./script/<app_name>_create.plだと思う

ARGUMENTS

./script/myapp_create.pl model <model_name> Adaptor <class> [<constructor>]

自分で作ったクラスならSYNOPSISのようにいままでのModelをMyApp::Backend::*に移動して指定する,あるいはそこに作る.

./script/myapp_create.pl model SomeClass Adaptor MyApp::Backend::SomeClass create

調べ残しとか,わからないこととか,そもそも分かってないこととか

  • classにDateTimeを直接指定してみたんだけど,動かない.ソースを読んでみたので理由も分かる.もう1枚噛まさないと解決しないような気がするし,そっちのほうが使いやすい気がする→やってみる
  • argsで引数が1コしか指定できない.ハッシュリファレンスを渡すクラスなら問題ないけど→まさにDateTimeは引っかかる気が
  • MVCすら正確に理解できていない気がする→とほほ.勉強しる

[][][]Catalyst::Model::Adapterについて調べる Catalyst::Model::Adapterについて調べる - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Catalyst::Model::Adapterについて調べる - LAPISLAZULI HILL#Catalyst Catalyst::Model::Adapterについて調べる - LAPISLAZULI HILL#Catalyst のブックマークコメント

2007年10月10日 miyagawa catalyst こういうプラグインはもうないほうがいいとおもう。Model::Adapter

Catalyst::Model::Adapterに関してはno titleで,見ていたのだけど利点と用途を理解してなかった

ちゃんと調べること→me

[][]C::P::Datetimeのメモ1(使い方) C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst のブックマークコメント

このやり方よりCatalyst::Model::Adaptorを使った方がよいです.やりかたは404 Error - Not Foundで,DateTimeでのやり方も分かりますよ

-----

PluginというよりDateTime自体の自分メモその1

ふつうの使い方

use Catalyst qw/ DateTime /;

my $dt_now = $c->datetime; # now   2007-10-10T07:09:54
my $dt_now2 = $c->dt;      # short 2007-10-10T07:09:54
my $dt_today = $c->datetime( year => 2007, month => 10, day => 10); # 2007-10-10T00:00:00

$c->datetime->todayとかないじゃん

C::P::DateTime::Constructorを使う

  • from_epoch, today
  • from_object
  • from_day_of_year
  • last_day_of_month

というメソッドを$cに生やしてくれる

use Catalyst qw/ DateTime::Constructor /;

my $dt_today = $c->today; # 2007-10-10T00:00:00

my $from_day_of_year  = $c->from_day_of_year(  year => 2007, day_of_year => 300 ); # 2007-10-27T00:00:00
my $last_day_of_month = $c->last_day_of_month( year => 2007, month => 10); # 2007-10-31T00:00:00

アプリ用Pluginを作った方がいいかも

timezoneとか指定するのがめんどくさい.最初はC::P::DateTimeを継承しようと思ったけど,コピペしてみた.無指定時のtzはAsia/Tokyoで決め打ちにしてみた

package MyApp::Plugin::DateTime;

use strict;
use warnings;

use Catalyst::Exception;
use DateTime;

our $VERSION = "0.01";

sub datetime {
    my $c = shift;
    my %params = @_;

    my $tz = delete $params{time_zone} || 'Asia/Tokyo';

    # use params if argued
    if (%params) {
        return DateTime->new(\%params)->set_time_zone($tz);
    }
    else { # otherwise use now
        return DateTime->now(time_zone => $tz);
    }
}

sub today {
    my $c  = shift;
    my %params = @_;

    my $tz = delete $params{time_zone} || 'Asia/Tokyo';

    # use params if argued
    if (%params) {
        return DateTime->today(\%params)->set_time_zone($tz);
    }
    else { # otherwise use now
        return DateTime->today(time_zone => $tz);
    }
}

1;

これに,必要に応じて他のメソッドも生やしていくとか,timezone指定を設定から読み込むとか

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20071010