From 0529a6d1f30c01a77ece89aec9375bd896903082 Mon Sep 17 00:00:00 2001 From: Frank Brehm Date: Tue, 6 Apr 2010 22:34:49 +0000 Subject: [PATCH] FTP-Rolle ausgebaut git-svn-id: http://svn.brehm-online.com/svn/my-stuff/Perl@50 ec8d2aa5-1599-4edb-8739-2b3a1bc399aa --- lib/FrBr/Common/MooseX/FtpClient.pm | 227 ++++++++++++++++++++++++++++ lib/FrBr/Common/MooseX/Log.pm | 4 + 2 files changed, 231 insertions(+) diff --git a/lib/FrBr/Common/MooseX/FtpClient.pm b/lib/FrBr/Common/MooseX/FtpClient.pm index de62d60..d473294 100644 --- a/lib/FrBr/Common/MooseX/FtpClient.pm +++ b/lib/FrBr/Common/MooseX/FtpClient.pm @@ -17,7 +17,11 @@ Rollen-Modul zum Einbinden eines FTP-Clients use Moose::Role; +#use MooseX::Getopt::Meta::Attribute; +#use MooseX::Getopt::Meta::Attribute::NoGetopt; +use Moose::Util::TypeConstraints; use Encode qw( decode_utf8 encode_utf8 ); +use Net::FTP; use utf8; @@ -38,12 +42,235 @@ use version; our $VERSION = qv("0.1"); $VERSION .= " r" . $Revis; ############################################################################ +=head1 TYPES + +Alle nur von dieser Rolle verwendeten Datentypen + +=over4 + +=item I + +=cut + +subtype 'Net::FTP' + => as 'Object' + => where { $_->isa('Net::FTP') } + => message { "Das übergebene Objekt muss vom Typ 'Net::FTP' sein" }; + +=back + =head1 ATTRIBUTES Alle durch diese Rolle definierten Attribute +=head2 ftp + +Das Net::FTP-Objekt als eigentlicher FTP-Client. + =cut +has 'ftp' => ( + is => 'ro', + isa => 'Net::FTP', + traits => [ 'NoGetopt' ], + lazy => 0, + clearer => '_clear_ftp', + predicate => 'has_ftp', + writer => '_set_ftp', + documentation => 'Das Net::FTP-Objekt als eigentlicher FTP-Client.', +); + +#-------------------- + +sub _set_ftp { + return $_[0]; +} + +#--------------------------------------------------------------------------- + +=head2 ftp_connected + +Flag, ob der FTP-Client gerade mit dem Server verbunden ist. + +=cut + +has 'ftp_connected' => ( + is => 'ro', + isa => 'Bool', + lazy => 1, + traits => [ 'NoGetopt' ], + builder => '_build_ftp_connected', + writer => '_set_ftp_connected', + documentation => 'BOOL: Flag, ob der FTP-Client gerade mit dem Server verbunden ist.', +); + +#-------------------- + +sub _build_ftp_connected { + return 0; +} + +sub _set_ftp_connected { + return $_[0]; +} + +#--------------------------------------------------------------------------- + +=head2 ftp_host + +Der Hostname oder die IP-Adresse des FTP-Servers + +=cut + +has 'ftp_host' => ( + is => 'rw', + isa => 'Str', + traits => [ 'Getopt' ], + lazy => 1, + required => 1, + builder => '_build_ftp_host', + documentation => 'String: der Hostname oder die IP-Adresse des FTP-Servers', + cmd_flag => 'ftp-host', + cmd_aliases => [ 'H', 'host' ], +); + +#-------------------- + +sub _build_ftp_host { + return 'localhost'; +} + +#--------------------------------------------------------------------------- + +=head2 ftp_blocksize + +Die Blockgröße in Bytes, die Net::FTP für den Datentransfer verwendet. + +=cut + +has 'ftp_blocksize' => ( + is => 'rw', + isa => 'Int', + traits => [ 'Getopt' ], + lazy => 1, + required => 1, + builder => '_build_ftp_blocksize', + documentation => 'Int: die Blockgröße in Bytes, die Net::FTP für den Datentransfer verwendet (default: 10240).', + cmd_flag => 'ftp-blocksize', + cmd_aliases => [ 'blocksize' ], +); + +#-------------------- + +sub _build_ftp_blocksize { + return 10_240; +} + +#--------------------------------------------------------------------------- + +=head2 ftp_port + +Die Portadresse des FTP-Servers. + +=cut + +has 'ftp_port' => ( + is => 'rw', + isa => 'Int', + traits => [ 'Getopt' ], + lazy => 1, + required => 1, + builder => '_build_ftp_port', + documentation => 'Int: die Portadresse des FTP-Servers (default: 21).', + cmd_flag => 'ftp-port', + cmd_aliases => [ 'port', 'P' ], +); + +#-------------------- + +sub _build_ftp_port { + return 21; +} + +#--------------------------------------------------------------------------- + +=head2 ftp_timeout + +Der Timeout in Sekunden für FTP-Prozesse (default: 120) + +=cut + +has 'ftp_timeout' => ( + is => 'rw', + isa => 'Int', + traits => [ 'Getopt' ], + lazy => 1, + required => 1, + builder => '_build_ftp_timeout', + documentation => 'Int: der Timeout in Sekunden für FTP-Prozesse (default: 120).', + cmd_flag => 'ftp-timeout', + cmd_aliases => [ 'timeout', 'T' ], +); + +#-------------------- + +sub _build_ftp_timeout { + return 120; +} + +#--------------------------------------------------------------------------- + +=head2 ftp_passive + +Flag, dass der FTP-Client eine passive FTP-Verbindung zum Server aufbauen soll. + +=cut + +has 'ftp_passive' => ( + is => 'rw', + isa => 'Bool', + lazy => 1, + required => 1, + traits => [ 'Getopt' ], + builder => '_build_ftp_passive', + documentation => 'BOOL: Flag, dass der FTP-Client eine passive FTP-Verbindung zum Server aufbauen soll.', + cmd_flag => 'ftp-passive', + cmd_aliases => [ 'passive' ], +); + +#-------------------- + +sub _build_ftp_passive { + return 0; +} + +#--------------------------------------------------------------------------- + +=head2 ftp_hash_size + +Alle wieviele Bytes soll während der Übertragung ein Hash-Zeichen (#) auf STDERR geschrieben werden, +wenn $self->ftp_show_hashes auf TRUE gesetzt ist (default: 1024). + +=cut + +has 'ftp_hash_size' => ( + is => 'rw', + isa => 'Int', + traits => [ 'Getopt' ], + lazy => 1, + required => 1, + builder => '_build_ftp_hash_size', + documentation => 'Int: alle wieviele Bytes soll während der Übertragung ein Hash-Zeichen (#) auf STDERR geschrieben werden (default: 1024).', + cmd_flag => 'ftp-hash-size', + cmd_aliases => [ 'hash-size' ], +); + +#-------------------- + +sub _build_ftp_hash_size { + return 1024; +} + #--------------------------------------------------------------------------- no Moose::Role; diff --git a/lib/FrBr/Common/MooseX/Log.pm b/lib/FrBr/Common/MooseX/Log.pm index eb9d003..3bf0d33 100644 --- a/lib/FrBr/Common/MooseX/Log.pm +++ b/lib/FrBr/Common/MooseX/Log.pm @@ -78,6 +78,10 @@ sub _build_watch_delay_log_conf { return 60; } +#has '+logger' => ( +# traits => [ 'NoGetopt' ], +#); + #--------------------------------------------------------------------------- =head1 METHODS -- 2.39.5