AnyEvent-WebService-Tracks

 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 ) = @_;



( run in 0.683 second using v1.01-cache-2.11-cpan-0a6323c29d9 )