Changeset 2111

Show
Ignore:
Timestamp:
12/01/06 19:15:27
Author:
miyagawa
Message:

patch from dmaki

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Catalyst-View-Jemplate/trunk/MANIFEST

    r1806 r2111  
    11Changes 
     2lib/Catalyst/Helper/View/Jemplate.pm 
    23lib/Catalyst/View/Jemplate.pm 
    34Makefile.PL 
  • Catalyst-View-Jemplate/trunk/lib/Catalyst/View/Jemplate.pm

    r1806 r2111  
    88use Jemplate; 
    99use NEXT; 
     10use Path::Class; 
    1011 
    1112__PACKAGE__->mk_accessors(qw( jemplate_dir jemplate_ext encoding )); 
     
    3233    my($self, $c) = @_; 
    3334 
    34     my @files = File::Find::Rule->file 
    35                                 ->name( '*' . $self->jemplate_ext ) 
    36                                 ->in( $self->jemplate_dir )
     35    my $data   = $c->stash->{jemplate}; 
     36    my $cache  = $c->can('cache') ? $c->cache("jemplate") : undef; 
     37    my $output = ''
    3738 
    38     # xxx error handling? 
    39     my $js = Jemplate->compile_template_files(@files); 
     39    my $cache_key = $data->{key} || $c->req->match; 
     40    if ($cache) { 
     41        $output = $cache->get($cache_key); 
     42        if ($c->log->is_debug) { 
     43            if ($output) { 
     44                $c->log->debug("Catalyst::View::Jemplate cache HIT for $cache_key"); 
     45            } else { 
     46                $c->log->debug("Catalyst::View::Jemplate cache MISS for $cache_key"); 
     47            } 
     48        } 
     49    } 
     50 
     51    if (! $output) { 
     52        # We aren't cached, or we don't have a cache configured for us 
     53        my @files; 
     54 
     55        if ($data && $data->{files}) { 
     56            # The user can specify exactly which files we include in this 
     57            # particular dispatch 
     58            @files =  
     59                map { file($self->jemplate_dir, $_) } 
     60                ref($data->{files}) ? @{ $data->{files} } : ($data->{files}) 
     61            ; 
     62        } else { 
     63            # XXX - not a good idea, but leave it as final alternative 
     64            @files = File::Find::Rule->file 
     65                                     ->name( '*' . $self->jemplate_ext ) 
     66                                     ->in( $self->jemplate_dir ); 
     67        } 
     68 
     69        if ($c->log->is_debug) { 
     70            $c->log->debug("Creating Jemplate file from @files"); 
     71        } 
     72 
     73        # xxx error handling? 
     74        $output = Jemplate->compile_template_files(@files); 
     75        if ($cache) { 
     76            $cache->set($cache_key, $output); 
     77        } 
     78    } 
    4079 
    4180    my $encoding = $self->encoding || 'utf-8'; 
     
    4685    } 
    4786 
    48     $c->res->output($js); 
     87    $c->res->output($output || ''); 
    4988} 
    5089 
     
    74113      $c->forward('View::Jemplate'); 
    75114  } 
     115 
     116  # To specify which files you want to include 
     117  sub select : Global { 
     118      my($self, $c) = @_; 
     119      $c->stash->{jemplate} = { 
     120          files => [ 'foo.tt', 'bar.tt' ] 
     121      } 
     122  } 
     123 
     124  # To use caching 
     125  use Catalyst qw( 
     126      ... 
     127      Cache 
     128  ); 
     129 
     130  MyApp->config( 
     131      cache => { 
     132          backends => { 
     133              jemplate => { 
     134                  # Your cache backend of choice 
     135                  store => "FastMmap", 
     136              } 
     137          } 
     138      } 
     139  ); 
     140      
    76141 
    77142=head1 DESCRIPTION 
  • Catalyst-View-Jemplate/trunk/t/01_live.t

    r1778 r2111  
    55use lib "$FindBin::Bin/lib"; 
    66 
    7 use Test::More tests => 6
     7use Test::More tests => 12
    88use Catalyst::Test 'TestApp'; 
    99 
     
    3737    like $response->content, qr!//line 1 "bar\.tt"!; 
    3838} 
     39 
     40{ 
     41    my $request = HTTP::Request->new( GET => "http://localhost/selected" ); 
     42 
     43    ok( my $response = request($request), 'Request' ); 
     44    ok( $response->is_success, 'Response Successful 2xx' ); 
     45    is( $response->code, 200, 'Response Code' ); 
     46 
     47    is_deeply( [ $response->content_type ], [ 'text/javascript', 'charset=utf-8' ] ); 
     48 
     49    unlike $response->content, qr!//line 1 "foo\.tt"!; 
     50    like $response->content, qr!//line 1 "bar\.tt"!; 
     51} 
  • Catalyst-View-Jemplate/trunk/t/lib/TestApp.pm

    r1778 r2111  
    2727} 
    2828 
     29sub selected : Global { 
     30    my ( $self, $c ) = @_; 
     31 
     32    $c->stash->{jemplate} = { 
     33        files => 'bar.tt' 
     34    }; 
     35    $c->forward('View::Jemplate'); 
     36} 
     37 
    29381;