File Coverage

blib/lib/Cache/CacheFactory/Expiry/Time.pm
Criterion Covered Total %
statement 46 51 90.2
branch 15 30 50.0
condition 2 6 33.3
subroutine 10 12 83.3
pod 6 6 100.0
total 79 105 75.2


line stmt bran cond sub pod time code
1             ###############################################################################
2             # Purpose : Cache Time Expiry Policy Class.
3             # Author : Sam Graham
4             # Created : 25 Jun 2008
5             # CVS : $Id: Time.pm,v 1.8 2010-02-16 12:25:41 illusori Exp $
6             ###############################################################################
7              
8             package Cache::CacheFactory::Expiry::Time;
9              
10 1     1   752 use warnings;
  1         1  
  1         31  
11 1     1   5 use strict;
  1         2  
  1         23  
12              
13 1     1   5 use Cache::Cache;
  1         2  
  1         30  
14 1     1   5 use Cache::BaseCache;
  1         2  
  1         30  
15              
16 1     1   630 use Cache::CacheFactory::Expiry::Base;
  1         2  
  1         33  
17              
18 1     1   7 use base qw/Cache::CacheFactory::Expiry::Base/;
  1         2  
  1         728  
19              
20             $Cache::CacheFactory::Expiry::Time::VERSION = '1.10';
21              
22             sub read_startup_options
23             {
24 2     2 1 5 my ( $self, $param ) = @_;
25              
26             $self->set_default_expires_in( $param->{ default_expires_in } )
27 2 50       7 if exists( $param->{ default_expires_in } );
28              
29             $self->{ default_prune_after } = $param->{ default_prune_after }
30 2 50       6 if exists( $param->{ default_prune_after } );
31             $self->{ default_valid_until } =
32             ( $param->{ default_valid_until } eq 'forever' ) ?
33             $Cache::Cache::EXPIRES_NEVER : $param->{ default_valid_until }
34 2 0       8 if exists( $param->{ default_valid_until } );
    50          
35             }
36              
37             sub set_default_expires_in
38             {
39 0     0 1 0 my ( $self, $default_expires_in ) = @_;
40              
41             # Compat with Cache::Cache.
42 0         0 $self->{ default_prune_after } = $default_expires_in;
43 0         0 $self->{ default_valid_until } = $default_expires_in;
44             }
45              
46             sub get_default_expires_in
47             {
48 0     0 1 0 my ( $self ) = @_;
49              
50 0   0     0 return( $self->{ default_prune_after } || $self->{ default_valid_until } );
51             }
52              
53             sub set_object_validity
54             {
55 2     2 1 3 my ( $self, $key, $object, $param ) = @_;
56 2         3 my ( $valid_until );
57              
58             # Failover in order:
59             # supplied valid_until param
60             # supplied expires_in param
61             # default valid_until param (includes default expires_in)
62             # EXPIRES_NEVER as last resort.
63             $valid_until = $self->{ default_valid_until }
64 2 50       6 if exists( $self->{ default_valid_until } );
65             $valid_until = $param->{ expires_in }
66 2 50       6 if exists( $param->{ expires_in } );
67             $valid_until =
68             ( $param->{ valid_until } eq 'forever' ) ?
69             $Cache::Cache::EXPIRES_NEVER : $param->{ valid_until }
70 2 50       9 if exists( $param->{ valid_until } );
    50          
71              
72 2         13 $valid_until = Cache::BaseCache::Build_Expires_At(
73             $object->get_created_at(),
74             $Cache::Cache::EXPIRES_NEVER,
75             $valid_until );
76              
77 2         92 $object->set_policy_metadata( 'validity', 'time',
78             { valid_until => $valid_until, } );
79             }
80              
81             sub set_object_pruning
82             {
83 2     2 1 4 my ( $self, $key, $object, $param ) = @_;
84 2         3 my ( $prune_after );
85              
86             # Failover in order:
87             # supplied prune_after param
88             # supplied expires_in param
89             # default prune_after param (includes default expires_in)
90             # EXPIRES_NEVER as last resort.
91             $prune_after = $self->{ default_prune_after }
92 2 50       5 if exists( $self->{ default_prune_after } );
93             $prune_after = $param->{ expires_in }
94 2 50       5 if exists( $param->{ expires_in } );
95             $prune_after = $param->{ prune_after }
96 2 50       7 if exists( $param->{ prune_after } );
97              
98 2         6 $prune_after = Cache::BaseCache::Build_Expires_At(
99             $object->get_created_at(),
100             $Cache::Cache::EXPIRES_NEVER,
101             $prune_after );
102              
103 2         70 $object->set_policy_metadata( 'pruning', 'time',
104             { prune_after => $prune_after, } );
105             }
106              
107             sub should_keep
108             {
109 11     11 1 23 my ( $self, $cache, $storage, $policytype, $object ) = @_;
110 11         14 my ( $metadata, $expires, $when );
111              
112 11         44 $metadata = $object->get_policy_metadata( $policytype, 'time' );
113 11   66     46 $expires = $metadata->{ valid_until } || $metadata->{ prune_after };
114 11         14 $when = time();
115              
116 11 50       24 return( 1 ) unless defined( $expires );
117 11 50       34 return( 0 ) if $expires eq $Cache::Cache::EXPIRES_NOW;
118 11 50       29 return( 1 ) if $expires eq $Cache::Cache::EXPIRES_NEVER;
119 11 100       49 return( 0 ) if $when >= $expires;
120 8         54 return( 1 );
121             }
122              
123             1;
124              
125             =pod
126              
127             =head1 NAME
128              
129             Cache::CacheFactory::Expiry::Time - Time-based expiry policy for Cache::CacheFactory.
130              
131             =head1 DESCRIPTION
132              
133             L
134             is a time-based expiry (pruning and validity) policy for
135             L.
136              
137             It provides similar functionality and backwards-compatibility with
138             the C<$expires_in> and C<$default_expires_in> properties of
139             L.
140              
141             =head1 INTERVAL SPECIFICATIONS
142              
143             You can use any of the syntaxes provided by L to
144             specify an interval for expiry times, for example:
145              
146             $Cache::Cache::EXPIRES_NEVER
147             $Cache::Cache::EXPIRES_NOW
148             '4 seconds'
149             '1 m'
150             'now'
151             'never'
152              
153             For a full list take a look at the C section of the
154             L documentation.
155              
156             =head1 STARTUP OPTIONS
157              
158             The following startup options may be supplied to
159             L,
160             see the L documentation for
161             how to pass options to a policy.
162              
163             =over
164              
165             =item default_prune_after => $interval
166              
167             For a pruning policy this sets the default interval after which an
168             item becomes eligible to be pruned.
169              
170             =item default_valid_until => $interval
171              
172             For a validity policy this sets the default time interval after
173             which an item should be considered invalid.
174              
175             =item default_expires_in => $interval
176              
177             This option provides backwards-compatibility with L,
178             it sets C for pruning policies and
179             C for validity policies.
180              
181             =back
182              
183             =head1 STORE OPTIONS
184              
185             The following options may be set when storing a key, see the
186             L documentation for
187             details on how to do this.
188              
189             =over
190              
191             =item prune_after => $interval
192              
193             For a pruning policy this sets the interval after which the
194             item becomes eligible to be pruned. If not supplied then
195             the value of C in the startup options
196             will be used.
197              
198             =item valid_until => $interval
199              
200             For a validity policy this sets the time interval after
201             which the item should be considered invalid. If not supplied then
202             the value of C in the startup options
203             will be used.
204              
205             =item expires_in => $interval
206              
207             This option provides backwards-compatibility with L,
208             it behaves as C for pruning policies and C
209             for validity policies.
210              
211             =back
212              
213             =head1 METHODS
214              
215             You should generally call these via the L interface
216             rather than directly.
217              
218             =over
219              
220             =item $policy->set_default_expires_in( $default_expires_in );
221              
222             =item $default_expires_in = $policy->get_default_expires_in();
223              
224             Set or get the C option.
225              
226             =back
227              
228             =head1 SEE ALSO
229              
230             L, L, L,
231             L
232              
233             =head1 AUTHORS
234              
235             Original author: Sam Graham
236              
237             Last author: $Author: illusori $
238              
239             =head1 COPYRIGHT
240              
241             Copyright 2008-2010 Sam Graham.
242              
243             This library is free software; you can redistribute it and/or
244             modify it under the same terms as Perl itself.
245              
246             =cut