X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FObject.pm;h=dcb859018dccf16359d766ad3b51d68d8abfffc4;hb=b17094cee3a42ff2669ee90b8393542de142633d;hp=1dd548152e783e0d11b01ad4faf63e9e7e7e3bb2;hpb=1be61030b949daee746b57e7135202c27eeb1c2f;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Object.pm b/lib/Mouse/Object.pm index 1dd5481..dcb8590 100644 --- a/lib/Mouse/Object.pm +++ b/lib/Mouse/Object.pm @@ -4,7 +4,7 @@ use strict; use warnings; use MRO::Compat; -use Scalar::Util 'blessed'; +use Scalar::Util qw/blessed weaken/; use Carp 'confess'; sub new { @@ -17,27 +17,29 @@ sub new { my $default; if (!exists($args{$key})) { - if (exists($attribute->{default}) || exists($attribute->{builder})) { - unless ($attribute->{lazy}) { - my $builder = $attribute->{builder}; - my $default = exists($attribute->{builder}) - ? $instance->$builder - : ref($attribute->{default}) eq 'CODE' - ? $attribute->{default}->() - : $attribute->{default}; - - $attribute->verify_type_constraint($default) + if ($attribute->has_default || $attribute->has_builder) { + my $default = $attribute->default; + + unless ($attribute->is_lazy) { + my $builder = $attribute->builder; + my $value = $attribute->has_builder + ? $instance->$builder + : ref($default) eq 'CODE' + ? $default->() + : $default; + + $attribute->verify_type_constraint($value) if $attribute->has_type_constraint; - $instance->{$key} = $default; + $instance->{$key} = $value; - Scalar::Util::weaken($instance->{$key}) - if $attribute->{weak_ref}; + weaken($instance->{$key}) + if $attribute->weak_ref; } } else { - if ($attribute->{required}) { - confess "Attribute '$attribute->{name}' is required"; + if ($attribute->is_required) { + confess "Attribute '".$attribute->name."' is required"; } } } @@ -48,11 +50,11 @@ sub new { $instance->{$key} = $args{$key}; - Scalar::Util::weaken($instance->{$key}) - if $attribute->{weak_ref}; + weaken($instance->{$key}) + if $attribute->weak_ref; - if ($attribute->{trigger}) { - $attribute->{trigger}->($instance, $args{$key}, $attribute); + if ($attribute->has_trigger) { + $attribute->trigger->($instance, $args{$key}, $attribute); } } }