Astro-App-Satpass2

 view release on metacpan or  search on metacpan

lib/Astro/App/Satpass2/Format/Dump.pm  view on Meta::CPAN

package Astro::App::Satpass2::Format::Dump;

use strict;
use warnings;

use parent qw{ Astro::App::Satpass2::Format };

use Astro::App::Satpass2::Utils qw{
    load_package
    CODE_REF
    @CARP_NOT
};

our $VERSION = '0.057';

my %dumper_hash = (
    'YAML' => 'Dump',
    'Data::Dumper' => 'Dumper',
    'JSON' => 'to_json',
);

{

    my $dumper_default;

    sub new {
	my ( $class, @args ) = @_;
	my $self = $class->SUPER::new( @args );
	if ( ! $self->dumper() ) {
	    if ( $dumper_default ) {
		$self->dumper( $dumper_default );
	    } else {
		$self->dumper(
		    'YAML,Data::Dumper'
		);
		$dumper_default = $self->dumper();
	    }
	}
	return $self;
    }

}

sub dumper {
    my ( $self, @args ) = @_;
    @args or return $self->{+__PACKAGE__}{dumper};
    my $val = shift @args;
    my $ref = ref $val;
    if ( ! $ref ) {
	foreach my $possible ( split qr{ , }smx, $val ) {
	    my $code = $dumper_hash{$possible} or next;
	    load_package( $possible ) or next;
	    $code = $possible->can( $code ) or next;
	    $val = $code;
	    last;
	}
	ref $val
	    or $self->wail(
	    "Unknown or unavailable dumper class '$val'" );
    } elsif ( CODE_REF ne $ref ) {
	$self->wail(
	    'Dumper must be a code ref or the name of a known class' );
    }
    $self->{+__PACKAGE__}{dumper} = $val;
    return $self;
}

sub _dump {
    my ( $self, $object ) = @_;
    if ( defined $object ) {
	return $self->dumper()->( $object );
    } else {
	return '';
    }
}

sub format : method {	## no critic (ProhibitBuiltInHomonyms)
    my ( $self, %data ) = @_;
    return $self->_dump( \%data );
}

1;

__END__

=head1 NAME

Astro::App::Satpass2::Format::Dump - Format Astro::App::Satpass2 output as dump.



( run in 0.566 second using v1.01-cache-2.11-cpan-5a3173703d6 )