Hopkins

 view release on metacpan or  search on metacpan

lib/Hopkins/Store.pm  view on Meta::CPAN

package Hopkins::Store;

use strict;
use warnings;

=head1 NAME

Hopkins::Store - interface to backend storage

=head1 DESCRIPTION

Hopkins::Store encapsulates all of the busywork associated
with the DBIx::Class schema creation.

=cut

use POE;
use POE::Filter::Reference;
use POE::Wheel::Run;
use Class::Accessor::Fast;

use Cache::FileCache;
use Data::UUID;
use Tie::IxHash;

use Hopkins::Store::Backend;

use base 'Class::Accessor::Fast';

__PACKAGE__->mk_accessors(qw(config cache events backend tries subscribers));

use constant HOPKINS_STORE_EVENT_PROC_INTERVAL => 10;

my $ug = new Data::UUID;

=head1 METHODS

=over 4

=item init

=cut

sub new
{
	my $self = shift->SUPER::new(@_);

	return undef if not $self->config->loaded;

	$self->events(new Tie::IxHash);
	$self->subscribers({});

	$self->cache(new Cache::FileCache {
		cache_root		=> $self->config->fetch('state/root')->stringify,
		namespace		=> 'store',
		directory_umask	=> 0077
	});

	if (my $events = $self->cache->get('events')) {
		last if not ref $events eq 'ARRAY';

		foreach my $href (@$events) {
			next if not ref $href eq 'HASH';
			next if not defined $href->{id};
			next if not defined $href->{contents};

			$self->events->Push($href->{id} => $href->{contents});
		}
	}

	POE::Session->create
	(



( run in 1.762 second using v1.01-cache-2.11-cpan-5837b0d9d2c )