summaryrefslogtreecommitdiffstats
path: root/lib/App/ArchLinux/PackagerTools/Archweb.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/App/ArchLinux/PackagerTools/Archweb.pm')
-rw-r--r--lib/App/ArchLinux/PackagerTools/Archweb.pm86
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__