| App-Cmd documentation | Contained in the App-Cmd distribution. |
App::Cmd::Subdispatch - an App::Cmd::Command that is also an App::Cmd
version 0.311
A hackish new that allows us to have an Command instance before they normally exist.
my $subcmd = $subdispatch->prepare($app, @args);
An overridden version of prepare in App::Cmd::Command that performs a new dispatch cycle.
$subdispatch->app;
This method returns the application that this subdispatch is a command of.
$subcmd->prepare(
$subdispatch->choose_parent_app($app, $opt, $plugin),
@$args
);
A method that chooses whether the parent app or the subdispatch is going to be
$cmd->app.
Ricardo Signes <rjbs@cpan.org>
This software is copyright (c) 2011 by Ricardo Signes.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| App-Cmd documentation | Contained in the App-Cmd distribution. |
use strict; use warnings; package App::Cmd::Subdispatch; BEGIN { $App::Cmd::Subdispatch::VERSION = '0.311'; } use App::Cmd; use App::Cmd::Command; BEGIN { our @ISA = qw(App::Cmd::Command App::Cmd) } # ABSTRACT: an App::Cmd::Command that is also an App::Cmd sub new { my ($inv, $fields, @args) = @_; if (ref $inv) { @{ $inv }{ keys %$fields } = values %$fields; return $inv; } else { $inv->SUPER::new($fields, @args); } } sub prepare { my ($class, $app, @args) = @_; my $self = $class->new({ app => $app }); my ($subcommand, $opt, @sub_args) = $self->get_command(@args); $self->set_global_options($opt); if (defined $subcommand) { return $self->_prepare_command($subcommand, $opt, @sub_args); } else { if (@args) { return $self->_bad_command(undef, $opt, @sub_args); } else { return $self->prepare_default_command($opt, @sub_args); } } } sub _plugin_prepare { my ($self, $plugin, @args) = @_; return $plugin->prepare($self->choose_parent_app($self->app, $plugin), @args); } sub app { $_[0]{app} } sub choose_parent_app { my ( $self, $app, $plugin ) = @_; if ( $plugin->isa("App::Cmd::Command::commands") or $plugin->isa("App::Cmd::Command::help") or scalar keys %{ $self->global_options } ) { return $self; } else { return $app; } } 1; __END__