package File::Assets::Cache;
use strict;
use warnings;
use Object::Tiny qw/_content_registry/;
use File::Assets::Carp;
use File::Assets;
my %cache;
sub new {
my $class = shift;
local %_ = @_;
my $name = $_{name};
if (defined $name) {
if (ref $name eq "SCALAR") {
$name = $$name;
}
elsif ($name eq 1) {
$name = "__File::Assets::Cache_cache__";
}
return $cache{$name} if $cache{$name}
}
my $self = bless {}, $class;
$self->{_content_registry} = {};
$cache{$name} = $self if $name;
return $self;
}
sub assets {
my $self = shift;
return File::Assets->new(cache => $self, @_);
}
sub clear {
my $self = shift;
$self->{_content_registry} = {};
}
sub content {
my $self = shift;
my $file = shift;
croak "Wasn't given a file" unless $file;
my $content = $self->_content_registry->{$file} ||= File::Assets::Asset::Content->new($file);
$content->refresh;
return $content;
}
1;
__END__
sub exists {
my $self = shift;
my $base = shift;
my $key = shift;
return exists $self->_asset_registry($base)->{$key} ? 1 : 0;
}
sub store {
my $self = shift;
my $base = shift;
my $asset = shift;
return $self->_asset_registry($base)->{$asset->key} = $asset;
}
sub fetch {
my $self = shift;
my $base = shift;
my $key = shift;
if (my $asset = $self->_asset_registry($base)->{$key}) {
$asset->refresh;
return $asset;
}
return undef;
}
sub _asset_registry {
my $self = shift;
return $self->{_asset_registry} unless @_;
my $base = shift;
return $self->{_asset_registry}->{$base} ||= {};
}