summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2010-07-11 22:44:16 +0100
committerdakkar <dakkar@thenautilus.net>2010-07-11 22:44:16 +0100
commit2a1c8d80336a93bdf5b89008917947b4ca912f27 (patch)
tree773f54cf2066fcbd0684b1872709d35d02f2fda8 /lib
parenttest for TT::Thread->master (diff)
downloadThread-Task-2a1c8d80336a93bdf5b89008917947b4ca912f27.tar.gz
Thread-Task-2a1c8d80336a93bdf5b89008917947b4ca912f27.tar.bz2
Thread-Task-2a1c8d80336a93bdf5b89008917947b4ca912f27.zip
test for TT::Handle
Diffstat (limited to 'lib')
-rw-r--r--lib/Thread/Task.pm28
-rw-r--r--lib/Thread/Task/Handle.pm8
-rw-r--r--lib/Thread/Task/Manager.pm2
-rw-r--r--lib/Thread/Task/Types.pm6
4 files changed, 26 insertions, 18 deletions
diff --git a/lib/Thread/Task.pm b/lib/Thread/Task.pm
index 35976c6..86a1387 100644
--- a/lib/Thread/Task.pm
+++ b/lib/Thread/Task.pm
@@ -2,8 +2,9 @@ use 5.008003;
use MooseX::Declare;
class Thread::Task {
- use MooseX::Types::Moose qw(ClassName Str Int);
- use Thread::Task::Types qw(Handle_T Task_T);
+ use MooseX::Types::Moose qw(ClassName Str Int HashRef);
+ use Thread::Task::Types qw(Handle_T Task_T TaskRev_T);
+ use Moose::Util::TypeConstraints;
require Storable;
@@ -18,9 +19,15 @@ class Thread::Task {
is => 'ro',
weak_ref => 1,
required => 0,
+ init_arg => 'owner',
predicate => '_has_owner_taskrev',
);
+ coerce TaskRev_T, from Task_T,
+ via {
+ $_->task_revision;
+ };
+
has callback => (
isa => Str,
is => 'ro',
@@ -36,16 +43,7 @@ class Thread::Task {
clearer => 'clear_handle',
);
- around BUILDARGS(ClassName $class: @rest) {
- my $params = $class->$orig(@rest);
-
- if (exists $params->{owner}) {
- $params->{_owner_taskrev} =
- delete($params->{owner})->task_revision;
- }
- }
-
- method BUILD() {
+ method BUILD(HashRef $params) {
if ($self->_has_owner_taskrev) {
my $owner = $self->owner;
my $callback = $self->callback;
@@ -91,12 +89,12 @@ class Thread::Task {
}
method from_string(ClassName $class: Str $serialization) {
- my $self=Storable::nthaw($serialization);
- my $self_class=$self->meta->name;
+ my $new_self=Storable::thaw($serialization);
+ my $self_class=$new_self->meta->name;
unless ($self_class eq $class) {
die "Deserialized as $self_class instead of $class";
}
- return $self;
+ return $new_self;
}
method _update(Task_T $new_task) {
diff --git a/lib/Thread/Task/Handle.pm b/lib/Thread/Task/Handle.pm
index 5dfcd40..5cb2eed 100644
--- a/lib/Thread/Task/Handle.pm
+++ b/lib/Thread/Task/Handle.pm
@@ -7,6 +7,7 @@ class Thread::Task::Handle {
use MooseX::Types::Moose qw(ClassName Int ArrayRef);
use Thread::Task::Types qw(Handle_T Worker_T Task_T Finished_ET);
use Thread::Task::Exception::Finished;
+ use MooseX::MultiMethods;
require Scalar::Util;
@@ -16,7 +17,6 @@ class Thread::Task::Handle {
isa => Int,
is => 'ro',
default => sub { ++$SEQUENCE },
- init_arg => undef,
);
has task => (
@@ -32,6 +32,10 @@ class Thread::Task::Handle {
init_arg => undef,
);
+ multi method BUILDARGS(ClassName $class: Task_T $task) {
+ return $class->next::method({task=>$task});
+ }
+
method prepare() {
try {
$self->task->prepare;
@@ -86,7 +90,7 @@ class Thread::Task::Handle {
return $class->new(
hid=>$hid,
- task=>Thread::Task->from_string($task_serialized),
+ task=>$task_class->from_string($task_serialized),
);
}
diff --git a/lib/Thread/Task/Manager.pm b/lib/Thread/Task/Manager.pm
index f94aba6..1410799 100644
--- a/lib/Thread/Task/Manager.pm
+++ b/lib/Thread/Task/Manager.pm
@@ -183,7 +183,7 @@ class Thread::Task::Manager {
method on_signal(Str $frozen) {
my $message;
try {
- $message = Storable::nthaw($frozen);
+ $message = Storable::thaw($frozen);
}
catch {
return;
diff --git a/lib/Thread/Task/Types.pm b/lib/Thread/Task/Types.pm
index 8a4d044..9ee87ed 100644
--- a/lib/Thread/Task/Types.pm
+++ b/lib/Thread/Task/Types.pm
@@ -5,15 +5,21 @@ use MooseX::Types
Handle_T
Worker_T
Task_T
+ TaskRev_T
+ Manager_T
Conduit_T
Finished_ET
Queue_T
Queue_Ev_T
)];
+use MooseX::Types::Moose qw(Int);
class_type Handle_T, { class => 'Thread::Task::Handle' };
class_type Worker_T, { class => 'Thread::Task::Worker' };
class_type Task_T, { class => 'Thread::Task' };
+class_type Manager_T, { class => 'Thread::Task::Manager' };
+
+subtype TaskRev_T, as Int;
role_type Conduit_T, { role => 'Thread::Task::Role::Conduit' };