NAME

Dancer::Plugin::Cache::CHI - Dancer plugin to cache response content (and anything else)

VERSION

version 1.2.0

SYNOPSIS

In your configuration:

plugins:
    'Cache::CHI':
        driver: Memory
        global: 1

In your application:

use Dancer ':syntax';
use Dancer::Plugin::Cache::CHI;

# caching pages' response

check_page_cache;

get '/cache_me' => sub {
    cache_page template 'foo';
};

# using the helper functions

get '/clear' => sub {
    cache_clear;
};

put '/stash' => sub {
    cache_set secret_stash => request->body;
};

get '/stash' => sub {
    return cache_get 'secret_stash';
};

del '/stash' => {
    return cache_remove 'secret_stash';
};

# using the cache directly

get '/something' => sub {
    my $thingy = cache->compute( 'thingy', sub { compute_thingy() } );

    return template 'foo' => { thingy => $thingy };
};

DESCRIPTION

This plugin provides Dancer with an interface to a CHI cache. Also, it includes a mechanism to easily cache the response of routes.

CONFIGURATION

Unrecognized configuration elements are passed directly to the CHI object's constructor. For example, the configuration given in the "SYNOPSIS" will create a cache object equivalent to

$cache = CHI->new( driver => 'Memory', global => 1, );

honor_no_cache

If the parameter 'honor_no_cache' is set to true, a request with the http header 'Cache-Control' or 'Pragma' set to 'no-cache' will ignore any content cached via 'cache_page' and will have the page regenerated anew.

KEYWORDS

cache

Returns the CHI cache object.

check_page_cache

If invoked, returns the cached response of a route, if available.

The path_info attribute of the request is used as the key for the route, so the same route requested with different parameters will yield the same cached content. Caveat emptor.

cache_page($content, $expiration)

Caches the $content to be served to subsequent requests. The headers and http status of the response are also cached.

The $expiration parameter is optional.

cache_page_key

Returns the cache key used by 'cache_page'. Defaults to to the request's path_info, but can be modified via cache_page_key_generator.

cache_page_key_generator( \&sub )

Sets the function that generates the cache key for cache_page.

For example, to have the key contains both information about the request's hostname and path_info (useful to deal with multi-machine applications):

cache_page_key_generator sub {
    return join ':", request()->host, request()->path_info;
};

cache_set, cache_get, cache_remove, cache_clear, cache_compute

Shortcut to the cache's object methods.

get '/cache/:attr/:value' => sub {
    # equivalent to cache->set( ... );
    cache_set $params->{attr} => $params->{value};
};

See the CHI documentation for further info on these methods.

HOOKS

before_create_cache

Called before the creation of the cache, which is lazily done upon its first use.

Useful, for example, to change the cache's configuration at run time:

use Sys::Hostname;

# set the namespace to the current hostname
hook before_create_cache => sub {
    config->{plugins}{'Cache::CHI'}{namespace} = hostname;
};

SEE ALSO

Dancer Web Framework - Dancer

CHI

Dancer::Plugin::Memcached - plugin that heavily inspired this one.

AUTHOR

Yanick Champoux <yanick@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Yanick Champoux.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.