now uses faster methods for accessors and some other minor cleanup stuff
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers / MethodProvider / Hash.pm
index 986c085..cff3237 100644 (file)
@@ -1,54 +1,57 @@
 package MooseX::AttributeHelpers::MethodProvider::Hash;
 use Moose::Role;
 
+our $VERSION   = '0.01';
+our $AUTHORITY = 'cpan:STEVAN';
+
 sub exists : method {
-    my ($attr) = @_;    
-    return sub { exists $attr->get_value($_[0])->{$_[1]} ? 1 : 0 };
+    my ($attr, $reader, $writer) = @_;    
+    return sub { exists $reader->($_[0])->{$_[1]} ? 1 : 0 };
 }   
 
 sub get : method {
-    my ($attr) = @_;    
-    return sub { $attr->get_value($_[0])->{$_[1]} };
+    my ($attr, $reader, $writer) = @_;    
+    return sub { $reader->($_[0])->{$_[1]} };
 }  
 
 sub set : method {
-    my ($attr) = @_;
+    my ($attr, $reader, $writer) = @_;
     if ($attr->has_container_type) {
         my $container_type_constraint = $attr->container_type_constraint;
         return sub { 
             ($container_type_constraint->check($_[2])) 
                 || confess "Value " . ($_[2]||'undef') . " did not pass container type constraint";                        
-            $attr->get_value($_[0])->{$_[1]} = $_[2] 
+            $reader->($_[0])->{$_[1]} = $_[2] 
         };
     }
     else {
-        return sub { $attr->get_value($_[0])->{$_[1]} = $_[2] };
+        return sub { $reader->($_[0])->{$_[1]} = $_[2] };
     }
 }
 
 sub keys : method {
-    my ($attr) = @_;
-    return sub { keys %{$attr->get_value($_[0])} };        
+    my ($attr, $reader, $writer) = @_;
+    return sub { keys %{$reader->($_[0])} };        
 }
      
 sub values : method {
-    my ($attr) = @_;
-    return sub { values %{$attr->get_value($_[0])} };        
+    my ($attr, $reader, $writer) = @_;
+    return sub { values %{$reader->($_[0])} };        
 }   
    
 sub count : method {
-    my ($attr) = @_;
-    return sub { scalar keys %{$attr->get_value($_[0])} };        
+    my ($attr, $reader, $writer) = @_;
+    return sub { scalar keys %{$reader->($_[0])} };        
 }
 
 sub empty : method {
-    my ($attr) = @_;
-    return sub { scalar keys %{$attr->get_value($_[0])} ? 1 : 0 };        
+    my ($attr, $reader, $writer) = @_;
+    return sub { scalar keys %{$reader->($_[0])} ? 1 : 0 };        
 }
 
 sub delete : method {
-    my ($attr) = @_;
-    return sub { delete $attr->get_value($_[0])->{$_[1]} };
+    my ($attr, $reader, $writer) = @_;
+    return sub { delete $reader->($_[0])->{$_[1]} };
 }
 
 1;