Provided by: libmoosex-app-perl_1.22-1_all bug

NAME

       MooseX::App - Write user-friendly command line apps with even less suffering

SYNOPSIS

       In your base class:

         package MyApp;
         use MooseX::App qw(Config Color);

         option 'global_option' => (
             is            => 'rw',
             isa           => 'Bool',
             documentation => q[Enable this to do fancy stuff],
         ); # Global option

         has 'private' => (
             is              => 'rw',
         ); # not exposed

       Write multiple command classes (If you have only a single command class you should use
       MooseX::App::Simple instead)

         package MyApp::SomeCommand;
         use MooseX::App::Command; # important
         extends qw(MyApp); # purely optional, only if you want to use global options from base class

         parameter 'some_parameter' => (
             is            => 'rw',
             isa           => 'Str',
             required      => 1,
             documentation => q[Some parameter that you need to supply],
         ); # Positional parameter

         option 'some_option' => (
             is            => 'rw',
             isa           => 'Int',
             required      => 1,
             documentation => q[Very important option!],
         ); # Option

         sub run {
             my ($self) = @_;
             # Do something
         }

       And then in some simple wrapper script:

        #!/usr/bin/env perl
        use MyApp;
        MyApp->new_with_command->run;

       On the command line:

        bash$ myapp help
        usage:
            myapp <command> [long options...]
            myapp help

        global options:
            --global_option    Enable this to do fancy stuff [Flag]
            --help --usage -?  Prints this usage information. [Flag]

        available commands:
            some_command    Description of some command
            another_command Description of another command
            help            Prints this usage information

       or

        bash$ myapp some_command --help
        usage:
            myapp some_command <SOME_PARAMETER> [long options...]
            myapp help
            myapp some_command --help

        parameters:
            some_parameter     Some parameter that you need to supply [Required]

        options:
            --global_option    Enable this to do fancy stuff [Flag]
            --some_option      Very important option! [Int,Required]
            --help --usage -?  Prints this usage information. [Flag]

DESCRIPTION

       MooseX-App is a highly customizeable helper to write user-friendly command line
       applications without having to worry about most of the annoying things usually involved.
       Just take any existing Moose class, add a single line ("use MooseX-App qw(PluginA PluginB
       ...);") and create one class for each command in an underlying namespace.

       MooseX-App will then take care of

       •   Finding, loading and initializing the command classes

       •   Creating automated help and documentation from pod and attributes

       •   Reading, encoding and validating the command line options and positional parameters
           entered by the user

       •   Providing helpful error messages if user input cannot be validated

       Commandline options are defined using the 'option' keyword which accepts the same
       attributes as Moose' 'has' keyword.

         option 'some_option' => (
             is            => 'rw',
             isa           => 'Str',
         );

       This is equivalent to

         has 'some_option' => (
             is            => 'rw',
             isa           => 'Str',
             traits        => ['AppOption'],
             cmd_type      => 'option',
         );

       Positional parameters are defined with the 'parameter' keyword

         parameter 'some_option' => (
             is            => 'rw',
             isa           => 'Str',
         );

       This is equivalent to

         has 'some_option' => (
             is            => 'rw',
             isa           => 'Str',
             traits        => ['AppOption'],
             cmd_type      => 'parameter',
         );

       Read the Tutorial for getting started with a simple MooseX::App command line application.

METHODS

   new_with_command
        my $myapp_command = MyApp->new_with_command();

       This method reads the command line arguments from the user and tries to create a command
       object. If it fails it retuns a MooseX::App::Message::Envelope object holding an error
       message.

       You can pass a hash of default params to new_with_command

        MyApp->new_with_command(%default);

   initialize_command_class
        my $myapp_command = MyApp->initialize_command_class($command_name,%default);

       Helper method to initialize the command class for the given command.

GLOBAL OPTIONS

   app_base
        app_base 'my_script';

       Usually MooseX::App will take the name of the calling wrapper script to construct the
       programm name in various help messages. This name can be changed via the app_base
       function.

   app_namespace
        app_namespace 'MyApp::Commands';

       Usually MooseX::App will take the package name of the base class as the namespace for
       commands. This namespace can be changed.

   app_fuzzy
        app_fuzzy(1); # default
        OR
        app_fuzzy(0);

       Enables fuzzy matching of commands and attributes. Is turned on by default.

   app_strict
        app_strict(0); # default
        OR
        app_strict(1);

       If strict is enabled the programm will terminate with an error message if
       superfluous/unknown positional parameters are supplied. If disabled all extra parameters
       will be copied to the extra_argv attribute.

   app_command_name
        app_command_name {
            my ($package) = shift;
            # munge package name;
            return $command_name
        };

       This sub can be used to control how package names should be translated to command names.

GLOBAL ATTRIBUTES

       All MooseX::App classes will have two extra attributes/accessors

   extra_argv
       Carries all parameters from @ARGV that were not consumed.

   help_flag
       Help flag option

ATTRIBUTE OPTIONS

       •   cmd_tags - Extra tags

       •   cmd_flag - Override option name

       •   cmd_aliases - Alternative option names

       •   cmd_split - Split values

       •   cmd_position - Option/Parameter order

       Refer to MooseX::App::Meta::Role::Attribute::Option for detailed documentation.

PLUGINS

       The behaviour of MooseX-App can be customized with plugins. To load a plugin just pass a
       list of plugin names after the "use MooseX-App" statement.

        use MooseX::App qw(PluginA PluginB);

       Read the Writing MooseX-App Plugins documentation on how to create your own plugins.

       Currently the following plugins are shipped with MooseX::App

       •   MooseX::App::Plugin::BashCompletion

           Adds a command that genereates a bash completion script for your application

       •   MooseX::App::Plugin::Color

           Colorful output for your MooseX::App applications

       •   MooseX::App::Plugin::Config

           Config files your MooseX::App applications

       •   MooseX::App::Plugin::ConfigHome

           Config files in users home directory

       •   MooseX::App::Plugin::Env

           Read options from environment

       •   MooseX::App::Plugin::Typo

           Handle typos in command names

       •   MooseX::App::Plugin::Version

           Adds a command to display the version and license of your application

SEE ALSO

       Read the Tutorial for getting started with a simple MooseX::App command line application.

       For alternatives you can check out

       MooseX::App::Cmd, MooseX::Getopt, MooX::Options and App::Cmd

SUPPORT

       Please report any bugs or feature requests to "bug-moosex-app@rt.cpan.org", or through the
       web interface at <http://rt.cpan.org/Public/Bug/Report.html?Queue=MooseX-App>.  I will be
       notified, and then you'll automatically be notified of progress on your report as I make
       changes.

AUTHOR

           MaroX Kollar
           CPAN ID: MAROS
           maros [at] k-1.com

           http://www.k-1.com

CONTRIBUTORS

       In no particular order: Andrew Jones, George Hartzell, Steve Nolte, Michael G, Thomas
       Klausner, Yanick Champoux, Edward Baudrez

COPYRIGHT

       MooseX::App is Copyright (c) 2012 MaroX Kollar.

       This library is free software and may be distributed under the same terms as perl itself.
       The full text of the licence can be found in the LICENCE file included with this module.