Hatena::Groupcatalyst

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

2006-12-22

[]Catalyst::Utils Catalyst::Utils - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Catalyst::Utils - LAPISLAZULI HILL#Catalyst Catalyst::Utils - LAPISLAZULI HILL#Catalyst のブックマークコメント

一時ファイルの作成とpackage別の一時ディレクトリ - Yet Another Hackadelicを見てちょっと調べてみた.直接の動きを調べただけなので何に使うかなどは調べてないし,有益な情報はないけどメモ

http://search.cpan.org/dist/Catalyst-Runtime-5.7006/lib/Catalyst/Utils.pm

class2hoge, home, prefix

  • appprefix($class)
  • class2appclass($class);
  • class2classprefix($class);
  • class2classsuffix($class);
  • class2env($class);
  • class2prefix( $class, $case );
  • class2tempdir( $class [, $create ] );
  • home($class)
  • prefix($class, $name);

このあたりまではクラス名から何かしらの名前やパスを取り出します

# MyApp::Controller::Rootで
$c->response->body(
    'appprefix          : ' .Catalyst::Utils::appprefix(__PACKAGE__) ."\n".
    'class2appclass     : ' .Catalyst::Utils::class2appclass(__PACKAGE__) ."\n".
    'class2classprefix  : ' .Catalyst::Utils::class2classprefix(__PACKAGE__) ."\n".
    'class2classsuffix  : ' .Catalyst::Utils::class2classsuffix(__PACKAGE__) ."\n".
    'class2env          : ' .Catalyst::Utils::class2env(__PACKAGE__) ."\n".
    'class2prefix       : ' .Catalyst::Utils::class2prefix(__PACKAGE__, 0) ."\n".
    'class2tempdir      : ' .Catalyst::Utils::class2tempdir(__PACKAGE__) ."\n".
    'home               : ' .Catalyst::Utils::home(__PACKAGE__) ."\n".
    'prefix             : ' .Catalyst::Utils::prefix(__PACKAGE__, 'pdf') ."\n"
);

# appprefix          : myapp_controller_root
# class2appclass     : MyApp
# class2classprefix  : MyApp::Controller
# class2classsuffix  : Controller::Root
# class2env          : MYAPP_CONTROLLER_ROOT
# class2prefix       : root                       # $caseがfalseならlower case
# class2tempdir      : /tmp/myapp/controller/root # クラス用のtmpフォルダへのパス$createに1を渡せばディレクトリ作成される
# home               : /home/lapis25/MyApp        # アプリのhomeまでのフルパス
# prefix             : root/pdf

request($uri)

指定したuriHTTP::Requestオブジェクトを返す.httpから始まってない場合は前にhttp://localhostを付けて取得する

$c->response->body(
    Dumper(Catalyst::Utils::request('http://localhost/hogehoge')) ."\n".
    Dumper(Catalyst::Utils::request('/pdf')) ."\n"
);
# $VAR1 = bless( {
#                  '_content' => '',
#                  '_headers' => bless( {}, 'HTTP::Headers' ),
#                  '_method' => 'GET',
#                  '_uri' => bless( do{\(my $o = 'http://localhost/hogehoge')}, 'URI::http' )
#                }, 'HTTP::Request' );
# 
# $VAR1 = bless( {
#                  '_content' => '',
#                  '_headers' => bless( {}, 'HTTP::Headers' ),
#                  '_method' => 'GET',
#                  '_uri' => bless( do{\(my $o = 'http://localhost/pdf')}, 'URI::http' )
#                }, 'HTTP::Request' );

ensure_class_loaded($class_name)

クラスがロードされてなかったらロードする

# MyApp.pm use Catalyst qw/-Debug ConfigLoader Static::Simple/;のみ
    Catalyst::Utils::ensure_class_loaded('Catalyst::Plugin::Dumper');
    $c->log->dumper('ensure_class_loaded');

# 結果 エラー出ずにlogに出てる
# [debug] $VAR1 = 'ensure_class_loaded';
#

Catalyst::Utils::ensure_class_loadedの行がなければ,エラーが出る

Caught exception in MyApp::Controller::Root->default "Can't locate object method "dumper" via package "Catalyst::Log" at /home/komori/MyApp/script/../lib/MyApp/Controller/Root.pm line 39."


merge_hashes($hashref, $hashref)

そのまんま,hashをマージする

use Data::Dumper;
my $hasha = { test1 => 'test1'};
my $hashb = { test2 => 'test2'};
my $hashc = Catalyst::Utils::merge_hashes( $hasha, $hashb);
$c->response->body( Dumper($hashc) );

#結果
#$VAR1 = {
#          'test1' => 'test1',
#          'test2' => 'test2'
#        };

ZIGOROuZIGOROu2006/12/23 02:05いつも熱心ですね。参考にさせて頂きます。

lapis25lapis252006/12/23 22:33ホントメモだけなので役に立つ情報がないので恐縮です.むしろZIGOROuさんのところはいつも参考にさせて貰ってます

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