Composite now implemented.
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers / MethodProvider / String.pm
index 98d981f..202c646 100644 (file)
@@ -1,75 +1,76 @@
-
 package MooseX::AttributeHelpers::MethodProvider::String;
-use Moose::Role;
+use MooseX::AttributeHelpers::MethodProvider;
 
 our $VERSION   = '0.01';
 our $AUTHORITY = 'cpan:STEVAN';
 
-sub append : method { 
-    my ($attr, $reader, $writer) = @_;
-
-    return sub { $writer->( $_[0],  $reader->($_[0]) . $_[1] ) };
-}
-
-sub prepend : method {
-    my ($attr, $reader, $writer) = @_;
-
-    return sub { $writer->( $_[0],  $_[1] . $reader->($_[0]) ) };
-}
-
-sub replace : method {
-    my ($attr, $reader, $writer) = @_;
-
-    return sub {
-        my ( $self, $regex, $replacement ) = @_;
-        my $v = $reader->($_[0]);
-
-        if ( (ref($replacement)||'') eq 'CODE' ) {
-            $v =~ s/$regex/$replacement->()/e;
-        } else {
-            $v =~ s/$regex/$replacement/;
-        }
-
-        $writer->( $_[0], $v);
-    };
-}
-
-sub match : method {
-    my ($attr, $reader, $writer) = @_;
-    return sub { $reader->($_[0]) =~ $_[1] };
-}
-
-sub chop : method {
-    my ($attr, $reader, $writer) = @_;
-    return sub {
-        my $v = $reader->($_[0]);
-        CORE::chop($v);
-        $writer->( $_[0], $v);
-    };
-}
-
-sub chomp : method {
-    my ($attr, $reader, $writer) = @_;
-    return sub {
-        my $v = $reader->($_[0]);
-        chomp($v);
-        $writer->( $_[0], $v);
-    };
-}
-
-sub inc : method {
-    my ($attr, $reader, $writer) = @_;
-    return sub {
-        my $v = $reader->($_[0]);
-        $v++;
-        $writer->( $_[0], $v);
-    };
-}
-
-sub clear : method {
-    my ($attr, $reader, $writer ) = @_;
-    return sub { $writer->( $_[0], '' ) }
-}
+add_method_provider String => (
+    type => 'Str',
+    provides => {
+        append => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub { $writer->( $_[0],  $reader->($_[0]) . $_[1] ) };
+        },
+
+        prepend => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub { $writer->( $_[0],  $_[1] . $reader->($_[0]) ) };
+        },
+
+        replace => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub {
+                my ( $self, $regex, $replacement ) = @_;
+                my $v = $reader->($_[0]);
+
+                if ( (ref($replacement)||'') eq 'CODE' ) {
+                    $v =~ s/$regex/$replacement->()/e;
+                } else {
+                    $v =~ s/$regex/$replacement/;
+                }
+
+                $writer->( $_[0], $v);
+            };
+        },
+
+        match => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub { $reader->($_[0]) =~ $_[1] };
+        },
+
+        chop => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub {
+                my $v = $reader->($_[0]);
+                CORE::chop($v);
+                $writer->( $_[0], $v);
+            };
+        },
+
+        chomp => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub {
+                my $v = $reader->($_[0]);
+                chomp($v);
+                $writer->( $_[0], $v);
+            };
+        },
+
+        inc => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub {
+                my $v = $reader->($_[0]);
+                $v++;
+                $writer->( $_[0], $v);
+            };
+        },
+
+        clear => sub {
+            my ($attr, $reader, $writer ) = @_;
+            return sub { $writer->( $_[0], '' ) }
+        },
+    },
+);
 
 1;
 
@@ -80,10 +81,10 @@ __END__
 =head1 NAME
 
 MooseX::AttributeHelpers::MethodProvider::String
-  
+
 =head1 DESCRIPTION
 
-This is a role which provides the method generators for 
+This is a role which provides the method generators for
 L<MooseX::AttributeHelpers::String>.
 
 =head1 PROVIDED METHODS
@@ -133,7 +134,7 @@ Sets the string to the empty string (not the value passed to C<default>).
 
 =head1 BUGS
 
-All complex software has bugs lurking in it, and this module is no 
+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.