X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FClass.pm;h=20893956b9503c685bdc7f45760a8f53c0f3644e;hb=4b7538e78407d5c3cdb60791fd8ff8a29948f14e;hp=9975650bd7f495d7ad4a33ee7a346eb6e0c3a2dc;hpb=8b1d510fd5c3d348d11dcbe07f313f43e4ac647f;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Class.pm b/lib/Moose/Meta/Class.pm index 9975650..2089395 100644 --- a/lib/Moose/Meta/Class.pm +++ b/lib/Moose/Meta/Class.pm @@ -60,11 +60,12 @@ sub create { (ref $options{roles} eq 'ARRAY') || $self->throw_error("You must pass an ARRAY ref of roles", data => $options{roles}) if exists $options{roles}; + my $roles = delete $options{roles}; my $class = $self->SUPER::create($package_name, %options); - if (exists $options{roles}) { - Moose::Util::apply_all_roles($class, @{$options{roles}}); + if ($roles) { + Moose::Util::apply_all_roles( $class, @$roles ); } return $class; @@ -151,33 +152,31 @@ sub excludes_role { } sub new_object { - my $class = shift; + my $class = shift; my $params = @_ == 1 ? $_[0] : {@_}; - my $self = $class->SUPER::new_object($params); - foreach my $attr ($class->compute_all_applicable_attributes()) { - # if we have a trigger, then ... - if ($attr->can('has_trigger') && $attr->has_trigger) { - # make sure we have an init-arg ... - if (defined(my $init_arg = $attr->init_arg)) { - # now make sure an init-arg was passes ... - if (exists $params->{$init_arg}) { - # and if get here, fire the trigger - $attr->trigger->( - $self, - # check if there is a coercion - ($attr->should_coerce - # and if so, we need to grab the - # value that is actually been stored - ? $attr->get_read_method_ref->($self) - # otherwise, just get the value from - # the constructor params - : $params->{$init_arg}), - $attr - ); - } - } - } + my $self = $class->SUPER::new_object($params); + + foreach my $attr ( $class->compute_all_applicable_attributes() ) { + + next unless $attr->can('has_trigger') && $attr->has_trigger; + + my $init_arg = $attr->init_arg; + + next unless defined $init_arg; + + next unless exists $params->{$init_arg}; + + $attr->trigger->( + $self, + ( + $attr->should_coerce + ? $attr->get_read_method_ref->($self) + : $params->{$init_arg} + ), + $attr + ); } + return $self; }