Google-CloudTasks
view release on metacpan or search on metacpan
lib/Google/CloudTasks/Client.pm view on Meta::CPAN
package Google::CloudTasks::Client;
use Mouse;
use WWW::Google::Cloud::Auth::ServiceAccount;
use LWP::UserAgent;
use HTTP::Request;
use URI;
use URI::QueryParam;
use JSON::XS;
our $VERSION = "0.01";
has base_url => (
is => 'ro',
isa => 'Str',
default => 'https://cloudtasks.googleapis.com/',
);
has version => (
is => 'ro',
isa => 'Str',
default => 'v2',
);
has credentials_path => (
is => 'ro',
isa => 'Str'
);
has auth => (
is => 'ro',
lazy_build => 1,
);
has ua => (
is => 'ro',
lazy => 1,
default => sub { LWP::UserAgent->new() },
);
has is_debug => (
is => 'ro',
isa => 'Bool',
default => 0,
);
no Mouse;
__PACKAGE__->meta->make_immutable;
sub _build_auth {
my ($self) = @_;
if (!$self->credentials_path) {
die "attribute 'credentials_path' is required";
}
my $auth = WWW::Google::Cloud::Auth::ServiceAccount->new(
credentials_path => $self->credentials_path,
);
return $auth;
}
sub request {
my ($self, $method, $path, $content) = @_;
my $url = $self->base_url . $self->version . '/' . $path;
my $req = HTTP::Request->new($method, $url);
$req->header('Content-Type' => 'application/json; charset=utf8');
$req->header('Authorization' => 'Bearer ' . $self->auth->get_token);
if ($content) {
my $encoded_body = encode_json($content);
$req->header('Content-Length' => length($encoded_body));
$req->content($encoded_body);
}
if ($self->is_debug) {
use Data::Dumper;
print "Request : " . Dumper($req);
}
my $res = $self->ua->request($req);
if ($res->is_success) {
return decode_json($res->content);
}
else {
die "Fail: " . $res->content;
}
}
sub request_get {
my ($self, $path) = @_;
return $self->request(GET => $path);
}
sub request_post {
my ($self, $path, $content) = @_;
$content //= {};
return $self->request(POST => $path, $content);
}
sub request_delete {
my ($self, $path) = @_;
return $self->request(DELETE => $path);
}
sub request_patch {
my ($self, $path, $content) = @_;
return $self->request(PATCH => $path, $content);
}
sub _make_query_param {
my ($args, @keys) = @_;
my $u = URI->new();
for (@keys) {
if (defined $args->{$_}) {
$u->query_param($_ => $args->{$_});
( run in 0.548 second using v1.01-cache-2.11-cpan-39bf76dae61 )