NAME

App::CLI::Extension - for App::CLI extension module

VERSION

1.1

SYNOPSIS

# MyApp.pm
package MyApp;

use strict;
use base qw(App::CLI::Extension);

# extension method
# load App::CLI::Plugin::Foo,  MyApp::Plugin::Bar
__PACKAGE__->load_plugins(qw(Foo +MyApp::Plugin::Bar));

# extension method
__PACKAGE__->config( name => "kurt" );

1;

# MyApp/Hello.pm
package MyApp::Hello;

use strict;
use base qw(App::CLI::Command);
use constant options => ("age=i" => "age");

sub run {

    my($self, @args) = @_;
    # config - App::CLI::Extension extension method(App::CLI::Extension::Component::Config)
    print "Hello! my name is " . $self->config->{name} . "\n";
    print "age is " . "$self->{age}\n";
}

# myapp
#!/usr/bin/perl

use strict;
use MyApp;

MyApp->dispatch;

# execute
[kurt@localhost ~] myapp hello --age=27
Hello! my name is kurt
age is 27

DESCRIPTION

The expansion module which added plug in, initial setting mechanism to App::CLI

App::CLI::Extension::Component::* modules is automatic, and it is done require

(It is now Config and Stash is automatic, and it is done require)

RUN PHASE

+----------------------+
|   ** run_method **   |
|  +----------------+  |
|  |  setup  phase  |  | 
|  +----------------+  |
|          ||          |
|  +----------------+  |
|  |  prerun phase  |  | 
|  +----------------+  |
|          ||          |  
|  +----------------+  |   if anything error...   +----------------+
|  |    run phase   |  |  ======================> |   fail  phase  |
|  +----------------+  |                          +----------------+
|          ||          |
|  +----------------+  |
|  |  postrun phase |  |
|  +----------------+  |
|          ||          |
|  +----------------+  |
|  |  finish phase  |  |
|  +----------------+  |
+----------------------+

SETUP

If you define initialization and initialization of each plug-in

PRERUN

If you want the process to run before you run something in the main processing

RUN

Process to define the main(require)

POSTRUN

After the run method to execute

FINISH

At the end of all processing

FAIL

setup/prerun/run/postrun/finish processing to be executed if an exception occurs somewhere in the phase error

METHOD

load_plugins

auto load and require plugin modules

Example

# MyApp.pm
# MyApp::Plugin::GoodMorning and App::CLI::Plugin::Config::YAML::Syck require
__PACKAGE__->load_plugins(qw(+MyApp::Plugin::GoodMorning Config::YAML::Syck));

# MyApp/Plugin/GoodMorning.pm
package MyApp::Plugin::GoodMorning;

use strict;
 
sub good_morning {

    my $self = shift;
    print "Good monring!\n";
}

# MyApp/Hello.pm
package MyApp::Hello;

use strict;
use base qw(App::CLI::Command);

sub run {

    my($self, @args) = @_;
    $self->good_morning;
}

# myapp
#!/usr/bin/perl

use strict;
use MyApp;

MyApp->dispatch;

# execute
[kurt@localhost ~] myapp hello
Good morning!

config

configuration method

Example

# MyApp.pm
__PACKAGE__->config(
               name           => "kurt",
               favorite_group => "nirvana",
               favorite_song  => ["Lounge Act", "Negative Creep", "Radio Friendly Unit Shifter", "You Know You're Right"]
            );

# MyApp/Hello.pm
package MyApp::Hello;

use strict;
use base qw(App::CLI::Command);

sub run {

    my($self, @args) = @_;
    print "My name is " . $self->config->{name} . "\n";
    print "My favorite group is " . $self->config->{favorite_group} . "\n";
    print "My favorite song is " . join(",", @{$self->config->{favorite_song}});
    print " and Smells Like Teen Spirit\n"
}

# myapp
#!/usr/bin/perl

use strict;
use MyApp;

MyApp->dispatch;

# execute
[kurt@localhost ~] myapp hello
My name is kurt
My favorite group is nirvana
My favorite song is Lounge Act,Negative Creep,Radio Friendly Unit Shifter,You Know You're Right and Smells Like Teen Spirit

COMPONENT METHOD

argv0

my script name

Example:

# MyApp/Hello.pm
package MyApp::Hello;
use strict;
use feature ":5.10.0";
use base qw(App::CLI::Command);
   
sub run {

    my($self, @args) = @_;
    say "my script name is " . $self->argv0;
}

1;

# execute
[kurt@localhost ~] myapp hello
my script name is myapp

full_argv0

my script fullname

Example:

# MyApp/Hello.pm
package MyApp::Hello;
use strict;
use feature ":5.10.0";
use base qw(App::CLI::Command);

sub run {

    my($self, @args) = @_;
    say "my script full name is " . $self->full_argv0;
}

1;

# execute
[kurt@localhost ~] myapp hello
my script name is /home/kurt/myapp

cmdline

my execute cmdline string

Example:

# MyApp/Hello.pm
package MyApp::Hello;
use strict;
use feature ":5.10.0";
use base qw(App::CLI::Command);

sub run {

    my($self, @args) = @_;
    say "my script cmdline is [" . $self->cmdline . "]";
}

1;

# execute
[kurt@localhost ~] myapp hello --verbose --num=10
my script cmdline is [/home/kurt/myapp hello --verbose --num=10]

orig_argv

my execute script original argv

Example:

# MyApp/Hello.pm
package MyApp::Hello;
use strict;
use feature ":5.10.0";
use base qw(App::CLI::Command);

sub run {

    my($self, @args) = @_;
    say "my script original argv is [" join(", ", @{$self->orig_argv}) . "]";
}

1;

# execute
[kurt@localhost ~] myapp hello --verbose --num=10
my script original argv is [hello,--verbose, --num=10]

stash

like global variable in Command package

Example:

# MyApp/Hello.pm
package MyApp::Hello;
use strict;
use feature ":5.10.0";
use base qw(App::CLI::Command);
 
sub run {

    my($self, @args) = @_;
    $self->stash->{name} = "kurt";
    say "stash value: " . $self->stash->{name};
}

1;

new_callback

install new callback phase

Example:

$self->new_callback("some_phase");
# registered callback argument pattern
$self->new_callback("some_phase", sub { $self = shift; "anything to do..." });

add_callback

install callback

Example:

$self->add_callback("some_phase", sub { my $self = shift; say "some_phase method No.1" });
$self->add_callback("some_phase", sub { my $self = shift; say "some_phase method No.1" });
$self->add_callback("any_phase", sub {
                                   my($self, @args) = @_;
                                   say "any_phase args: @args";
                                });

exec_callback

execute callback

Example:

$self->execute_callback("some_phase");
# some_phase method method No.1
# some_phase method method No.2

$self->execute_callback("any_phase", qw(one two three));
# any_phase args: one two three 

exists_callback

exists callback check

Example:

if ($self->exists_callback("some_phase")) {
    $self->exec_callback("some_phase");
} else {
    die "some_phase is not exists callback phase";
}

RUN PHASE METHOD

setup

prerun

postrun

finish

fail

SEE ALSO

App::CLI Class::Data::Accessor UNIVERSAL::require

AUTHOR

Akira Horimoto

COPYRIGHT AND LICENSE

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

Copyright (C) 2009 Akira Horimoto