package Net::HTTP::Console;
use Moose;
use Try::Tiny;
use Method::Signatures::Simple;
use namespace::autoclean;
with qw/MooseX::Getopt/;
has url => (isa => 'Str', is => 'rw');
has format => (isa => 'Str', is => 'rw', default => 'json');
has format_mode => (isa => 'Str', is => 'rw', default => 'content-type');
has lib => (
isa => 'Str',
is => 'rw',
default => sub {
Class::MOP::load_class('Net::HTTP::Console::Dummy');
'Net::HTTP::Console::Dummy';
},
handles => qr/.*/,
);
has prompt => (
isa => 'Str',
is => 'rw',
lazy => 1,
default => sub {
my $self = shift;
# FIXME
# my $url = $self->lib->api_base_url ? $self->lib->api_base_url : $self->url;
# my $url= "http";
return $self->url . '> ';
}
);
has plugins => (
traits => ['Array'],
is => 'rw',
isa => 'ArrayRef[Object]',
lazy => 1,
handles => {all_plugins => 'elements', add_plugin => 'push'},
default => sub {
my $self = shift;
my @p;
for (qw/LoadLib HTTPRequest Help ExecuteMethod/) {
my $p = "Net::HTTP::Console::Dispatcher::" . $_;
Class::MOP::load_class($p);
my $o = $p->new(application => $self);
push @p, $o;
}
\@p;
},
);
sub BUILDARGS {
my ($class, %args) = @_;
if ($args{lib}) {
Class::MOP::load_class($args{lib});
}
return {%args};
}
method dispatch($input) {
my @plugins = $self->all_plugins();
my $result;
foreach (@plugins) {
$result = $_->dispatch($input);
last if $result;
}
# if (!$result) {
# try {
# }
# catch {
# warn $_;
# print "no command found!\n" unless $result;
# };
#}
}
method new_lib($http_method, $path) {
my $lib = $self->lib->new(
api_base_url => $self->url,
api_format => $self->format,
api_format_mode => $self->format_mode,
);
$lib->meta->add_net_api_method(
'anonymous',
method => $http_method,
path => $path,
);
return $lib;
}
no Moose;
1;