GitLab-API-v4
view release on metacpan or search on metacpan
lib/GitLab/API/v4/Config.pm view on Meta::CPAN
my $config = GitLab::API::v4::Config->new();
my $api = GitLab::API::v4->new( $config->args() );
=head1 DESCRIPTION
This module is used by L<gitlab-api-v4> to load configuration.
If you are using L<GitLab::API::v4> directly then this module will not be
automatically used, but you are welcome to explicitly use it as shown in the
L</SYNOPSIS>.
=cut
use Getopt::Long;
use IO::Prompter;
use JSON::MaybeXS;
use Log::Any qw( $log );
use Path::Tiny;
use Types::Common::String -types;
use Types::Standard -types;
use Moo;
use strictures 2;
use namespace::clean;
sub _filter_args {
my ($self, $args) = @_;
return {
map { $_ => $args->{$_} }
grep { $args->{$_} }
keys %$args
};
}
=head1 ARGUMENTS
=head2 file
The file to load configuration from. The file should hold valid JSON.
By default this will be set to C<.gitlab-api-v4-config> in the current
user's home directory.
This can be overridden with the C<GITLAB_API_V4_CONFIG_FILE> environment
variable or the C<--config-file=...> command line argument.
=cut
has file => (
is => 'lazy',
isa => NonEmptySimpleStr,
);
sub _build_file {
my ($self) = @_;
my $file = $self->opt_args->{config_file}
|| $self->env_args->{config_file};
return $file if $file;
my ($home) = ( getpwuid($<) )[7];
return '' . path( $home )->child('.gitlab-api-v4-config');
}
=head1 ATTRIBUTES
=head2 opt_args
Returns a hashref of arguments derived from command line options.
Supported options are:
--config_file=...
--url=...
--private-token=...
--access-token=...
--retries=...
Note that the options are read from, and removed from, C<@ARGV>. Due
to this the arguments are saved internally and re-used for all instances
of this class so that there are no weird race conditions.
=cut
has opt_args => (
is => 'rwp',
isa => HashRef,
default => sub{ {} },
);
=head2 env_args
Returns a hashref of arguments derived from environment variables.
Supported environment variables are:
GITLAB_API_V4_CONFIG_FILE
GITLAB_API_V4_URL
GITLAB_API_V4_PRIVATE_TOKEN
GITLAB_API_V4_ACCESS_TOKEN
GITLAB_API_V4_RETRIES
=cut
has env_args => (
is => 'lazy',
isa => HashRef,
);
sub _build_env_args {
my ($self) = @_;
return $self->_filter_args({
config_file => $ENV{GITLAB_API_V4_CONFIG_FILE},
url => $ENV{GITLAB_API_V4_URL},
private_token => $ENV{GITLAB_API_V4_PRIVATE_TOKEN},
access_token => $ENV{GITLAB_API_V4_ACCESS_TOKEN},
retries => $ENV{GITLAB_API_V4_RETRIES},
});
}
=head2 file_args
( run in 4.093 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )