X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FEmulate%2FClass%2FAccessor%2FFast.pm;h=d2e4ca341b50b1afc528cefc09cdd2ba7863b09f;hb=72ed17b84d08a24f7c9c411db23d5b62da64ced0;hp=120e4c649b98f6a9eaa89eac710e72e3891e960f;hpb=2a572db58d747c3c75bbf835c492d2ed04316dc4;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 120e4c6..d2e4ca3 100644 --- a/lib/MooseX/Emulate/Class/Accessor/Fast.pm +++ b/lib/MooseX/Emulate/Class/Accessor/Fast.pm @@ -6,7 +6,7 @@ use Scalar::Util (); use MooseX::Emulate::Class::Accessor::Fast::Meta::Accessor (); -our $VERSION = '0.00801'; +our $VERSION = '0.00901'; =head1 NAME @@ -23,9 +23,9 @@ MooseX::Emulate::Class::Accessor::Fast - Emulate Class::Accessor::Fast behavior #fields with readers and writers __PACKAGE__->mk_accessors(qw/field1 field2/); #fields with readers only - __PACKAGE__->mk_accessors(qw/field3 field4/); + __PACKAGE__->mk_ro_accessors(qw/field3 field4/); #fields with writers only - __PACKAGE__->mk_accessors(qw/field5 field6/); + __PACKAGE__->mk_wo_accessors(qw/field5 field6/); =head1 DESCRIPTION @@ -76,18 +76,17 @@ my $locate_metaclass = sub { || Moose::Meta::Class->initialize($class); }; -sub BUILD { +sub BUILD { } + +around 'BUILD' => sub { + my $orig = shift; my $self = shift; - my %args; - if (scalar @_ == 1 && defined $_[0] && ref($_[0]) eq 'HASH') { - %args = %{$_[0]}; - } elsif( scalar(@_) ) { - %args = @_; - } + my %args = %{ $_[0] }; + $self->$orig(\%args); my @extra = grep { !exists($self->{$_}) } keys %args; @{$self}{@extra} = @args{@extra}; return $self; -} +}; =head2 mk_accessors @field_names @@ -116,7 +115,7 @@ sub mk_accessors { #dont overwrite existing methods if($reader eq $writer){ - my %opts = ( $meta->has_method($reader) ? () : (accessor => $reader) ); + my %opts = ( $meta->has_method($reader) ? ( is => 'bare' ) : (accessor => $reader) ); my $attr = $meta->find_attribute_by_name($attr_name) || $meta->add_attribute($attr_name, %opts, traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'] ); @@ -152,7 +151,7 @@ sub mk_ro_accessors { $meta->remove_attribute($attr_name) if $meta->find_attribute_by_name($attr_name); my $reader = $self->accessor_name_for($attr_name); - my @opts = ($meta->has_method($reader) ? () : (reader => $reader) ); + my @opts = ($meta->has_method($reader) ? (is => 'bare') : (reader => $reader) ); my $attr = $meta->add_attribute($attr_name, @opts, traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'] ) if scalar(@opts); @@ -264,7 +263,8 @@ sub make_accessor { my($class, $field) = @_; my $meta = $locate_metaclass->($class); my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field, - traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'] + traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'], + is => 'bare', ); my $reader = $attr->get_read_method_ref; my $writer = $attr->get_write_method_ref; @@ -280,7 +280,8 @@ sub make_ro_accessor { my($class, $field) = @_; my $meta = $locate_metaclass->($class); my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field, - traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'] + traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'], + is => 'bare', ); return $attr->get_read_method_ref; } @@ -290,7 +291,8 @@ sub make_wo_accessor { my($class, $field) = @_; my $meta = $locate_metaclass->($class); my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field, - traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'] + traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'], + is => 'bare', ); return $attr->get_write_method_ref; }