GitLab-API-v4
view release on metacpan or search on metacpan
lib/GitLab/API/v4.pm view on Meta::CPAN
sub _call_rest_client {
my ($self, $verb, $path, $path_vars, $options) = @_;
$options->{headers} = $self->_auth_headers();
return $self->rest_client->request(
$verb, $path, $path_vars, $options,
);
}
sub _auth_headers {
my ($self) = @_;
my $headers = {};
$headers->{'authorization'} = 'Bearer ' . $self->access_token()
if defined $self->access_token();
$headers->{'private-token'} = $self->private_token()
if defined $self->private_token();
$headers->{'sudo'} = $self->sudo_user()
if defined $self->sudo_user();
return $headers;
}
sub _clone_args {
my ($self) = @_;
return {
url => $self->url(),
retries => $self->retries(),
rest_client => $self->rest_client(),
(defined $self->access_token()) ? (access_token=>$self->access_token()) : (),
(defined $self->private_token()) ? (private_token=>$self->private_token()) : (),
};
}
sub _clone {
my $self = shift;
my $class = ref $self;
my $args = {
%{ $self->_clone_args() },
%{ $class->BUILDARGS( @_ ) },
};
return $class->new( $args );
}
# Little utility method that avoids any ambiguity in whether a closer is
# causing circular references. Don't ever pass it a ref.
sub _make_safe_closure {
my ($ret) = @_;
return sub{ $ret };
}
=head1 REQUIRED ARGUMENTS
=head2 url
The URL to your v4 API endpoint. Typically this will be something
like C<https://git.example.com/api/v4>.
=cut
has url => (
is => 'ro',
isa => NonEmptySimpleStr,
required => 1,
);
=head1 OPTIONAL ARGUMENTS
=head2 access_token
A GitLab API OAuth2 token. If set then L</private_token> may not be set.
See L<https://docs.gitlab.com/ce/api/#oauth2-tokens>.
=cut
has _access_token_arg => (
is => 'ro',
isa => NonEmptySimpleStr,
init_arg => 'access_token',
clearer => '_clear_access_token_arg',
);
has _access_token_closure => (
is => 'lazy',
isa => CodeRef,
init_arg => undef,
builder => '_build_access_token_closure',
);
sub _build_access_token_closure {
my ($self) = @_;
my $token = $self->_access_token_arg();
$self->_clear_access_token_arg();
return _make_safe_closure( $token );
}
sub access_token {
my ($self) = @_;
return $self->_access_token_closure->();
}
=head2 private_token
A GitLab API personal token. If set then L</access_token> may not be set.
See L<https://docs.gitlab.com/ce/api/#personal-access-tokens>.
=cut
has _private_token_arg => (
is => 'ro',
isa => NonEmptySimpleStr,
init_arg => 'private_token',
clearer => '_clear_private_token_arg',
);
( run in 0.598 second using v1.01-cache-2.11-cpan-39bf76dae61 )