File Coverage

blib/lib/WWW/ConfixxBackup/FTP.pm
Criterion Covered Total %
statement 46 74 62.1
branch 11 36 30.5
condition 0 5 0.0
subroutine 12 15 80.0
pod 10 10 100.0
total 79 140 56.4


line stmt bran cond sub pod time code
1             package WWW::ConfixxBackup::FTP;
2              
3 3     3   66662 use strict;
  3         6  
  3         100  
4 3     3   13 use warnings;
  3         7  
  3         71  
5 3     3   3412 use Net::FTP;
  3         242968  
  3         2545  
6              
7             our $VERSION = '0.04';
8              
9             sub new{
10 2     2 1 1468 my ($class,%args) = @_;
11 2         5 my $self = {};
12 2         5 bless $self,$class;
13            
14 2     0   17 $self->debug( sub{ print join "\n", @_ } );
  0         0  
15 2         6 $self->DEBUG(0);
16            
17 2         11 $self->password($args{password});
18 2         14 $self->user($args{user});
19 2         12 $self->server($args{server});
20 2         9 $self->prefix( '' );
21            
22 2         7 return $self;
23             }# new
24              
25             sub prefix{
26 2     2 1 4 my ($self,$prefix) = @_;
27            
28 2 50       11 $self->{__prefix} = $prefix if scalar @_ > 1;
29 2         4 return $self->{__prefix};
30             }
31              
32             sub login{
33 0     0 1 0 my ($self) = @_;
34 0 0       0 if( ref($self->ftp) eq 'Net::FTP' ){
35 0         0 my $res = $self->ftp->login($self->user,$self->password);
36            
37 0 0       0 if( $self->DEBUG ){
38 0 0       0 my $msg = $res ? 'FTP server: logged in' :
39             'Error: FTP server: cannot login .. ' . $self->ftp->message;
40 0         0 $self->debug->( $msg );
41             }
42            
43 0 0       0 return 0 unless $res;
44             }
45             else{
46 0         0 return 0;
47             }
48 0         0 return 1;
49             }# login
50              
51             sub download{
52 0     0 1 0 my ($self,$path) = @_;
53 0   0     0 $path ||= '.';
54 0         0 my $error = "";
55 0 0       0 eval{
56 0         0 $self->ftp->cwd('/backup');
57 0         0 for my $file ( qw/mysql.tar.gz files.tar.gz html.tar.gz/ ){
58 0         0 $self->ftp->binary;
59 0         0 my $res = $self->ftp->get( $file, $path . '/' . $self->prefix . $file );
60 0 0       0 if( $self->DEBUG ){
61 0 0       0 my $msg = $res ? "Downloaded $file" : "Error: Cannot download $file : " . $self->ftp->message;
62 0         0 $self->debug->( $msg );
63             }
64             }
65 0         0 1;
66             } or $error = $@;
67            
68 0 0 0     0 if( $error and $self->DEBUG ){
69 0 0       0 if( $error =~ /Can't call method/ ){
70 0         0 $error = "Can't connect to FTP server";
71             }
72 0         0 $self->debug->( "Error: cannot download files: $error" );
73             }
74            
75 0 0       0 return if($error);
76 0         0 return 1;
77             }# download
78              
79             sub password{
80 6     6 1 15 my ($self,$pwd) = @_;
81 6 100       22 $self->{password} = $pwd if(defined $pwd);
82 6         18 return $self->{password};
83             }# password
84              
85             sub user{
86 6     6 1 767 my ($self,$user) = @_;
87 6 100       19 $self->{user} = $user if(defined $user);
88 6         15 return $self->{user};
89             }# user
90              
91             sub server{
92 9     9 1 21 my ($self,$server) = @_;
93 9 100       24 $self->{server} = $server if(defined $server);
94 9         46 return $self->{server};
95             }# server
96              
97             sub ftp{
98 3     3 1 7 my ($self) = @_;
99 3 50       15 unless(ref($self->{ftp}) eq 'Net::FTP'){
100 3         8 $self->{ftp} = Net::FTP->new(
101             $self->server,
102             Passive => 1,
103             #Debug => 1,
104             );
105             }
106 3         103204 return $self->{ftp};
107             }# mech
108              
109             sub debug{
110 2     2 1 6 my ($self,$coderef) = @_;
111            
112 2 50       8 if( @_ == 2 ){
113 2         8 $self->DEBUG(1);
114 2         5 $self->{__debug} = $coderef;
115             }
116              
117 2         4 return $self->{__debug};
118             }
119              
120             sub DEBUG{
121 4     4 1 8 my ($self,$bool) = @_;
122            
123 4 50       12 if( @_ == 2 ){
124 4         13 $self->{__DEBUG} = $bool;
125             }
126              
127 4         8 return $self->{__DEBUG};
128             }
129              
130             sub DESTROY{
131 2     2   2325 my ($self) = @_;
132 2 50       12 $self->ftp->quit if( ref($self->ftp) eq 'Net::FTP' );
133             }
134              
135             1;
136              
137             __END__