| Cache-CacheFactory documentation | Contained in the Cache-CacheFactory distribution. |
Cache::CacheFactory::Object - the data stored in a Cache::CacheFactory cache.
Cache::CacheFactory::Object is a subclass extending Cache::Object to allow for per-policy meta-data needed by Cache::CacheFactory's policies.
You will not normally need to use this class for anything.
If you are already using Cache::Object then you'll find that Cache::CacheFactory::Object only extends behaviour, it doesn't alter existing behaviour.
use Cache::CacheFactory::Object; my $object = Cache::CacheFactory::Object( ); $object->set_key( $key ); $object->set_data( $data ); $object->set_expires_at( $expires_at ); $object->set_created_at( $created_at ); $object->set_policy_metadata( 'expiry', 'time', $metadata );
Construct a new Cache::CacheFactory::Object from a Cache::Object instance, this is done automatically by Cache::CacheFactory methods that provide backwards compat.
$param is an optional argument that contains additional parameters
to pass to $object->initialize().
Initializes the object, this is done seperately from the constructor to make it easier for people to subclass Cache::CacheFactory::Object should they need to.
Set the meta-data for the given $policytype and $policy to the value
provided in $metadata, usually a hashref.
See the documentation on Cache::CacheFactory for more information about policy types and policies.
Fetch the meta-data stored by $policytype and $policy.
See the documentation on Cache::CacheFactory for more information about policy types and policies.
All other behaviour is inherited from and documented by Cache::Object.
Original author: Sam Graham <libcache-cachefactory-perl BLAHBLAH illusori.co.uk>
Last author: $Author: illusori $
Copyright 2008-2010 Sam Graham.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Cache-CacheFactory documentation | Contained in the Cache-CacheFactory distribution. |
############################################################################### # Purpose : Extension of Cache::Object.pm to support policy meta-data. # Author : Sam Graham # Created : 24 Jun 2008 # CVS : $Id: Object.pm,v 1.7 2010-02-16 12:25:41 illusori Exp $ ############################################################################### package Cache::CacheFactory::Object; use warnings; use strict; use base qw/Cache::Object/; use Storable; $Cache::CacheFactory::Object::VERSION = '1.10'; sub new_from_old { my ( $class, $old_ob, $param ) = @_; my ( $ob ); $ob = $class->new(); $ob->initialize( $old_ob->get_key(), $old_ob->get_data(), { created_at => $old_ob->get_created_at(), accessed_at => $old_ob->get_accessed_at(), expires_at => $old_ob->get_expires_at(), no_deep_clone => $param->{ no_deep_clone }, } ); # TODO: this should probably be recalculated by the policies? $ob->set_size( $old_ob->get_size() ); } sub initialize { my ( $self, $key, $data, $param ) = @_; $self->set_key( $key ); # Produce a deep clone fo the data unless we don't need to # or we're asked not to. $data = Storable::dclone( $data ) if ref( $data ) and not $param->{ no_deep_clone }; # Set the data. $self->set_data( $data ); # TODO: weaken ref param handling here? # Overrule default properties if they've been supplied. foreach my $property ( qw/created_at accessed_at expires_at/ ) { if( exists( $param->{ $property } ) ) { my ( $method ); $method = "set_${property}"; $self->$method( $param->{ $property } ); delete $param->{ $property }; } } } sub set_policy_metadata { my ( $self, $policytype, $policy, $metadata ) = @_; $self->{ _Policy_Meta_Data } ||= {}; $self->{ _Policy_Meta_Data }->{ $policytype } ||= {}; $self->{ _Policy_Meta_Data }->{ $policytype }->{ $policy } = $metadata; } sub get_policy_metadata { my ( $self, $policytype, $policy ) = @_; return( $self->{ _Policy_Meta_Data }->{ $policytype }->{ $policy } ); } 1; __END__