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__