add non-hack MX::Runnable
[gitmo/MooseX-Runnable.git] / lib / MooseX / Runnable.pm
1 package MooseX::Runnable;
2 use Moose::Role;
3
4 requires 'run';
5
6 1;
7
8 __END__
9
10 =head1 NAME
11
12 MooseX::Runnable - tag a class as a runnable application
13
14 =head1 SYNOPSIS
15
16 Create a class, tag it runnable, and provide a C<run> method:
17
18     package App::HelloWorld;
19     use Moose;
20
21     with 'MooseX::Runnable';
22
23     sub run {
24        my $name = shift;
25        say "Hello, $name.";
26        return 0;
27     }
28
29 Then you can run this class as an application with the included
30 C<mx-run> script:
31
32     $ mx-run App::HelloWorld jrockway
33     Hello, jrockway.
34     $
35
36 C<MooseX::Runnable> supports L<MooseX::Getopt|MooseX::Getopt>, and
37 other similar systems (and is extensible, in case you have written
38 such a system).
39
40 =head1 DESCRIPTION
41
42 MooseX::Runnable is a framework for making classes runnable
43 applications.  This role doesn't do anything other than tell the rest
44 of the framework that your class is a runnable application that has a
45 C<run> method which accepts arguments and returns the process' exit
46 code.
47
48 This is a convention that the community has been using for a while.
49 This role tells the computer that your class uses this convention, and
50 let's the computer abstract away some of the tedium this entails.
51
52 =head1 REQUIRED METHODS
53
54 =head1 THINGS YOU GET
55
56 =head2 C<mx-run>
57
58 This is a script that accepts a C<MooseX::Runnable> class and tries to
59 run it, using C<MooseX::Runnable::Run>.
60
61 The syntax is:
62
63   mx-run <args for mx-run> Class::Name <args for Class::Name>
64
65 for example:
66
67   mx-run -Ilib App::HelloWorld --args --go --here
68
69 =head2 C<MooseX::Runnable::Run>
70
71 If you don't want to invoke your app with C<mx-run>, you can write a
72 custom version using L<MooseX::Runnable::Run|MooseX::Runnable::Run>.