Debian-Snapshot
view release on metacpan or search on metacpan
lib/Debian/Snapshot.pm view on Meta::CPAN
package Debian::Snapshot;
BEGIN {
$Debian::Snapshot::VERSION = '0.003';
}
# ABSTRACT: interface to snapshot.debian.org
use Any::Moose;
use Debian::Snapshot::Package;
use JSON ();
use LWP::UserAgent;
has 'user_agent' => (
is => 'rw',
isa => 'LWP::UserAgent',
lazy => 1,
builder => '_build_user_agent',
);
has 'url' => (
is => 'rw',
isa => 'Str',
default => 'http://snapshot.debian.org',
);
sub _build_user_agent {
my $ua = LWP::UserAgent->new;
$ua->agent("Debian-Snapshot/$Debian::Snapshot::VERSION ");
$ua->env_proxy;
return $ua;
}
sub _get {
my $self = shift;
my $url = shift;
$url = $self->url . $url;
my $response = $self->user_agent->get($url, @_);
die $response->status_line unless $response->is_success;
return $response->decoded_content;
}
sub _get_json {
my $self = shift;
my $json = $self->_get(@_);
return JSON::decode_json($json);
}
sub binaries {
my ($self, $name, $version) = @_;
my $json = $self->_get_json("/mr/binary/$name/");
my @binaries = map $self->package($_->{source}, $_->{version})
->binary($_->{name}, $_->{binary_version}),
@{ $json->{result} };
if (defined $version) {
$version = qr/^\Q$version\E$/ unless ref($version) eq 'Regexp';
@binaries = grep $_->binary_version =~ $version, @binaries;
}
return \@binaries;
}
sub file {
my ($self, $hash) = @_;
Debian::Snapshot::File->new(
hash => $hash,
_service => $self,
);
}
sub package {
my ($self, $package, $version) = @_;
return Debian::Snapshot::Package->new(
_service => $self,
package => $package,
version => $version,
);
}
sub packages {
my ($self) = @_;
my $json = $self->_get_json("/mr/package/");
my @package = map $_->{package}, @{ $json->{result} };
return \@package;
}
sub package_versions {
my ($self, $package) = @_;
my $json = $self->_get_json("/mr/package/$package/");
my @versions = map $_->{version}, @{ $json->{result} };
return \@versions;
}
no Any::Moose;
( run in 0.522 second using v1.01-cache-2.11-cpan-f56aa216473 )