API-Assembla
view release on metacpan or search on metacpan
lib/API/Assembla.pm view on Meta::CPAN
package API::Assembla;
BEGIN {
$API::Assembla::VERSION = '0.03';
}
use Moose;
use DateTime::Format::ISO8601;
use LWP::UserAgent;
use URI;
use XML::XPath;
use API::Assembla::Space;
use API::Assembla::Ticket;
# ABSTRACT: Access to Assembla API via Perl.
has '_client' => (
is => 'ro',
isa => 'LWP::UserAgent',
lazy => 1,
default => sub {
my $self = shift;
return LWP::UserAgent->new;
}
);
has 'password' => (
is => 'ro',
isa => 'Str',
required => 1
);
has 'url' => (
is => 'ro',
isa => 'URI',
lazy => 1,
default => sub {
my $self = shift;
return URI->new('https://www.assembla.com/');
}
);
has 'username' => (
is => 'ro',
isa => 'Str',
required => 1
);
sub get_space {
my ($self, $id) = @_;
my $req = $self->make_req('/spaces/'.$id);
my $resp = $self->_client->request($req);
# print STDERR $resp->decoded_content;
my $xp = XML::XPath->new(xml => $resp->decoded_content);
my $space = $xp->find('/space')->pop;
my $name = $space->findvalue('name')."";
return API::Assembla::Space->new(
id => $space->findvalue('id').'',
created_at => DateTime::Format::ISO8601->parse_datetime($space->findvalue('created-at').''),
name => $name,
description => $space->findvalue('description').'',
);
}
sub get_spaces {
my ($self) = @_;
my $req = $self->make_req('/spaces/my_spaces');
my $resp = $self->_client->request($req);
# print STDERR $resp->decoded_content;
my $xp = XML::XPath->new(xml => $resp->decoded_content);
my $spaces = $xp->find('/spaces/space');
my %objects = ();
foreach my $space ($spaces->get_nodelist) {
my $name = $space->findvalue('name')."";
$objects{$name} = API::Assembla::Space->new(
id => $space->findvalue('id').'',
created_at => DateTime::Format::ISO8601->parse_datetime($space->findvalue('created-at').''),
name => $name,
description => $space->findvalue('description').'',
);
}
( run in 0.932 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )