X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FEmulate%2FClass%2FAccessor%2FFast.pm;h=c75cf309348839cb9b44ac3f7cda29d32352ae5b;hb=6b8ba79f1c7975eccdcc17212646d85b8f842dc2;hp=154aabf42a0d704bfe27fd3c6492e0610049452b;hpb=4905e2e3f957e66cfe7d0103f4c37f4b380103a6;p=gitmo%2FMooseX-Emulate-Class-Accessor-Fast.git diff --git a/lib/MooseX/Emulate/Class/Accessor/Fast.pm b/lib/MooseX/Emulate/Class/Accessor/Fast.pm index 154aabf..c75cf30 100644 --- a/lib/MooseX/Emulate/Class/Accessor/Fast.pm +++ b/lib/MooseX/Emulate/Class/Accessor/Fast.pm @@ -2,7 +2,7 @@ package MooseX::Emulate::Class::Accessor::Fast; use Moose::Role; -our $VERSION = '0.00100'; +our $VERSION = '0.00200'; =head1 NAME @@ -60,6 +60,28 @@ methods in L. Example =head1 METHODS +=head2 new %args + +Extend the default Moose constructor to emulate the behavior of C::A::F and +store arguments in the instance hashref. + +=cut + +around new => sub{ + my $orig = shift; + my $class = shift; + my %args; + if (scalar @_ == 1 && defined $_[0] && ref($_[0]) eq 'HASH') { + %args = %{$_[0]}; + } else { + %args = @_; + } + my $self = $class->$orig(@_); + my @extra = grep { !exists($self->{$_}) } keys %args; + @{$self}{@extra} = @args{@extra}; + return $self; +}; + =head2 mk_accessors @field_names Create read-write accessors. An attribute named C<$field_name> will be created.