Catalyst-Controller-SimpleCAS
view release on metacpan or search on metacpan
lib/Catalyst/Controller/SimpleCAS/Store/DBIC.pm view on Meta::CPAN
package Catalyst::Controller::SimpleCAS::Store::DBIC;
use warnings;
use Moose;
with qw(
Catalyst::Controller::SimpleCAS::Store
);
use File::MimeInfo::Magic;
use Image::Size;
use Digest::SHA1;
use IO::File;
use Data::Dumper;
use MIME::Base64;
use Try::Tiny;
use Path::Class qw( file dir );
use IO::All;
use bytes;
has 'model' => ( is => 'ro', isa => 'Str', required => 1 );
has 'tempdir' => ( is => 'ro', isa => 'Str', lazy => 1, default => sub {
my $self = shift;
return dir( Catalyst::Utils::class2tempdir($self->resultset->result_class), 'simplecas' )->stringify;
});
sub resultset {
my ( $self ) = @_;
$self->simplecas->_app->model($self->model);
}
sub get_result_by_checksum {
my ( $self, $checksum ) = @_;
return $self->resultset->find({
checksum => $checksum,
});
}
sub add_content {
my ( $self, $data ) = @_;
my $checksum = $self->calculate_checksum($data);
return $checksum if ($self->content_exists($checksum));
my $size = length($data);
my $result = $self->resultset->create({
content => $data,
checksum => $self->calculate_checksum($data),
size => $size,
});
die "Unable to store data of $size bytes in Storage" unless $result;
return $result->checksum;
}
sub checksum_to_path {
my ( $self, $checksum ) = @_;
my @parts = unpack("(A5)*", $checksum);
my $filename = pop @parts;
my $dir = join("/",$self->tempdir,@parts);
my $fullname = join("/",$dir,$filename);
return $fullname if io($fullname)->exists;
io($dir)->mkpath;
my $entry = $self->get_result_by_checksum($checksum);
io($fullname)->print($entry->content);
return $fullname;
}
sub fetch_content {
my ( $self, $checksum ) = @_;
my $entry = $self->get_result_by_checksum($checksum);
return "" unless $entry;
return $entry->content;
}
sub content_exists {
my ( $self, $checksum ) = @_;
( run in 1.246 second using v1.01-cache-2.11-cpan-39bf76dae61 )