summaryrefslogtreecommitdiff
path: root/lib/Thread/Task.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Thread/Task.pm')
-rw-r--r--lib/Thread/Task.pm28
1 files changed, 13 insertions, 15 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) {