NAME

MooX::Options - add option keywords to your Moo object

VERSION

version 1.8

MooX::Options

Use Getopt::Long::Descritive to provide command line option for your Mo/Moo/Mouse/Moose Object.

This module will add "option" which act as "has" but support additional feature for getopt.

You will have "new_with_options" to instanciate new object for command line.

METHOD

IMPORT

The import method can take option :

%options
creation_chain_method

call this method after parsing option, default : new

creation_method_name

name of new method to handle option, default : new_with_options

option_chain_method

call this method to create the attribute, default : has

option_method_name

name of keyword you want to use to create your option, default : option

it will create ${option_method_name}_usage too, ex: option_usage($exit_code, @{additional messages})

nofilter

don't filter extra params for MooX::Options before calling chain_method

it is usefull if you want to use this params for something else

flavour

pass extra arguments for Getopt::Long::Descriptive. it is usefull if you want to configure Getopt::Long.

use MooX::Options flavour => [qw( pass_through )];

Any flavour is pass to Getopt::Long as a configuration, check the doc to see what is possible.

protect_argv

by default, argv is protected. if you want to do something else on it, use this option and it will change the real argv.

use MooX::Options protect_argv => 0;

USAGE

First of all, I use Getopt::Long::Descriptive. Everything will be pass to the programs, more specially the format.

package t;
use Moo;
use MooX::Options;

option 'test' => (is => 'ro');

1;

my $t = t->new_with_options(); #parse @ARGV
my $o = t->new_with_options(test => 'override'); #parse ARGV and override any value with the params here

The keyword "option" work exactly like the keyword "has" and take extra argument of Getopt.

Keyword 'option_usage'

It display the usage message and return the exit code

option_usage(1, "str is not valid");

Params :

$exit_code

Exit code after displaying the usage message

@messages

Additional message to display before the usage message

Ex: str is not valid

Keyword 'new_with_options'

It will parse your command line params and your inline params, validate and call the 'new' method.

You can override the command line params :

Ex:

@ARGV=('--str=ko');
t->new_with_options(str => 'ok');
t->str; #ok

Keyword 'option' : EXTRA ARGS

doc

Specified the documentation for the attribute

required

Specified if the attribute is needed

format

Format of the params. It is the same as Getopt::Long::Descriptive.

Example :

i : integer
i@: array of integer
s : string
s@: array of string
f : float value

by default, it's a boolean value.

Take a look of available format with Getopt::Long::Descriptive.

negativable

add the attribute "!" to the name. It will allow negative params.

Ex :

test --quiet
=> quiet = 1

test --quiet --no-quiet
=> quiet = 0
repeatable

add the attribute "@" to the name. It will allow repeatable params.

Ex :

test --verbose
=> verbose = 1

test --verbose --verbose
=> verbose = 2

it is advisable to use a "default" option on the attribute for repeatable params so that they behave as arrays "out of the box" when used outside of command line context.

Ex: package t; use Moo; use MooX::Options;

option foo => (is => 'rw', format => 's@', default => sub { [] });
option bar => (is => 'rw', format => 'i@', default => sub { [] });

# this now works as expected and you will no longer see
# "Can't use an undefined value as an ARRAY reference"
my $t = t->new;
push @{ $t->foo }, 'abc123';

1;
autosplit

auto split args to generate multiple value. It implie "repeatable". autosplit take the separator value, ex: ",".

Ex :

package t;
use Moo;
use MooX::Options;

option test => (is => 'ro', format => 'i@', autosplit => ',');
#same as : option test => (is => 'ro', format => 'i', autosplit => ',');
1;

@ARGV=('--test=1,2,3,4');
my $t = t->new_with_options;
t->test # [1,2,3,4]

I automatically take the quoted as a group separator value

package str;
use Moo;
use MooX::Options;
option test => (is => 'ro', format => 's', repeatable => 1, autosplit => ',');
1;

@ARGV=('--test=a,b,"c,d",e');
my $t = str->new_with_options;
t->test # ['a','b','c,d','e']
short

give short name of an attribute.

Ex :

package t;
use Moo;
use MooX::Options;

option 'verbose' => (is => 'ro', repeatable => 1, short => 'v');

1;
@ARGV=('-vvv');
my $t = t->new_with_options;
t->verbose # 3

THANKS

Matt S. Trout (mst) <mst@shadowcat.co.uk> : For his patience and advice.

BUGS

Any bugs or evolution can be submit here :

Github

BUGS

Please report any bugs or feature requests on the bugtracker website https://github.com/celogeek/MooX-Options/issues

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

AUTHOR

celogeek <me@celogeek.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by celogeek <me@celogeek.com>.

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