AnyEvent-WebService-Tracks
view release on metacpan or search on metacpan
lib/AnyEvent/WebService/Tracks.pm view on Meta::CPAN
}
} else {
%params = @_;
}
if(my $context = delete $params{'context'}) {
unless(ref($context) eq 'AnyEvent::WebService::Tracks::Context') {
croak "Parameter 'context' is not an AnyEvent::WebService::Tracks::Context";
}
$params{'context_id'} = $context->id;
}
if(my $project = delete $params{'project'}) {
unless(ref($project) eq 'AnyEvent::WebService::Tracks::Project') {
croak "Parameter 'project' is not an AnyEvent::WebService::Tracks::Project";
}
$params{'project_id'} = $project->id;
# naughty...violation of privacy
if(! exists($params{'context_id'}) && defined($project->{'default_context_id'})) {
$params{'context_id'} = $project->{'default_context_id'};
}
}
unless(exists $params{'context_id'} || exists $params{'project_id'}) {
croak "Required parameters 'context' and 'project' not found; you must specify at least one of them";
}
if(my $project = delete $params{'project'}) {
unless(ref($project) eq 'AnyEvent::WebService::Tracks::Project') {
croak "Parameter 'project' is not an AnyEvent::WebService::Tracks::Project";
}
$params{'project_id'} = $project->id;
}
$self->create('todos', 'AnyEvent::WebService::Tracks::Todo',
todo => \%params, $cb);
}
1;
__END__
=head1 NAME
AnyEvent::WebService::Tracks - Access Tracks' API from AnyEvent
=head1 VERSION
0.02
=head1 SYNOPSIS
use AnyEvent::WebService::Tracks;
my $tracks = AnyEvent::WebService::Tracks->new(
url => 'http://my.tracks.instance/',
username => 'user',
password => 'pa55w0rd',
);
$tracks->projects(sub {
my ( $projects ) = @_;
say foreach @$projects;
});
AnyEvent->condvar->recv;
=head1 DESCRIPTION
AnyEvent::WebService::Tracks talks to Tracks' API from an AnyEvent loop, using
AnyEvent::HTTP.
Before you go ahead and use this module, please make sure you run the test suite
against the Tracks version you'll be using; I developed this module against Tracks
1.7.2, so I can't really guarantee it'll work with any other version. If you find
a bug when running against another version, please let me know and I'll try to fix
it as long as it doesn't break other versions.
=head1 METHODS
=head2 AnyEvent::WebService::Tracks->new(%params)
Creates a new AnyEvent::WebService::Tracks object. C<%params> must contain
the url, username, and password parameters.
=head2 $tracks->projects($callback)
Retrieves the list of projects in the given Tracks installation and provides
them to the given callback. If the call fails, then a falsy value and the
error message are provided to the callback.
=head2 $tracks->create_project($name, $callback)
=head2 $tracks->create_project(%params, $callback)
Creates a new project with the given name (a hash of parameters can be
provided instead of just a scalar name if more flexibility is desired) and
passes the new project object to the given callback. If the call fails, then
a falsy value and the error message are provided to the callback.
=head2 $tracks->contexts($callback)
Retrieves the list of contexts in the given Tracks installation and provides
them to the given callback. If the call fails, then a falsy value and the
error message are provided to the callback.
=head2 $tracks->create_context($name, $callback)
=head2 $tracks->create_context(%params, $callback)
Creates a new context with the given name (a hash of parameters can be
provided instead of just a scalar name if more flexibility is desired) and
passes the new context object to the given callback. If the call fails, then
a falsy value and the error message are provided to the callback.
=head2 $tracks->todos($callback)
Retrieves the list of todos in the given Tracks installation and provides
them to the given callback. If the call fails, then a falsy value and the
error message are provided to the callback.
=head2 $tracks->create_todo($name, $context, $callback)
=head2 $tracks->create_todo(%params, $callback)
Creates a new todo with the given name and context (a hash of parameters can
( run in 0.907 second using v1.01-cache-2.11-cpan-483215c6ad5 )