diff options
Diffstat (limited to 'lib/App/ArchLinux/PackagerTools/Archweb.pm')
-rw-r--r-- | lib/App/ArchLinux/PackagerTools/Archweb.pm | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/lib/App/ArchLinux/PackagerTools/Archweb.pm b/lib/App/ArchLinux/PackagerTools/Archweb.pm new file mode 100644 index 0000000..5f3bcfa --- /dev/null +++ b/lib/App/ArchLinux/PackagerTools/Archweb.pm @@ -0,0 +1,86 @@ +package App::ArchLinux::PackagerTools::Archweb; +use strictures; + +use autodie; +use Function::Parameters; +use Log::Any qw($log); +use WWW::JSON; + +use App::ArchLinux::PackagerTools::Cache; +use App::ArchLinux::PackagerTools::Config; + +=head1 NAME + +App::ArchLinux::PackagerTools::Archweb - ShortDesc + +=head1 SYNOPSIS + +use App::ArchLinux::PackagerTools::Archweb; + +# synopsis... + +=head1 DESCRIPTION + +# longer description... + +=head1 METHODS + +=head2 new + + my $archweb = App::ArchLinux::PackagerTools::Archweb->new(); + +Returns a new instance. + +=cut + +method new($class: $context, $deps = {}) { + $deps->{config} //= App::ArchLinux::PackagerTools::Config->new($context); + $deps->{cache} //= App::ArchLinux::PackagerTools::Cache->new($context); + + my $base_url = $deps->{config}->get_config()->{archweb}->{base_url}; + $deps->{wj} //= WWW::JSON->new(base_url => $base_url); + + return $class->new_no_defaults($context, $deps); +} + +method new_no_defaults($class: $context, $deps = {}) { + return $context->{$class} if defined $context->{$class}; + + my $self = {}; + bless $self, $class; + $self->{deps} = $deps; + $context->{$class} = $self; + return $self; +} + +=head2 Public Methods + +=cut + +=head3 get_maintainers + + my $maintainers = $archweb->get_maintainers($pkgname); + print $maintainers->[0]->{name}; + +Return a list with the names of the maintainers of a package. + +=cut + +method get_maintainers($pkgname) { + my $cache_timeout = $self->{deps}->{config}->{archweb}->{cache_timeout}; + my $json = $self->{deps}->{cache}->compute("archweb-package-json-$pkgname", $cache_timeout, sub { + $log->debugf("Gettings maintainers for pkgname: %s", $pkgname); + my $res = $self->{deps}->{wj}->get("/packages/search/json", {name => $pkgname}); + my $json = $res->res; + croak $log->errorf("API returned no result for search for package %s", $pkgname) if $json->{results}->@* == 0 or !$res->success; + $log->debugf("Result is %s", $json); + return $json; + }); + my $maintainers = $json->{results}->[0]->{maintainers}; + $log->debugf("Found maintainers: %s", $maintainers); + return [map {name => $_}, $maintainers->@*]; +} + +1; + +__END__ |