File Coverage

blib/lib/Storage/Abstract/Driver/Subpath.pm
Criterion Covered Total %
statement 30 30 100.0
branch 1 2 50.0
condition n/a
subroutine 11 11 100.0
pod 6 7 85.7
total 48 50 96.0


line stmt bran cond sub pod time code
1             package Storage::Abstract::Driver::Subpath;
2             $Storage::Abstract::Driver::Subpath::VERSION = '0.008';
3 3     3   46 use v5.14;
  3         15  
4 3     3   18 use warnings;
  3         8  
  3         261  
5              
6 3     3   21 use Mooish::Base -standard;
  3         6  
  3         30  
7              
8             # need this in BEGIN block because we use constants from this package
9 3     3   49160 BEGIN { extends 'Storage::Abstract::Driver' }
10              
11             has param 'subpath' => (
12             isa => SimpleStr,
13             writer => -hidden,
14             );
15              
16             with 'Storage::Abstract::Role::Driver::Meta';
17              
18             sub BUILD
19             {
20             my ($self) = @_;
21              
22             $self->_set_subpath($self->SUPER::resolve_path($self->subpath));
23             }
24              
25             sub source_is_array
26             {
27 8     8 0 38 return !!0;
28             }
29              
30             sub resolve_path
31             {
32 8     8 1 47 my ($self, $name, %opts) = @_;
33 8         29 $name = $self->SUPER::resolve_path($name, %opts);
34              
35             # first resolve, then join path. If the order was reversed, leaving new
36             # root would be possible.
37 7         39 return $self->subpath . Storage::Abstract::Driver::DIRSEP_STR . $name;
38             }
39              
40             sub store_impl
41             {
42 1     1 1 3 my $self = shift;
43 1         17 return $self->source->store(@_);
44             }
45              
46             sub is_stored_impl
47             {
48 3     3 1 6 my $self = shift;
49 3         59 return $self->source->is_stored(@_);
50             }
51              
52             sub retrieve_impl
53             {
54 1     1 1 2 my $self = shift;
55 1         17 return $self->source->retrieve(@_);
56             }
57              
58             sub dispose_impl
59             {
60 1     1 1 2 my $self = shift;
61 1         16 return $self->source->dispose(@_);
62             }
63              
64             sub list_impl
65             {
66 1     1 1 2 my $self = shift;
67 1         22 my $list_aref = $self->source->list(@_);
68 1         4 my $subpath = quotemeta($self->subpath . Storage::Abstract::Driver::DIRSEP_STR);
69              
70 1         2 my @result;
71 1         2 foreach my $name (@{$list_aref}) {
  1         2  
72 3 50       24 next unless $name =~ s{^$subpath}{};
73 3         3217 push @result, $self->SUPER::resolve_path($name);
74             }
75              
76 1         12 return \@result;
77             }
78              
79             1;
80              
81             __END__