make_accessor, make_ro_accessor, make_rw_accessor
Guillermo Roditi [Sat, 22 Nov 2008 18:25:26 +0000 (18:25 +0000)]
Changes
lib/MooseX/Emulate/Class/Accessor/Fast.pm

diff --git a/Changes b/Changes
index a3b2425..42201c7 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,5 @@
+0.00500   
+          - make_accessor, make_ro_accessor, make_rw_accessor
 0.00400    Oct 28, 2008
            - Fix bug where a bad assumption was causing us to infinitely loop
              on badly-written code like Data::Page. (Reported by marcus)
index 27e19ca..f87ca44 100644 (file)
@@ -226,6 +226,36 @@ sub get{
   return @values;
 }
 
+sub make_accessor {
+  my($class, $field) = @_;
+  my $meta = $class->meta;
+  my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field); 
+  my $reader = $attr->get_read_method_ref;
+  my $writer = $attr->get_write_method_ref;
+  return sub {
+    my $self = shift;
+    return $self->$reader unless @_;
+    return $self->$writer((@_ > 1 ? [@_] : @_));
+  }
+}
+
+
+sub make_ro_accessor {
+  my($class, $field) = @_;
+  my $meta = $class->meta;
+  my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field); 
+  return $attr->get_read_method_ref;
+}
+
+
+sub make_wo_accessor {
+  my($class, $field) = @_;
+  my $meta = $class->meta;
+  my $attr = $meta->find_attribute_by_name($field) || $meta->add_attribute($field); 
+  return $attr->get_write_method_ref;
+}
+
+
 1;
 
 =head2 meta