view release on metacpan or search on metacpan
lib/AnyEvent/WebService/Tracks/Context.pm view on Meta::CPAN
package AnyEvent::WebService::Tracks::Context;
use strict;
use warnings;
use parent 'AnyEvent::WebService::Tracks::Resource';
our $VERSION = '0.02';
__PACKAGE__->readonly(qw/created_at id updated_at/);
__PACKAGE__->accessor(qw/name position/);
sub resource_path {
return 'contexts';
}
sub xml_root {
return 'context';
}
lib/AnyEvent/WebService/Tracks/Context.pm view on Meta::CPAN
=head1 READ-ONLY ATTRIBUTES
=head2 created_at
When the context was created.
=head2 id
The ID of the context in Tracks.
=head2 updated_at
When the context was last updated.
=head1 WRITABLE ATTRIBUTES
=head2 name
The name of the context (must be unique).
=head2 position
The position of this context in the list of displayed contexts.
lib/AnyEvent/WebService/Tracks/Project.pm view on Meta::CPAN
use strict;
use warnings;
use parent 'AnyEvent::WebService::Tracks::Resource';
use Carp qw(croak);
use namespace::clean;
our $VERSION = '0.02';
__PACKAGE__->readonly(qw/completed_at created_at id updated_at/);
__PACKAGE__->accessor(qw/description name position/);
# here, but not actually accessible: default_context_id state
sub resource_path {
return 'projects';
}
sub xml_root {
return 'project';
lib/AnyEvent/WebService/Tracks/Project.pm view on Meta::CPAN
When the project was completed.
=head2 created_at
When the project was created.
=head2 id
The Tracks ID of this project.
=head2 updated_at
When the project was last updated.
=head2 is_complete
Whether or not the project is complete.
=head2 is_active
Whether or not the project is complete.
=head2 is_hidden
lib/AnyEvent/WebService/Tracks/Todo.pm view on Meta::CPAN
use warnings;
use parent 'AnyEvent::WebService::Tracks::Resource';
use Carp qw(croak);
use Scalar::Util qw(looks_like_number);
use namespace::clean;
our $VERSION = '0.02';
__PACKAGE__->readonly(qw/completed_at created_at id recurring_todo_id updated_at/);
__PACKAGE__->accessor(qw/description due notes show_from/);
# here, but not actually accessible: context_id project_id state
sub resource_path {
return 'todos';
}
sub xml_root {
return 'todo';
lib/AnyEvent/WebService/Tracks/Todo.pm view on Meta::CPAN
When the todo was created.
=head2 id
The Tracks ID of this todo item.
=head2 recurring_todo_id
Unused by this library for now.
=head2 updated_at
When the todo was last updated.
=head2 is_complete
Whether or not the todo item is complete.
=head2 is_active
Whether or not the todo item is active.
=head2 is_project_hidden
t/02-context.t view on Meta::CPAN
my $name = shift @contexts;
$tracks->create_context($name, sub {
my ( $ctx ) = @_;
ok($ctx);
isa_ok($ctx, 'AnyEvent::WebService::Tracks::Context');
is($ctx->name, $name);
ok(looks_like_number $ctx->id);
isa_ok($ctx->created_at, 'DateTime');
isa_ok($ctx->updated_at, 'DateTime');
ok(looks_like_number $ctx->position);
ok(! $ctx->is_hidden);
dies_ok {
$ctx->id(0);
};
lives_ok {
$ctx->name('New Name');
};
dies_ok {
$ctx->created_at(DateTime->now);
};
dies_ok {
$ctx->updated_at(DateTime->now);
};
lives_ok {
$ctx->position(1);
};
lives_ok {
$ctx->hide;
};
lives_ok {
$ctx->unhide;
};
t/02-context.t view on Meta::CPAN
my $name = shift @contexts;
$tracks->create_context(name => $name, sub {
my ( $ctx ) = @_;
ok($ctx);
isa_ok($ctx, 'AnyEvent::WebService::Tracks::Context');
is($ctx->name, $name);
ok(looks_like_number $ctx->id);
isa_ok($ctx->created_at, 'DateTime');
isa_ok($ctx->updated_at, 'DateTime');
ok(looks_like_number $ctx->position);
ok(! $ctx->is_hidden);
dies_ok {
$ctx->id(0);
};
lives_ok {
$ctx->name('New Name');
};
dies_ok {
$ctx->created_at(DateTime->now);
};
dies_ok {
$ctx->updated_at(DateTime->now);
};
lives_ok {
$ctx->position(1);
};
lives_ok {
$ctx->hide;
};
lives_ok {
$ctx->unhide;
};
t/02-context.t view on Meta::CPAN
my $name = shift @contexts;
$tracks->create_context(name => $name, hide => 1, sub {
my ( $ctx ) = @_;
ok($ctx);
isa_ok($ctx, 'AnyEvent::WebService::Tracks::Context');
is($ctx->name, $name);
ok(looks_like_number $ctx->id);
isa_ok($ctx->created_at, 'DateTime');
isa_ok($ctx->updated_at, 'DateTime');
ok(looks_like_number $ctx->position);
ok($ctx->is_hidden);
dies_ok {
$ctx->id(0);
};
lives_ok {
$ctx->name('New Name');
};
dies_ok {
$ctx->created_at(DateTime->now);
};
dies_ok {
$ctx->updated_at(DateTime->now);
};
lives_ok {
$ctx->position(1);
};
lives_ok {
$ctx->hide;
};
lives_ok {
$ctx->unhide;
};
t/02-context.t view on Meta::CPAN
my ( $cond ) = @_;
$tracks->contexts(sub {
my ( $contexts ) = @_;
my ( $one ) = @$contexts;
$one->name('Not one');
$one->position(4);
$one->unhide;
my $updated_at = $one->updated_at;
my $timer;
$timer = AnyEvent->timer(
after => 2,
cb => sub {
undef $timer;
$one->update(sub {
my ( $ctx ) = @_;
ok($ctx);
is($ctx->name, 'Not one');
is($ctx->position, 4);
ok(! $ctx->is_hidden);
ok($ctx->updated_at > $updated_at);
$cond->send;
});
},
);
});
};
run_tests_in_loop {
my ( $cond ) = @_;
t/02-context.t view on Meta::CPAN
dies_ok {
$one->name;
};
dies_ok {
$one->id;
};
dies_ok {
$one->created_at;
};
dies_ok {
$one->updated_at;
};
dies_ok {
$one->position;
};
dies_ok {
$one->is_hidden;
};
dies_ok {
$one->name('New Name');
t/03-project.t view on Meta::CPAN
isa_ok($proj, 'AnyEvent::WebService::Tracks::Project');
is($proj->name, $name);
ok(! defined($proj->description));
ok(looks_like_number $proj->position);
ok(! defined($proj->completed_at));
ok(! $proj->is_complete);
ok(! $proj->is_hidden);
ok($proj->is_active);
isa_ok($proj->created_at, 'DateTime');
isa_ok($proj->updated_at, 'DateTime');
dies_ok {
$proj->completed_at(DateTime->now);
};
dies_ok {
$proj->created_at(DateTime->now);
};
dies_ok {
$proj->id(0);
};
dies_ok {
$proj->updated_at(DateTime->now);
};
lives_ok {
$proj->description('Phony description');
};
lives_ok {
$proj->name('Another name');
};
lives_ok {
$proj->position(4);
t/03-project.t view on Meta::CPAN
isa_ok($proj, 'AnyEvent::WebService::Tracks::Project');
is($proj->name, $name);
ok(! defined($proj->description));
ok(looks_like_number $proj->id);
ok(looks_like_number $proj->position);
ok(! defined($proj->completed_at));
ok(! $proj->is_complete);
ok(! $proj->is_hidden);
ok($proj->is_active);
isa_ok($proj->created_at, 'DateTime');
isa_ok($proj->updated_at, 'DateTime');
dies_ok {
$proj->completed_at(DateTime->now);
};
dies_ok {
$proj->created_at(DateTime->now);
};
dies_ok {
$proj->id(0);
};
dies_ok {
$proj->updated_at(DateTime->now);
};
lives_ok {
$proj->description('Phony description');
};
lives_ok {
$proj->name('Another name');
};
lives_ok {
$proj->position(4);
t/03-project.t view on Meta::CPAN
ok($proj);
isa_ok($proj, 'AnyEvent::WebService::Tracks::Project');
is($proj->name, $name);
is($proj->description, $desc);
ok(looks_like_number $proj->position);
ok(! defined($proj->completed_at));
ok(! $proj->is_complete);
ok(! $proj->is_hidden);
ok($proj->is_active);
isa_ok($proj->created_at, 'DateTime');
isa_ok($proj->updated_at, 'DateTime');
dies_ok {
$proj->completed_at(DateTime->now);
};
dies_ok {
$proj->created_at(DateTime->now);
};
dies_ok {
$proj->id(0);
};
dies_ok {
$proj->updated_at(DateTime->now);
};
lives_ok {
$proj->description('Phony description');
};
lives_ok {
$proj->description('Another name');
};
lives_ok {
$proj->position(4);
t/03-project.t view on Meta::CPAN
my ( $cond ) = @_;
$tracks->projects(sub {
my ( $projects ) = @_;
my ( $one ) = @$projects;
$one->name('Not one');
$one->description('A different description');
$one->position(3);
my $updated_at = $one->updated_at;
my $timer;
$timer = AnyEvent->timer(
after => 2,
cb => sub {
undef $timer;
$one->update(sub {
my ( $proj ) = @_;
ok($proj);
is($proj->name, 'Not one');
is($proj->description, 'A different description');
is($proj->position, 3);
ok($proj->updated_at > $updated_at);
$cond->send;
});
},
);
});
};
run_tests_in_loop {
my ( $cond ) = @_;
t/03-project.t view on Meta::CPAN
dies_ok {
$one->completed_at;
};
dies_ok {
$one->created_at;
};
dies_ok {
$one->id;
};
dies_ok {
$one->updated_at;
};
dies_ok {
$one->is_complete;
};
dies_ok {
$one->is_hidden;
};
dies_ok {
$one->is_active;
};
t/04-todo.t view on Meta::CPAN
ok(! defined($todo->notes));
ok(! defined($todo->show_from));
ok($todo->is_active);
ok(! $todo->is_project_hidden);
ok(! $todo->is_complete);
ok(! $todo->is_deferred);
ok(looks_like_number $todo->id);
ok(! $todo->completed_at);
ok(! $todo->recurring_todo_id);
isa_ok($todo->created_at, 'DateTime');
isa_ok($todo->updated_at, 'DateTime');
dies_ok {
$todo->completed_at(DateTime->now);
};
dies_ok {
$todo->created_at(DateTime->now);
};
dies_ok {
$todo->updated_at(DateTime->now);
};
dies_ok {
$todo->id(0);
};
dies_ok {
$todo->recurring_todo_id(0);
};
lives_ok {
$todo->description('Test description');
t/04-todo.t view on Meta::CPAN
ok(! defined($todo->notes));
ok(! defined($todo->show_from));
ok($todo->is_active);
ok(! $todo->is_project_hidden);
ok(! $todo->is_complete);
ok(! $todo->is_deferred);
ok(looks_like_number $todo->id);
ok(! $todo->completed_at);
ok(! $todo->recurring_todo_id);
isa_ok($todo->created_at, 'DateTime');
isa_ok($todo->updated_at, 'DateTime');
dies_ok {
$todo->completed_at(DateTime->now);
};
dies_ok {
$todo->created_at(DateTime->now);
};
dies_ok {
$todo->updated_at(DateTime->now);
};
dies_ok {
$todo->id(0);
};
dies_ok {
$todo->recurring_todo_id(0);
};
lives_ok {
$todo->description('Test description');
t/04-todo.t view on Meta::CPAN
ok(! defined($todo->due));
ok(! defined($todo->show_from));
ok($todo->is_active);
ok(! $todo->is_project_hidden);
ok(! $todo->is_complete);
ok(! $todo->is_deferred);
ok(looks_like_number $todo->id);
ok(! $todo->completed_at);
ok(! $todo->recurring_todo_id);
isa_ok($todo->created_at, 'DateTime');
isa_ok($todo->updated_at, 'DateTime');
dies_ok {
$todo->completed_at(DateTime->now);
};
dies_ok {
$todo->created_at(DateTime->now);
};
dies_ok {
$todo->updated_at(DateTime->now);
};
dies_ok {
$todo->id(0);
};
dies_ok {
$todo->recurring_todo_id(0);
};
lives_ok {
$todo->description('Test description');
t/04-todo.t view on Meta::CPAN
dies_ok {
$one->completed_at;
};
dies_ok {
$one->recurring_todo_id;
};
dies_ok {
$one->created_at;
};
dies_ok {
$one->updated_at;
};
dies_ok {
$one->context(sub {
fail("I shouldn't get called!");
});
};
dies_ok {
$one->project(sub {
fail("I shouldn't get called!");
});
t/04-todo.t view on Meta::CPAN
$tracks->create_todo('Foobar 2', $ctx, sub {
my ( $todo ) = @_;
# we do this to make sure the update time is in the future
my $timer;
$timer = AnyEvent->timer(
after => 1,
cb => sub {
undef $timer;
my $old_updated = $todo->updated_at;
$todo->description('Foobar 23');
$todo->notes('Some notes!');
is($todo->description, 'Foobar 23');
is($todo->notes, 'Some notes!');
$todo->update(sub {
my ( $todo2 ) = @_;
is($todo2, $todo);
is($todo2->description, 'Foobar 23');
is($todo2->notes, 'Some notes!');
isnt($todo2->updated_at, $old_updated);
ok($todo2->updated_at > $old_updated);
$cond->send;
});
},
);
});
};
run_tests_in_loop {
my ( $cond ) = @_;