WWW-PGXN
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/WWW/PGXN.pm view on Meta::CPAN
package WWW::PGXN;
use 5.010;
use strict;
use WWW::PGXN::Distribution;
use WWW::PGXN::Extension;
use WWW::PGXN::User;
use WWW::PGXN::Tag;
use WWW::PGXN::Mirror;
use HTTP::Tiny;
use URI::Template;
use JSON ();
use Carp;
our $VERSION = v0.13.0;
sub new {
my($class, %params) = @_;
my $self = bless {} => $class;
for my $key (qw(url proxy)) {
$self->$key($params{$key}) if exists $params{$key}
}
return $self;
}
sub get_distribution {
my ($self, $dist, $version) = @_;
my $data = $self->_fetch_json(
(defined $version ? 'meta' : 'dist'),
{ dist => lc $dist, version => lc($version || '') }
) or return;
WWW::PGXN::Distribution->new($self, $data);
}
sub get_extension {
my ($self, $ext) = @_;
my $data = $self->_fetch_json(extension => { extension => lc $ext })
or return;
WWW::PGXN::Extension->new($self, $data);
}
sub get_user {
my ($self, $user) = @_;
my $data = $self->_fetch_json(user => { user => lc $user }) or return;
WWW::PGXN::User->new($data);
}
sub get_tag {
my ($self, $tag) = @_;
my $data = $self->_fetch_json(tag => { tag => lc $tag }) or return;
WWW::PGXN::Tag->new($data);
}
sub get_stats {
my ($self, $name) = @_;
my $data = $self->_fetch_json(stats => { stats => lc $name }) or return;
}
sub get_userlist {
my ($self, $letter) = @_;
return undef unless $self->_uri_templates->{userlist};
return $self->_fetch_json(userlist => { letter => lc $letter }) || [];
}
my %valid_in = ( map { $_ => undef } qw(docs dists extensions users tags));
sub search {
my ($self, %params) = @_;
my $url = $self->url;
my $in = delete $params{in}
or croak 'Missing required "in" parameter to search()';
croak qq{Invalid "in" parameter to search(); Must be one of:\n}
. join("\n", map { "* $_" } sort keys %valid_in)
unless exists $valid_in{$in};
if ($url->scheme eq 'file') {
# Fetch it via PGXN::API::Searcher.
my $searcher = $self->{_searcher} ||= PGXN::API::Searcher->new(
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.107 second using v1.00-cache-2.02-grep-82fe00e-cpan-cec75d87357c )