AnyData2

 view release on metacpan or  search on metacpan

lib/AnyData2/Storage/File.pm  view on Meta::CPAN

package AnyData2::Storage::File;

use 5.008001;
use strict;
use warnings FATAL => 'all';

use base qw(AnyData2::Storage);

use Carp qw/croak/;
use Fcntl qw(:seek);
use IO::File ();
use Module::Runtime qw(require_module);

=head1 NAME

AnyData2::Storage::File - AnyData2 file storage

=cut

our $VERSION = '0.002';

=head1 DESCRIPTION

Base class for L<AnyData2::Storage::File::Linewise> and L<AnyData2::Storage::File::Blockwise> to handle common stuff

=head1 METHODS

=head2 new

  my $as2 = AnyData2::Storage::File->new(
    filename => "data.ext",
    filemode => "r",
    fileperms => 0644
  );

  my $as2 = AnyData2::Storage::File->new(
    filename => "data.ext",
    filemode => "<:raw"
  );

constructs a storage.

=cut

sub new
{
    my ( $class, %options ) = @_;
    my $self = $class->SUPER::new();
    defined $options{filemode} or $options{filemode} = "r";
    my @openparms = qw(filename filemode);
    unless ( $options{filemode} =~ m/^[<>]/ )
    {
        defined $options{fileperms} or $options{fileperms} = 0644;
        push @openparms, qw(fileperms);
    }
    $self->{fh} = IO::File->new( @options{@openparms} ) or die "Can't open $options{filename}: $!";
    @$self{qw(filename filemode fileperms)} = @options{qw(filename filemode fileperms)};
    $self;
}

=head2 seek

  $stor->seek(pos, whence)

Moves the storage pointer to given position. See L<IO::Seekable> for details.

=cut

sub seek
{
    my ( $self, $pos, $whence ) = @_;
    $self->{fh}->seek( $pos, $whence ) or croak "Can't seek to $pos from $whence for $self->{filename}: $!";
    "0E0";
}

=head2 truncate

  $stor->truncate

Truncates the underlying storage backend at it's current position.

=cut

sub truncate
{
    my $self = shift;
    $self->{fh}->truncate( $self->{fh}->tell() ) or die "Can't truncate $self->{filename}: $!";
}

=head2 drop

  $stor->drop

Drops the underlying storage (e.g. delete file)

=cut

sub drop
{
    my $self = shift;
    $self->{fh} and $self->{fh}->close;
    unlink $self->{filename};
}

=head2 meta

Experimental



( run in 0.622 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )