EPUB-Parser

 view release on metacpan or  search on metacpan

lib/EPUB/Parser/Util/Archive.pm  view on Meta::CPAN

package EPUB::Parser::Util::Archive;
use strict;
use warnings;
use Carp;
use Smart::Args;
use Archive::Zip qw( AZ_OK );

sub new {
    args(
        my $class => 'ClassName',
        my $data => { isa => 'Archive::Zip' },
    );

    bless { data => $data } => $class;
}

sub get_member_data {
    args(
        my $self      => 'Object',
        my $file_path => 'Str',
    );

    my $member = $self->{data}->memberNamed($file_path);
    croak "$file_path not found" unless ($member);

    my ( $member_data, $AZ_status ) = $member->contents();
    croak "$file_path: error Archive::Zip status = $AZ_status" if ($AZ_status != AZ_OK);

    return $member_data;

}

sub get_members {
    my $self = shift;
    my $args = shift || {};
    $args->{zip} = $self;

    EPUB::Parser::Util::Archive::Iterator->new($args);
}


package EPUB::Parser::Util::Archive::Iterator;
use strict;
use warnings;
use Carp;
use Smart::Args;
use Archive::Zip qw( AZ_OK );

sub new {
    args(
        my $class => 'ClassName',
        my $zip   => { isa => 'EPUB::Parser::Util::Archive'},
        my $files_path => 'ArrayRef[Str]',
    );

    bless {
        zip            => $zip,
        files_path     => $files_path,
        current_index  => -1,
        current_member => undef,
    } => $class;
    
}

sub size {
    my $self = shift;
    scalar @{$self->{files_path}};
}

sub current_file_path {
    my $self = shift;
    $self->{files_path}->[$self->{current_index}];
}

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.426 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )