App-PAIA
view release on metacpan or search on metacpan
lib/App/PAIA/Command.pm view on Meta::CPAN
# TODO: move option handling to App::PAIA
# Implements lazy accessors just like Mo, Moo, Moose...
sub has {
my ($name, %options) = @_;
my $coerce = $options{coerce} || sub { $_[0] };
my $default = $options{default};
no strict 'refs'; ## no critic
*{__PACKAGE__."::$name"} = sub {
if (@_ > 1) {
$_[0]->{$name} = $coerce->($_[1]);
} elsif (!exists $_[0]->{$name} && $default) {
$_[0]->{$name} = $coerce->($default->($_[0]));
} else {
$_[0]->{$name}
}
}
}
sub option {
my ($self, $name) = @_;
$self->app->global_options->{$name} # command line
// $self->config->get($name) # config file
// $self->session->get($name); # session file
}
has config => (
default => sub {
App::PAIA::File->new(
logger => $_[0]->logger,
type => 'config',
file => $_[0]->app->global_options->config,
)
}
);
has session => (
default => sub {
App::PAIA::File->new(
logger => $_[0]->logger,
type => 'session',
file => $_[0]->app->global_options->session,
)
}
);
has agent => (
default => sub {
App::PAIA::Agent->new(
insecure => $_[0]->option('insecure'),
logger => $_[0]->logger,
dumper => $_[0]->dumper,
);
}
);
has logger => (
default => sub {
($_[0]->app->global_options->verbose || $_[0]->app->global_options->debug)
? sub { say "# $_" for split "\n", $_[0]; }
: sub { };
}
);
has dumper => (
default => sub {
$_[0]->app->global_options->debug
? sub { say "> $_" for split "\n", $_[0]; }
: sub { };
}
);
sub base_url {
my ($self, $name) = @_;
# command line
if ( defined $self->app->global_options->{$name} ) {
return $self->app->global_options->{$name};
}
my $base = $self->app->global_options->{base};
if (defined $base) {
$base =~ s{/$}{};
return "$base/$name";
}
# session file or config file
foreach ( $self->session, $self->config ) {
if ( defined $_->get($name) ) {
return $_->get($name);
}
}
# config file with base
if ( defined $self->config->get('base') ) {
my $base = $self->config->get('base');
$base =~ s{/$}{};
return $base . "/$name";
}
return;
}
has auth => (
default => sub {
$_[0]->base_url('auth');
}
);
has core => (
default => sub {
$_[0]->base_url('core');
}
);
has base => (
default => sub { $_[0]->option('base') },
coerce => sub { my ($b) = @_; $b =~ s!/$!!; $b; }
);
has patron => (
default => sub { $_[0]->option('patron') }
);
has scope => (
default => sub { $_[0]->option('scope') }
);
( run in 0.832 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )