Plack-Middleware-Cached

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

# Change file for Plack::Middleware::Cached

0.15 2014-01-02
    - fixed test (thanks to Piotr Roszatycki)

0.14 2013-12-28
    - support streaming API (thanks to Piotr Roszatycki)

0.13 2012-09-04

0.12 2011-07-18

0.11 2011-06-28
    - First public version at CPAN

MANIFEST  view on Meta::CPAN

MANIFEST
META.yml
Makefile.PL
README
cpanfile
lib/Plack/Middleware/Cached.pm
t/00_compile.t
t/10_cache.t
t/20_alien.t
t/30_debug_mode.t
t/40_streaming.t
t/author-critic.t
t/mock-cache

lib/Plack/Middleware/Cached.pm  view on Meta::CPAN

                $env->{$key} = $value;
            }
        }
        $env->{'plack.middleware.cached'} = 1;
        return $response;
    }

    # pass through and cache afterwards
    my $response = $self->app_code->($env);

    # streaming response 
    if (ref $response eq 'CODE') {
        $response = $self->response_cb($response, sub {
            my ($ret) = @_;
            my $seen;
            my $body = '';
            return sub {
                my ($chunk) = @_;
                if ($seen++ and not defined $chunk) {
                    my $new_response = [ $ret->[0], $ret->[1], [ $body ] ];
                    $self->cache_response($key, $new_response, $env);

lib/Plack/Middleware/Cached.pm  view on Meta::CPAN

                if ($env->{'plack.middleware.cached') {
                    ...
                }
                return $res;
            };
        };
        enable 'Cached', cache => $cache;
        $app;
    },

Caching delayed/streaming responses is supported as well.

=head1 CONFIGURATION

=over 4

=item cache

An cache object, which supports the methods C<< get( $key ) >> to retrieve
an object from cache and C<< set( $key, $object [, @options ] ) >> to store
an object in cache, possibly adjusted by some options. See L<CHI> for a class

t/40_streaming.t  view on Meta::CPAN


test_psgi $capp->($app_delayed->($app_static)), sub {
    my $cb = shift;

    my $res = $cb->(GET "/b");
    is $res->code, 200;
    is $res->content, 2;
} foreach (1..2);


my $app_streaming = sub {
    return sub {
        my ($responder) = @_;
        my $writer = $responder->(
            [ 200, [ 'Content-Type' => 'text/plain' ] ]
        );
        $writer->write($counter);
        $writer->write($counter);
        $writer->close;
        return;
    };
};

test_psgi $capp->($app_streaming), sub {
    my $cb = shift;

    my $res = $cb->(GET "/c");
    is $res->code, 200;
    is $res->content, 33;
} foreach (1..2);


done_testing;



( run in 0.259 second using v1.01-cache-2.11-cpan-4d50c553e7e )