NAME

MooX::Cmd - Giving an easy Moo style way to make command organized CLI apps

VERSION

version 0.008

SYNOPSIS

 package MyApp;

 use Moo;
 use MooX::Cmd;

 sub execute {
   my ( $self, $args_ref, $chain_ref ) = @_;
   my @extra_argv = @{$args_ref};
   my @chain = @{$chain_ref} # in this case only ( $myapp )
                             # where $myapp == $self
 }

 1;

 package MyApp::Cmd::Command;
 # for "myapp command"

 use Moo;
 use MooX::Cmd;

 # gets executed on "myapp command" but not on "myapp command command"
 # there MyApp::Cmd::Command still gets instantiated and for the chain
 sub execute {
   my ( $self, $args_ref, $chain_ref ) = @_;
   my @chain = @{$chain_ref} # in this case ( $myapp, $myapp_cmd_command )
                             # where $myapp_cmd_command == $self
 }

 1;

 package MyApp::Cmd::Command::Cmd::Command;
 # for "myapp command command"

 use Moo;
 use MooX::Cmd;

 # gets executed on "myapp command command" and will not get instantiated
 # on "myapp command" cause it doesnt appear in the chain there
 sub execute {
   my ( $self, $args_ref, $chain_ref ) = @_;
   my @chain = @{$chain_ref} # in this case ( $myapp, $myapp_cmd_command,
                             # $myapp_cmd_command_cmd_command )
                             # where $myapp_cmd_command_cmd_command == $self
 }

 package MyZapp;

 use Moo;
 use MooX::Cmd execute_from_new => 0;

 sub execute {
   my ( $self ) = @_;
   my @extra_argv = @{$self->command_args};
   my @chain = @{$self->command_chain} # in this case only ( $myzapp )
                             # where $myzapp == $self
 }

 1;

 package MyZapp::Cmd::Command;
 # for "myapp command"

 use Moo;
 use MooX::Cmd execute_from_new => 0;

 # gets executed on "myapp command" but not on "myapp command command"
 # there MyApp::Cmd::Command still gets instantiated and for the chain
 sub execute {
   my ( $self ) = @_;
   my @extra_argv = @{$self->command_args};
   my @chain = @{$self->command_chain} # in this case ( $myzapp, $myzapp_cmd_command )
                             # where $myzapp_cmd_command == $self
 }

 1;
 package main;

 use MyApp;

 MyZapp->new_with_cmd->execute();
 MyApp->new_with_cmd;

 1;

DESCRIPTION

Works together with MooX::Options for every command on its own, so options are parsed for the specific context and used for the instantiation:

myapp --argformyapp command --argformyappcmdcommand ...

SUPPORT

Repository

http://github.com/Getty/p5-moox-cmd
Pull request and additional contributors are welcome

Issue Tracker

http://github.com/Getty/p5-moox-cmd/issues

THANKS

Lukas Mai (mauke), Toby Inkster (tobyink)

Gave some helpful advice for solving difficult issues

Celogeek San

Integration into MooX::Options for better help messages and suit team play

Torsten Raudssus (Getty)

did the initial work and brought it to CPAN

AUTHOR

Torsten Raudssus <torsten@raudss.us>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Torsten Raudssus.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.