File Coverage

blib/lib/Net/FTP/Path/Iter.pm
Criterion Covered Total %
statement 52 55 94.5
branch 6 12 50.0
condition n/a
subroutine 14 16 87.5
pod 1 1 100.0
total 73 84 86.9


line stmt bran cond sub pod time code
1             package Net::FTP::Path::Iter;
2              
3             # ABSTRACT: Iterative, recursive, FTP file finder
4              
5 2     2   382692 use 5.010;
  2         9  
6              
7 2     2   17 use strict;
  2         4  
  2         81  
8 2     2   11 use warnings;
  2         4  
  2         144  
9 2     2   9 use Carp;
  2         3  
  2         181  
10              
11             our $VERSION = '0.07';
12              
13 2     2   1395 use Net::FTP;
  2         284559  
  2         159  
14 2     2   1054 use File::Spec::Functions qw[ splitpath ];
  2         1646  
  2         174  
15              
16 2     2   15 use parent 'Path::Iterator::Rule';
  2         3  
  2         23  
17              
18 2     2   32328 use Net::FTP::Path::Iter::Dir;
  2         10  
  2         99  
19              
20 2     2   13 use namespace::clean;
  2         3  
  2         9  
21              
22              
23              
24              
25              
26              
27              
28              
29              
30              
31              
32              
33              
34              
35              
36              
37              
38              
39              
40              
41              
42              
43              
44              
45             sub new {
46              
47 1     1 1 405303 my $class = shift;
48              
49 1         2 my %attr;
50 1 50       6 if ( @_ % 2 ) {
51 1         3 my $host = shift;
52 1         5 %attr = @_;
53 1         4 $attr{Host} = $host;
54             }
55             else {
56 0         0 %attr = @_;
57             }
58              
59 1         17 my $self = $class->SUPER::new();
60              
61             defined( my $host = delete $attr{Host} )
62 1 50       15 or croak( "missing Host attribute\n" );
63              
64             defined( my $user = delete $attr{user} )
65 1 50       6 or croak( "missing user attribute\n" );
66              
67             defined( my $password = delete $attr{password} )
68 1 50       5 or croak( "missing password attribute\n" );
69              
70 1 50       7 $self->{server} = Net::FTP->new( $host, %attr )
71             or croak( "unable to connect to server $host\n" );
72              
73 1 50       66 $self->{server}->login( $user, $password )
74             or croak( "unable to log in to $host\n" );
75              
76 1         108 return $self;
77             }
78              
79             sub _defaults {
80             return (
81             _stringify => 0,
82             follow_symlinks => 1,
83             depthfirst => 0,
84             sorted => 1,
85             loop_safe => 1,
86 0     0   0 error_handler => sub { die sprintf( '%s: %s', @_ ) },
87 1     1   963 visitor => undef,
88             );
89             }
90              
91             sub _fast_defaults {
92              
93             return (
94 0     0   0 _stringify => 0,
95             follow_symlinks => 1,
96             depthfirst => -1,
97             sorted => 0,
98             loop_safe => 0,
99             error_handler => undef,
100             visitor => undef,
101             );
102             }
103              
104             sub _objectify {
105              
106 1     1   53 my ( $self, $path ) = @_;
107              
108 1         6 my ( undef, $directories, $name ) = splitpath( $path );
109              
110 1         21 $directories =~ s{(.+)/$}{$1};
111              
112 1         6 my %attr = (
113             parent => $directories,
114             name => $name,
115             path => $path,
116             );
117              
118 1         27 return Net::FTP::Path::Iter::Dir->new( server => $self->{server}, %attr );
119             }
120              
121             sub _children {
122              
123 5     5   194 my ( undef, $path ) = @_;
124              
125 5         26 return map { [ $_->{name}, $_ ] } $path->_children;
  13         106  
126             }
127              
128             sub _iter {
129              
130 1     1   3 my $self = shift;
131 1         2 my $defaults = shift;
132              
133 1         2 $defaults->{loop_safe} = 0;
134              
135 1         8 $self->SUPER::_iter( $defaults, @_ );
136              
137             }
138              
139             1;
140              
141             #
142             # This file is part of Net-FTP-Path-Iter
143             #
144             # This software is Copyright (c) 2017 by Smithsonian Astrophysical Observatory.
145             #
146             # This is free software, licensed under:
147             #
148             # The GNU General Public License, Version 3, June 2007
149             #
150              
151             __END__