CatalystとConfig

| 0 Comments | 0 TrackBacks | このエントリーをはてなブックマークに追加 このエントリーのはてなブックマーク件数

こんにちはこんにちは! tomyheroです! トミヘロじゃなくて、とぅーまいひーろ って読むんだよ!


今自分の中で流行ってる、CatalystとConfig周りの実装をこっそり晒そうと思うよ。 

aim

catalystアプリだけじゃなくて、外からでも使えるように実装したほうがいいとおもうんだよ!

MyApp::Config

Config::Multiをシングルトンで、どこでもつかえるようにするよ。  MyApp::Utils というので、設定ファイルのパスをとってますね!これについては、後で書くよ!

package MyApp::Config;

use strict;
use warnings;
use Config::Multi;
use MyApp::Utils;
use base 'Class::Singleton';

our $FILES ;
sub _new_instance {
    my $cm = Config::Multi->new(
        {
        dir => MyApp::Utils::path_to('conf')->stringify ,
        app_name    => 'myapp' ,
        extension   => 'yml'
    });
    my $config = $cm->load();
    $FILES = $cm->files;
    return $config;
}
sub files {
    return $FILES;
}

1;

MyApp::Utils

アプリケーションのUtilsモジュールだよ。Catalyst::Utilsだと、カタリスト依存しちゃうから、自分で作っちゃった方が良いと思うよ。 path_toとかのコードは、Catalystを参考にパクると良いと思うよ。

package MyApp::Utils;

use warnings;
use strict;
use Path::Class::Dir;
use Path::Class::File;
use FindBin;

sub home {
    return $ENV{MYAPP_HOME} ||  Path::Class::Dir->new(  $FindBin::Bin, './../' );
}

sub path_to {
    my ( @path ) = @_;
    my $path = Path::Class::Dir->new( &home , @path );
    warn $path;
    if ( -d $path ) { return $path }
    else { return Path::Class::File->new( &home, @path ) }
}

1;

MyApp::Plugin::Config

オレオレコンフィグプラグインを作るよ!

ぶっちゃけ、MyApp::Config を $c->config にぶっ込んでるだけだよ。

package MyApp::Plugin::Config;

use strict;
use warnings;
use MyApp::Config;
use NEXT;

our $VERSION ='0.02';

sub setup {
    my $c = shift;
    my $config = MyApp::Config->instance();

    if( $c->debug ) {
        my $files = MyApp::Config->files();
        for my $file ( @{$files} ) {
            $c->log->debug( 'Load Config ' . $file );
        }
    }

    $c->config( $config ) ;
    $c->NEXT::setup( @_ );
}

1;

MyApp::Web

カタリストアプリだよ。プラグイン読み込むよ。

package MyApp::Web;

use strict;
use warnings;
use Catalyst::Runtime '5.70';
use Catalyst qw/+MyApp::Plugin::Config/;
our $VERSION = '0.01';
__PACKAGE__->setup;

1;

conf/myapp_web.yml

設定ファイルだよ。

---
name: Config Sample

MyApp::Web::Controller::Root

コンフィグデータが、ちゃんととれてるか表示するよ!

package MyApp::Web::Controller::Root;

use strict;
use warnings;
use base 'Catalyst::Controller';

__PACKAGE__->config->{namespace} = '';

sub default : Private {
    my ( $self, $c ) = @_;
    $c->response->body(  $c->config->{name} );
}

sub end : ActionClass('RenderView') {}

1;

たぶんみえてるんじゃないかな!

おわり

以上だよ。 

ちなみに、 MyApp::Config はどこからでも呼べるから、ガンガン呼ぶと良いと思うよ。多い日も安心だね!


:wq!

No TrackBacks

TrackBack URL: http://perl-mongers.org/MT/mt-tb.cgi/77

Leave a comment

About this Entry

This page contains a single entry by tomyhero [livedoor.com] published on August 14, 2008 11:11 PM.

HTTP::Asyncで速度アップ was the previous entry in this blog.

Getopt::Chainでgitライクなsubcommandを処理する is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

Creative Commons License
This blog is licensed under a Creative Commons License.
Powered by Movable Type 4.21-en