Smart-Options
view release on metacpan or search on metacpan
lib/Smart/Options/Declare.pm view on Meta::CPAN
package Smart::Options::Declare;
use strict;
use warnings;
use Exporter 'import';
use Smart::Options;
use PadWalker qw/var_name/;
our @EXPORT = qw(opts opts_coerce);
our $COERCE = {
Multiple => {
type => 'ArrayRef',
generater => sub {
if ( defined $_[0] ) {
return [
split(
qr{,},
ref( $_[0] ) eq 'ARRAY' ? join( q{,}, @{ $_[0] } ) : $_[0]
)
];
} else {
return $_[0];
}
}
}
};
my %is_invocant = map{ $_ => undef } qw($self $class);
sub opts {
{
package DB;
() = caller(1);
}
if ( exists $is_invocant{ var_name( 1, \$_[0] ) || '' } ) {
$_[0] = shift @DB::args;
shift;
}
my $opt = Smart::Options->new();
$opt->type(config => 'Config');
for ( my $i = 0 ; $i < @_ ; $i++ ) {
( my $name = var_name( 1, \$_[$i] ) )
or Carp::croak('usage: opts my $var => TYPE, ...');
$name =~ s/^\$//;
if ($name =~ /_/) {
(my $newname = $name) =~ s/_/-/g;
$opt->alias($newname => $name);
$name = $newname;
}
my $rule = $_[$i+1];
if ($rule) {
if (ref($rule) && ref($rule) eq 'HASH') {
if ($rule->{default}) {
$opt->default($name => $rule->{default});
}
if ($rule->{required}) {
$opt->demand($name);
( run in 0.833 second using v1.01-cache-2.11-cpan-39bf76dae61 )