Cache::CacheFactory::Object - the data stored in a Cache::CacheFactory cache.


Cache-CacheFactory documentation Contained in the Cache-CacheFactory distribution.

Index


Code Index:

NAME

Top

Cache::CacheFactory::Object - the data stored in a Cache::CacheFactory cache.

DESCRIPTION

Top

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.

SYNOPSIS

Top

 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 );




METHODS

Top

$object = Cache::CacheFactory::Object->new_from_old( $cache_object, [ $param ] );

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().

$object->initialize( $key, $data, $param );

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.

$object->set_policy_metadata( $policytype, $policy, $metadata );

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.

$metadata = $object->get_policy_metadata( $policytype, $policy );

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.

SEE ALSO

Top

Cache::CacheFactory, Cache::Object

AUTHORS

Top

Original author: Sam Graham <libcache-cachefactory-perl BLAHBLAH illusori.co.uk>

Last author: $Author: illusori $

COPYRIGHT

Top


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__