home *** CD-ROM | disk | FTP | other *** search
- package PPM::Result;
-
- use strict;
- use Exporter;
- use Text::Autoformat;
- use Data::Dumper;
-
- $PPM::Result::VERSION = '3.00';
- @PPM::Result::ISA = qw(Exporter);
- @PPM::Result::EXPORT_OK = qw(Error Warning Ok Success List Hash);
-
- #=============================================================================
- # Shortcut constructors for various types of results
- #=============================================================================
- sub Error {
- my $msg = shift;
- my $code = shift || 1;
- my $res = shift;
- PPM::Result->new($res, $code, $msg);
- }
-
- sub Warning {
- my $msg = shift;
- my $code = shift || -1;
- my $res = shift;
- PPM::Result->new($res, $code, $msg);
- }
-
- sub Ok {
- Success(@_);
- }
-
- sub Success {
- PPM::Result->new(@_);
- }
-
- # Shortcut for returning a list, successfully.
- sub List {
- my @list = @_;
- Ok(\@list);
- }
-
- # Shortcut for returning a hash, successfully.
- sub Hash {
- my %hash = @_;
- Ok(\%hash);
- }
-
- #=============================================================================
- # The class implementation
- #=============================================================================
- sub new {
- my $self = shift;
- my $class = ref($self) || $self;
- my $result = shift;
- $result = '' unless defined $result;
- my $code = shift || '0';
- my $msg = shift || '';
- chomp $msg;
- bless {
- result => $result,
- code => $code,
- msg => $msg,
- on_destruct => [],
- }, $class;
- }
-
- sub DESTROY {
- my $o = shift;
- for my $cref (@{$o->{on_destruct}}) {
- $cref->($o);
- }
- }
-
- sub on_destruct {
- my $o = shift;
- my $cref = shift;
- push @{$o->{on_destruct}}, $cref;
- }
-
- sub ok {
- my $o = shift;
- $o->{code} <= 0;
- }
-
- sub is_success {
- my $o = shift;
- $o->{code} == 0;
- }
-
- sub is_warning {
- my $o = shift;
- $o->{code} < 0;
- }
-
- sub is_error {
- my $o = shift;
- $o->{code} > 0;
- }
-
- sub errorcode {
- my $o = shift;
- $o->{code};
- }
-
- sub msg {
- my $o = shift;
- my $w = $o->is_error ? "Error: " :
- $o->is_warning ? "Warning: " :
- "Success";
- $w .= $o->msg_raw;
- $w .= "\n";
- autoformat($w, { all => 1 } );
- }
-
- sub msg_raw {
- my $o = shift;
- defined $o->{msg} ? $o->{msg} : '';
- }
-
- sub result {
- my $o = shift;
- my $key = shift;
- return $o->{result} unless defined $key;
- return $o->{result}{$key} if eval { exists $o->{result}{$key} };
- return $o->{result}[$key] if eval { exists $o->{result}[$key] };
- return undef;
- }
- sub result_s {
- my $o = shift;
- scalar $o->result(@_);
- }
- sub result_l {
- my $o = shift;
- @{$o->result(@_)};
- }
- sub result_h {
- my $o = shift;
- %{$o->result(@_)};
- }
-
- 1;
-