use Class::MOP ();
use Scalar::Util ();
-our $VERSION = '0.00700';
+use MooseX::Emulate::Class::Accessor::Fast::Meta::Accessor ();
+
+our $VERSION = '0.00800';
=head1 NAME
-MooseX::Emulate::Class::Accessor::Fast -
- Emulate Class::Accessor::Fast behavior using Moose attributes
+MooseX::Emulate::Class::Accessor::Fast - Emulate Class::Accessor::Fast behavior using Moose attributes
=head1 SYNOPSYS
=cut
-sub mk_accessors{
+sub mk_accessors {
my $self = shift;
my $meta = $locate_metaclass->($self);
my $class = $meta->name;
#dont overwrite existing methods
if($reader eq $writer){
my %opts = ( $meta->has_method($reader) ? () : (accessor => $reader) );
- my $attr = $meta->add_attribute($attr_name, %opts);
+ my $attr = $meta->find_attribute_by_name($attr_name) || $meta->add_attribute($attr_name, %opts,
+ traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute']
+ );
if($attr_name eq $reader){
my $alias = "_${attr_name}_accessor";
next if $meta->has_method($alias);
- my @alias_method = $attr->process_accessors(accessor => $alias, 0);
- $meta->add_method(@alias_method);
+ $meta->add_method($alias => $attr->get_read_method_ref);
}
} else {
my @opts = ( $meta->has_method($writer) ? () : (writer => $writer) );
push(@opts, (reader => $reader)) unless $meta->has_method($reader);
- $meta->add_attribute($attr_name, @opts);
+ my $attr = $meta->find_attribute_by_name($attr_name) || $meta->add_attribute($attr_name, @opts,
+ traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute']
+ );
}
}
}
=cut
-sub mk_ro_accessors{
+sub mk_ro_accessors {
my $self = shift;
my $meta = $locate_metaclass->($self);
my $class = $meta->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 $attr = $meta->add_attribute($attr_name, @opts);
+ my $attr = $meta->add_attribute($attr_name, @opts,
+ traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute']
+ ) if scalar(@opts);
if($reader eq $attr_name && $reader eq $self->mutator_name_for($attr_name)){
$meta->add_method("_${attr_name}_accessor" => $attr->get_read_method_ref)
unless $meta->has_method("_${attr_name}_accessor");
=cut
#this is retarded.. but we need it for compatibility or whatever.
-sub mk_wo_accessors{
+sub mk_wo_accessors {
my $self = shift;
my $meta = $locate_metaclass->($self);
my $class = $meta->name;
if $meta->find_attribute_by_name($attr_name);
my $writer = $self->mutator_name_for($attr_name);
my @opts = ($meta->has_method($writer) ? () : (writer => $writer) );
- my $attr = $meta->add_attribute($attr_name, @opts);
+ my $attr = $meta->add_attribute($attr_name, @opts,
+ traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute']
+ ) if scalar(@opts);
if($writer eq $attr_name && $writer eq $self->accessor_name_for($attr_name)){
$meta->add_method("_${attr_name}_accessor" => $attr->get_write_method_ref)
unless $meta->has_method("_${attr_name}_accessor");
=cut
-sub follow_best_practice{
+sub follow_best_practice {
my $self = shift;
my $meta = $locate_metaclass->($self);
=cut
-sub mutator_name_for{ return $_[1] }
-sub accessor_name_for{ return $_[1] }
+sub mutator_name_for { return $_[1] }
+sub accessor_name_for { return $_[1] }
=head2 set
=cut
-sub set{
+sub set {
my $self = shift;
my $k = shift;
confess "Wrong number of arguments received" unless scalar @_;
=cut
-sub get{
+sub get {
my $self = shift;
confess "Wrong number of arguments received" unless scalar @_;
my $meta = $locate_metaclass->($self);
sub make_accessor {
my($class, $field) = @_;
my $meta = $locate_metaclass->($class);
- my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field);
+ my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field,
+ traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute']
+ );
my $reader = $attr->get_read_method_ref;
my $writer = $attr->get_write_method_ref;
return sub {
sub make_ro_accessor {
my($class, $field) = @_;
my $meta = $locate_metaclass->($class);
- my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field);
+ my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field,
+ traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute']
+ );
return $attr->get_read_method_ref;
}
sub make_wo_accessor {
my($class, $field) = @_;
my $meta = $locate_metaclass->($class);
- my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field);
+ my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field,
+ traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute']
+ );
return $attr->get_write_method_ref;
}
=over 4
-=item Tomas Doran E<lt>bobtfish@bobtfish.netE<gt>
+=item Tomas Doran (t0m) E<lt>bobtfish@bobtfish.netE<gt>
+
+=item Florian Ragwitz (rafl) E<lt>rafl@debian.orgE<gt>
=back