Version 0.95.
[gitmo/Moose.git] / lib / Moose / Meta / Attribute / Native.pm
index 105616f..ec59256 100644 (file)
@@ -1,10 +1,10 @@
 package Moose::Meta::Attribute::Native;
 
-our $VERSION   = '0.89';
+our $VERSION   = '0.95';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
-my @trait_names = qw(Bool Counter Number String Array Hash);
+my @trait_names = qw(Bool Counter Number String Array Hash Code);
 
 for my $trait_name (@trait_names) {
     my $trait_class = "Moose::Meta::Attribute::Native::Trait::$trait_name";
@@ -51,7 +51,7 @@ Moose::Meta::Attribute::Native - Extend your attribute interfaces
           ids_in_mapping    => 'keys',
           get_mapping       => 'get',
           set_mapping       => 'set',
-          set_quantity      => [ set => [ 'quantity' ] ],
+          set_quantity      => [ set => 'quantity' ],
       },
   );
 
@@ -60,30 +60,31 @@ Moose::Meta::Attribute::Native - Extend your attribute interfaces
 
   my $obj = MyClass->new;
   $obj->set_quantity(10);      # quantity => 10
-  $obj->set_mapping(4, 'foo'); # 4 => 'foo'
-  $obj->set_mapping(5, 'bar'); # 5 => 'bar'
-  $obj->set_mapping(6, 'baz'); # 6 => 'baz'
+  $obj->set_mapping('foo', 4); # foo => 4
+  $obj->set_mapping('bar', 5); # bar => 5
+  $obj->set_mapping('baz', 6); # baz => 6
 
 
-  # prints 'bar'
-  print $obj->get_mapping(5) if $obj->exists_in_mapping(5);
+  # prints 5
+  print $obj->get_mapping('bar') if $obj->exists_in_mapping('bar');
 
-  # prints '4, 5, 6'
+  # prints 'quantity, foo, bar, baz'
   print join ', ', $obj->ids_in_mapping;
 
 =head1 DESCRIPTION
 
-While L<Moose> attributes provide you with a way to name your accessors,
-readers, writers, clearers and predicates, this library provides commonly
+While L<Moose> attributes provide a way to name your accessors, readers,
+writers, clearers and predicates, this set of traits provides commonly
 used attribute helper methods for more specific types of data.
 
-As seen in the L</SYNOPSIS>, you specify the extension via the
-C<trait> parameter. Available meta classes are below; see L</METHOD PROVIDERS>.
+As seen in the L</SYNOPSIS>, you specify the data structure via the
+C<trait> parameter. Available traits are below; see L</METHOD PROVIDERS>.
 
 This module used to exist as the L<MooseX::AttributeHelpers> extension. It was
 very commonly used, so we moved it into core Moose. Since this gave us a chance
 to change the interface, you will have to change your code or continue using
-the L<MooseX::AttributeHelpers> extension.
+the L<MooseX::AttributeHelpers> extension. L<MooseX::AttributeHelpers> should
+continue to work.
 
 =head1 PARAMETERS
 
@@ -103,11 +104,11 @@ works normally for C<< handles >>.
 Common numerical operations.
 
     has 'integer' => (
-        metaclass => 'Number',
+        traits    => ['Number'],
         is        => 'ro',
         isa       => 'Int',
         default   => 5,
-        handles  => {
+        handles   => {
             set => 'set',
             add => 'add',
             sub => 'sub',
@@ -115,6 +116,7 @@ Common numerical operations.
             div => 'div',
             mod => 'mod',
             abs => 'abs',
+            # ...
         }
     );
 
@@ -123,13 +125,14 @@ Common numerical operations.
 Common methods for string operations.
 
     has 'text' => (
-        metaclass => 'String',
+        traits    => ['String'],
         is        => 'rw',
         isa       => 'Str',
         default   => q{},
-        handles  => {
+        handles   => {
             add_text     => 'append',
             replace_text => 'replace',
+            # ...
         }
     );
 
@@ -138,7 +141,7 @@ Common methods for string operations.
 Methods for incrementing and decrementing a counter attribute.
 
     has 'counter' => (
-        traits => ['Counter'],
+        traits    => ['Counter'],
         is        => 'ro',
         isa       => 'Num',
         default   => 0,
@@ -146,6 +149,7 @@ Methods for incrementing and decrementing a counter attribute.
             inc_counter   => 'inc',
             dec_counter   => 'dec',
             reset_counter => 'reset',
+            # ...
         }
     );
 
@@ -154,7 +158,7 @@ Methods for incrementing and decrementing a counter attribute.
 Common methods for boolean values.
 
     has 'is_lit' => (
-        traits => ['Bool'],
+        traits    => ['Bool'],
         is        => 'rw',
         isa       => 'Bool',
         default   => 0,
@@ -163,10 +167,10 @@ Common methods for boolean values.
             darken      => 'unset',
             flip_switch => 'toggle',
             is_dark     => 'not',
+            # ...
         }
     );
 
-
 =item L<Hash|Moose::Meta::Attribute::Native::Trait::Hash>
 
 Common methods for hash references.
@@ -177,9 +181,10 @@ Common methods for hash references.
         isa       => 'HashRef[Str]',
         default   => sub { {} },
         handles   => {
-            set_option    => 'set',
-            get_option    => 'get',
-            has_option    => 'exists',
+            set_option => 'set',
+            get_option => 'get',
+            has_option => 'exists',
+            # ...
         }
     );
 
@@ -188,23 +193,37 @@ Common methods for hash references.
 Common methods for array references.
 
     has 'queue' => (
-       traits     => ['Array'],
-       is         => 'ro',
-       isa        => 'ArrayRef[Str]',
-       default    => sub { [] },
-       handles   => {
-           add_item  => 'push'
-           next_item => 'shift',
-       }
+        traits    => ['Array'],
+        is        => 'ro',
+        isa       => 'ArrayRef[Str]',
+        default   => sub { [] },
+        handles   => {
+            add_item  => 'push',
+            next_item => 'shift',
+            # ...
+        }
+    );
+
+=item L<Code|Moose::Meta::Attribute::Native::Trait::Code>
+
+Common methods for code references.
+
+    has 'callback' => (
+        traits    => ['Code'],
+        is        => 'ro',
+        isa       => 'CodeRef',
+        default   => sub { sub { 'called' } },
+        handles   => {
+            call => 'execute',
+            # ...
+        }
     );
 
 =back
 
 =head1 BUGS
 
-All complex software has bugs lurking in it, and this module is no
-exception. If you find a bug please either email me, or add the bug
-to cpan-RT.
+See L<Moose/BUGS> for details on reporting bugs.
 
 =head1 AUTHOR
 
@@ -236,6 +255,10 @@ Evan Carroll
 
 Jesse (doy) Luehrs
 
+Jay Hannah
+
+Robert Buels
+
 =head1 COPYRIGHT AND LICENSE
 
 Copyright 2007-2009 by Infinity Interactive, Inc.