Ambrosia

 view release on metacpan or  search on metacpan

lib/Ambrosia/CommonGatewayInterface/Options.pm  view on Meta::CPAN

package Ambrosia::CommonGatewayInterface::Options;
use strict;
use warnings;

use Getopt::Long::Descriptive 0.087;

use Ambrosia::Meta;

class sealed
{
    extends => [qw/Ambrosia::CommonGatewayInterface/],
    public  => [qw/options_spec/],
};

our $VERSION = 0.010;

sub open
{
    my $self = shift;

    my ($opt, $usage) = describe_options(@{$self->options_spec});
    $self->_handler = new Ambrosia::CommonGatewayInterface::Options::ICGI(
        __opt => $opt, __usage => $usage
    );
    return $self->SUPER::open();
}

sub error
{
    return $_[0]->_handler->usage()->text();
}

sub input_data
{
    my $self = shift;
    return $self->_handler->param(@_);
}

sub output_data
{
    return '';
}

sub redirect
{}

1;

package Ambrosia::CommonGatewayInterface::Options::ICGI;

use Ambrosia::Meta;

class sealed
{
    private => [qw/__opt __usage/],
};

sub param
{
    my $self = shift;
    if ( @_ )
    {
        my @res = map { eval { return $self->__opt->$_; } } @_;
        return wantarray ? @res : $res[0];
    }
    else
    {
        return map { $_->{name} } @{$self->__usage->{options}};
    }
}

sub usage
{
    $_[0]->__usage;
}

1;

__END__

=head1 NAME

Ambrosia::CommonGatewayInterface::Options - 

=head1 VERSION



( run in 2.591 seconds using v1.01-cache-2.11-cpan-302cb4679cc )