1021f2e7be1261a823aea753530dc39c1257f243
[catagits/Catalyst-Plugin-Cache.git] / lib / Catalyst / Plugin / Cache / Curried.pm
1 #!/usr/bin/perl
2
3 package Catalyst::Plugin::Cache::Curried;
4
5 use strict;
6 use warnings;
7
8 use base qw/Class::Accessor::Fast/;
9
10 use Scalar::Util ();
11
12 __PACKAGE__->mk_accessors(qw/c meta/);
13
14 sub new {
15     my ( $class, $c, @meta ) = @_;
16
17     my $self = $class->SUPER::new({
18         c    => $c,
19         meta => \@meta,
20     });
21
22     Scalar::Util::weaken( $self->{c} );
23
24     return $self;
25 }
26
27 sub backend {
28     my ( $self, @meta ) = @_;
29     $self->c->choose_cache_backend( @{ $self->meta }, @meta )
30 }
31
32 sub set {
33     my ( $self, $key, $value, @meta ) = @_;
34     @meta = ( expires => $meta[0] ) if @meta == 1;
35     $self->c->cache_set( $key, $value, @{ $self->meta }, @meta );
36 }
37
38 sub get {
39     my ( $self, $key, @meta ) = @_;
40     $self->c->cache_get( $key, @{ $self->meta } );
41 }
42
43 sub remove {
44     my ( $self, $key, @meta ) = @_;
45     $self->c->cache_remove( $key, @{ $self->meta } );
46 }
47
48 __PACKAGE__;
49
50 __END__
51
52 =pod
53
54 =head1 NAME
55
56 Catalyst::Plugin::Cache::Curried - Curried versions of C<cache_set>,
57 C<cache_get> and C<cache_remove> that look more like a backend.
58
59 =head1 SYNOPSIS
60
61     my $curried = $c->cache( %meta );
62
63     $curried->get( $key, $value ); # no need to specify %meta
64
65 =head1 DESCRIPTION
66
67 See L<Catalyst::Plugin::Cache/META DATA> for details.
68
69 =head1 METHODS
70
71 =over 4
72
73 =item new %meta
74
75 Create a new curried cache, that captures C<%meta>.
76
77 =item backend %additional_meta
78
79 This calls C<choose_cache_backend> on the $c object with the captured meta and
80 the additional meta.
81
82 =item set $key, $value, %additional_meta
83
84 =item get $key, %additional_meta
85
86 =item remove $key, %additional_meta
87
88 Dellegate to the C<c> object's C<cache_set>, C<cache_get> or C<cache_remove>
89 with the arguments, then the captured meta from C<meta>, and then the
90 additional meta.
91
92 =item meta
93
94 Returns the array ref that captured %meta from C<new>.
95
96 =item c
97
98 The captured $c object to delegate to.
99
100 =back
101
102 =cut
103
104