1 package MooseX::Emulate::Class::Accessor::Fast::Meta::Accessor;
5 extends 'Moose::Meta::Method::Accessor';
7 sub generate_accessor_method {
8 my $attr = (shift)->associated_attribute;
11 $attr->set_value($self, $_[0]) if scalar(@_) == 1;
12 $attr->set_value($self, [@_]) if scalar(@_) > 1;
13 $attr->get_value($self);
17 sub generate_writer_method {
18 my $attr = (shift)->associated_attribute;
21 $attr->set_value($self, $_[0]) if scalar(@_) == 1;
22 $attr->set_value($self, [@_]) if scalar(@_) > 1;
26 # FIXME - this is shite, but it does work...
27 sub generate_accessor_method_inline {
28 my $attr = (shift)->associated_attribute;
29 my $attr_name = $attr->name;
30 my $meta_instance = $attr->associated_class->instance_metaclass;
32 my $code = eval "sub {
34 \$self->{'$attr_name'} = \$_[0] if scalar(\@_) == 1;
35 \$self->{'$attr_name'} = [\@_] if scalar(\@_) > 1;
36 \$self->{'$attr_name'};
38 confess "Could not generate inline accessor because : $@" if $@;
44 my $meta = __PACKAGE__->meta;
45 $meta->add_method(generate_writer_method_inline => $meta->get_method('generate_accessor_method_inline'));