Version 0.00901.
[gitmo/MooseX-Emulate-Class-Accessor-Fast.git] / lib / MooseX / Emulate / Class / Accessor / Fast.pm
index 4047c0d..d2e4ca3 100644 (file)
@@ -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
 
@@ -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;
 }