From 2bb154b2b3bbe819c98a01d9d43f2183e6389401 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Tue, 8 Jun 2010 17:30:55 +0200 Subject: add dispatcher for viewing content; update help --- lib/Net/HTTP/Console/Dispatcher/HTTP.pm | 8 +--- lib/Net/HTTP/Console/Dispatcher/Help.pm | 75 ++++++++++++++++++++++++--------- lib/Net/HTTP/Console/Dispatcher/Set.pm | 34 +++++++-------- lib/Net/HTTP/Console/Dispatcher/View.pm | 28 ++++++++++++ lib/Net/HTTP/Console/Role/API.pm | 34 +++++++++------ lib/Net/HTTP/Console/Role/Plugins.pm | 4 +- 6 files changed, 126 insertions(+), 57 deletions(-) create mode 100644 lib/Net/HTTP/Console/Dispatcher/View.pm diff --git a/lib/Net/HTTP/Console/Dispatcher/HTTP.pm b/lib/Net/HTTP/Console/Dispatcher/HTTP.pm index 5dc5719..c0e24ae 100644 --- a/lib/Net/HTTP/Console/Dispatcher/HTTP.pm +++ b/lib/Net/HTTP/Console/Dispatcher/HTTP.pm @@ -7,7 +7,7 @@ class Net::HTTP::Console::Dispatcher::HTTP with Net::HTTP::Console::Dispatcher { use Try::Tiny; method pattern($input) { - $input =~ /^(?:GET|POST|PUT|DELETE|HEAD|show)\s/ ? return $input : return 0; + $input =~ /^(?:GET|POST|PUT|DELETE|HEAD)\s/ ? return $input : return 0; } method dispatch($input) { @@ -20,10 +20,6 @@ class Net::HTTP::Console::Dispatcher::HTTP with Net::HTTP::Console::Dispatcher { elsif (($method, $path, $body) = $input =~ /^(POST|PUT)\s(.*)(?:\s(.*))$/) { $self->_do_request_with_body($method, $path, $body); } - elsif ($input =~ /^show\s(headers|content)$/) { - my $method = "_show_last_$1"; - $self->application->$method; - } else { # XXX unsupporter method } @@ -36,7 +32,7 @@ class Net::HTTP::Console::Dispatcher::HTTP with Net::HTTP::Console::Dispatcher { my ($content, $result) = $self->application->api_object->anonymous; $self->application->_set_and_show($content, $result); }catch{ - warn $_; + # XXX error }; } diff --git a/lib/Net/HTTP/Console/Dispatcher/Help.pm b/lib/Net/HTTP/Console/Dispatcher/Help.pm index a7a774b..6218676 100644 --- a/lib/Net/HTTP/Console/Dispatcher/Help.pm +++ b/lib/Net/HTTP/Console/Dispatcher/Help.pm @@ -13,6 +13,14 @@ class Net::HTTP::Console::Dispatcher::Help with Net::HTTP::Console::Dispatcher { } elsif ($cmd eq 'command') { $self->_list_commands(); + }elsif($cmd eq 'view') { + $self->_help_about_view(); + }elsif($cmd eq 'set') { + $self->_help_about_set(); + }elsif($cmd eq 'request') { + $self->_help_about_request(); + }elsif($cmd eq 'load') { + $self->_help_about_load(); } } else { @@ -29,33 +37,62 @@ class Net::HTTP::Console::Dispatcher::Help with Net::HTTP::Console::Dispatcher { print <application->api_object->meta->get_all_net_api_methods(); + method _list_commands { + my @methods = + $self->application->api_object->meta->get_all_net_api_methods(); - if (!@methods) { - print "no method available\n"; - return; - } + if (!@methods) { + print "no method available\n"; + return; + } + + print "available commands:\n"; + map { print "- " . $_ . "\n" } @methods; + } + + method _get_help_for_command($cmd_name) { + my $method = + $self->application->api_object->meta->find_net_api_method_by_name($cmd_name); + + if (!$method) { + print "unknown method " . $cmd_name . "\n"; + return; + } + + print $method->documentation; + } - print "available commands:\n"; - map { print "- " . $_ . "\n" } @methods; - } + method _help_about_view { + print <application->api_object->meta->find_net_api_method_by_name($cmd_name); + method _help_about_set { + print <documentation; - } + method _help_about_load { + print <_unset_header($header); - } - elsif ($command eq 'set_header') { - $self->_set_header($header, $value); - } - elsif ($command eq 'show_defined_headers') { - $self->_show_defined_headers(); + if ($command eq 'set') { + $self->_set_header($key, $value) if $type eq 'header'; + }elsif($command eq 'unset') { + $self->_unset_header($key) if $type eq 'header'; } + + # elsif ($command eq 'show_defined_headers') { + # $self->_show_defined_headers(); + # } } method pattern($input) { - $input =~ /(un)?set_header|show_defined_headers/ - ? return $input - : return 0; + $input =~ /^(un)?set/ ? return $input : return 0; } method _set_header($header, $value) { @@ -35,11 +33,11 @@ class Net::HTTP::Console::Dispatcher::Set with Net::HTTP::Console::Dispatcher { print "header $header unset\n"; } - method _show_defined_headers { - foreach ($self->application->all_headers) { - print $_->[0].": ".$_->[1]."\n"; - } - } + # method _show_defined_headers { + # foreach ($self->application->all_headers) { + # print $_->[0].": ".$_->[1]."\n"; + # } + # } } 1; diff --git a/lib/Net/HTTP/Console/Dispatcher/View.pm b/lib/Net/HTTP/Console/Dispatcher/View.pm new file mode 100644 index 0000000..059fe53 --- /dev/null +++ b/lib/Net/HTTP/Console/Dispatcher/View.pm @@ -0,0 +1,28 @@ +package Net::HTTP::Console::Dispatcher::View; + +use MooseX::Declare; + +class Net::HTTP::Console::Dispatcher::View with Net::HTTP::Console::Dispatcher { + + method pattern ($input) { + $input =~ /^show/ ? return $input : return 0; + } + + method dispatch ($input) { + (my $key) = $input =~ /^show ([\w]+)/; + + if ($key eq 'headers') { + $self->application->_show_last_headers; + } + elsif ($key eq 'content') { + $self->application->_show_last_content; + } + elsif ($key eq 'defined_headers') { + foreach ($self->application->all_headers) { + print $_->[0] . ': ' . $_->[1] . "\n"; + } + } + } +} + +1; diff --git a/lib/Net/HTTP/Console/Role/API.pm b/lib/Net/HTTP/Console/Role/API.pm index 0b99796..c6ea1f2 100644 --- a/lib/Net/HTTP/Console/Role/API.pm +++ b/lib/Net/HTTP/Console/Role/API.pm @@ -4,6 +4,8 @@ use MooseX::Declare; role Net::HTTP::Console::Role::API { + use Try::Tiny; + has api_lib => ( isa => 'Str', is => 'rw', @@ -21,21 +23,29 @@ role Net::HTTP::Console::Role::API { ); method load_api_lib($lib) { - Class::MOP::load_class($lib); - $self->api_lib($lib); - my $o = $lib->new(); - $o->api_base_url($self->url) if $self->has_url; - $o->api_format($self->format) if $self->has_format; - $o->api_format_mode($self->format_mode) if $self->has_format_mode; - $o; + try { + Class::MOP::load_class($lib); + $self->api_lib($lib); + my $o = $lib->new(); + $o->api_base_url($self->url) if $self->has_url; + $o->api_format($self->format) if $self->has_format; + $o->api_format_mode($self->format_mode) if $self->has_format_mode; + $o; + }catch{ + # XXX ERROR + } } method new_anonymous_method ($http_method, $path) { - $self->api_object->meta->add_net_api_method( - 'anonymous', - method => $http_method, - path => $path, - ); + try { + $self->api_object->meta->add_net_api_method( + 'anonymous', + method => $http_method, + path => $path, + ); + }catch { + # XXX ERROR + } } } diff --git a/lib/Net/HTTP/Console/Role/Plugins.pm b/lib/Net/HTTP/Console/Role/Plugins.pm index d7bf7b5..2bddccd 100644 --- a/lib/Net/HTTP/Console/Role/Plugins.pm +++ b/lib/Net/HTTP/Console/Role/Plugins.pm @@ -5,7 +5,7 @@ use MooseX::Declare; role Net::HTTP::Console::Role::Plugins { use Try::Tiny; - + has dispatchers => ( is => 'rw', isa => 'ArrayRef[Str]', @@ -13,7 +13,7 @@ role Net::HTTP::Console::Role::Plugins { lazy => 1, auto_deref => 1, default => sub { - [qw/Load HTTP Help Method Set/], + [qw/Load HTTP Help Method Set View/], } ); -- cgit 1.4.1