kopug memo

名古屋で働くとあるWebエンジニアの覚書。

Cache::Funky in Catalyst

id:tomyheroCatalystでCache::Funkyをどう使うんだ?と聞かれた。
ま、正直どう使うのが正解なのか良く分からないんだけど、modelで実装してみた。

package MyApp:Web::M::kopugDB;

use strict;
use base 'Catalyst::Model::DBIC::Schema';
use NEXT;

__PACKAGE__->config(
    schema_class => 'MyDB::Schema',
    connect_info => [
    ],
);

sub new {
    my ( $class, $c, @args ) = @_;
    my $s = $class->NEXT::new( $c, @args );

    $c->model('MyCache')->mk_cache( $s->schema );

    return $s;
}
package MyApp::Web::M::MyCache;

use strict;
use warnings;
use base qw( Catalyst::Model Cache::Funky );

__PACKAGE__->setup( 'Storage::Simple' => {} );

sub mk_cache {
    my $s      = shift;
    my $schema = shift;

    __PACKAGE__->register(
                    'foo',
                    sub {
                        $schema->resultset('Bookmarks')
                               ->search({});
                    }
                );
}


適当にCでこんな感じで取れた。

sub hoge:Local {
    my ( $s, $c ) = @_;

    $c->model('MyCache')->foo;
}

別にModelにしなくても MyApp::MyCache とか作ってそいつをC内でuseして使ってもいいのかも。