diff options
Diffstat (limited to 'lib/GnuPG/Handles.pm')
-rw-r--r-- | lib/GnuPG/Handles.pm | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/lib/GnuPG/Handles.pm b/lib/GnuPG/Handles.pm new file mode 100644 index 0000000..3eee0e3 --- /dev/null +++ b/lib/GnuPG/Handles.pm @@ -0,0 +1,185 @@ +# Handles.pm +# - interface to the handles used by GnuPG::Interface +# +# Copyright (C) 2000 Frank J. Tobin <ftobin@cpan.org> +# +# This module is free software; you can redistribute it and/or modify it +# under the same terms as Perl itself. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# $Id: Handles.pm,v 1.8 2001/12/09 02:24:10 ftobin Exp $ +# + +package GnuPG::Handles; +use Moo; +use MooX::late; +with qw(GnuPG::HashInit); + +use constant HANDLES => qw( + stdin + stdout + stderr + status + logger + passphrase + command +); + +has "$_" => ( + isa => 'Any', + is => 'rw', + clearer => 'clear_' . $_, +) for HANDLES; + +has _options => ( + isa => 'HashRef', + is => 'rw', + lazy_build => 1, +); + +sub options { + my $self = shift; + my $key = shift; + + return $self->_options->{$key}; +} + +sub _build__options { {} } + +sub BUILD { + my ( $self, $args ) = @_; + + # This is done for the user's convenience so that they don't + # have to worry about undefined hashrefs + $self->_options->{$_} = {} for HANDLES; + $self->hash_init(%$args); +} + +1; + +=head1 NAME + +GnuPG::Handles - GnuPG handles bundle + +=head1 SYNOPSIS + + use IO::Handle; + my ( $stdin, $stdout, $stderr, + $status_fh, $logger_fh, $passphrase_fh, + ) + = ( IO::Handle->new(), IO::Handle->new(), IO::Handle->new(), + IO::Handle->new(), IO::Handle->new(), IO::Handle->new(), + ); + + my $handles = GnuPG::Handles->new + ( stdin => $stdin, + stdout => $stdout, + stderr => $stderr, + status => $status_fh, + logger => $logger_fh, + passphrase => $passphrase_fh, + ); + +=head1 DESCRIPTION + +GnuPG::Handles objects are generally instantiated +to be used in conjunction with methods of objects +of the class GnuPG::Interface. GnuPG::Handles objects +represent a collection of handles that are used to +communicate with GnuPG. + +=head1 OBJECT METHODS + +=head2 Initialization Methods + +=over 4 + +=item new( I<%initialization_args> ) + +This methods creates a new object. The optional arguments are +initialization of data members. + +=item hash_init( I<%args> ). + + +=back + +=head1 OBJECT DATA MEMBERS + +=over 4 + +=item stdin + +This handle is connected to the standard input of a GnuPG process. + +=item stdout + +This handle is connected to the standard output of a GnuPG process. + +=item stderr + +This handle is connected to the standard error of a GnuPG process. + +=item status + +This handle is connected to the status output handle of a GnuPG process. + +=item logger + +This handle is connected to the logger output handle of a GnuPG process. + +=item passphrase + +This handle is connected to the passphrase input handle of a GnuPG process. + +=item command + +This handle is connected to the command input handle of a GnuPG process. + +=item options + +This is a hash of hashrefs of settings pertaining to the handles +in this object. The outer-level hash is keyed by the names of the +handle the setting is for, while the inner is keyed by the setting +being referenced. For example, to set the setting C<direct> to true +for the filehandle C<stdin>, the following code will do: + + # assuming $handles is an already-created + # GnuPG::Handles object, this sets all + # options for the filehandle stdin in one blow, + # clearing out all others + $handles->options( 'stdin', { direct => 1 } ); + + # this is useful to just make one change + # to the set of options for a handle + $handles->options( 'stdin' )->{direct} = 1; + + # and to get the setting... + $setting = $handles->options( 'stdin' )->{direct}; + + # and to clear the settings for stdin + $handles->options( 'stdin', {} ); + +The currently-used settings are as follows: + +=over 4 + +=item direct + +If the setting C<direct> is true for a handle, the GnuPG +process spawned will access the handle directly. This is useful for +having the GnuPG process read or write directly to or from +an already-opened file. + +=back + +=back + +=head1 SEE ALSO + +L<GnuPG::Interface>, + +=cut |