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