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 )