update Number documentation
[gitmo/Moose.git] / lib / Moose / Meta / Attribute / Native / MethodProvider / String.pm
CommitLineData
e3c07b19 1
c466e58f 2package Moose::Meta::Attribute::Native::MethodProvider::String;
e3c07b19 3use Moose::Role;
4
96539d20 5our $VERSION = '0.87';
e3c07b19 6$VERSION = eval $VERSION;
7our $AUTHORITY = 'cpan:STEVAN';
8
9sub append : method {
046c8b5e 10 my ( $attr, $reader, $writer ) = @_;
e3c07b19 11
046c8b5e 12 return sub { $writer->( $_[0], $reader->( $_[0] ) . $_[1] ) };
e3c07b19 13}
14
15sub prepend : method {
046c8b5e 16 my ( $attr, $reader, $writer ) = @_;
e3c07b19 17
046c8b5e 18 return sub { $writer->( $_[0], $_[1] . $reader->( $_[0] ) ) };
e3c07b19 19}
20
21sub replace : method {
046c8b5e 22 my ( $attr, $reader, $writer ) = @_;
e3c07b19 23
24 return sub {
25 my ( $self, $regex, $replacement ) = @_;
046c8b5e 26 my $v = $reader->( $_[0] );
e3c07b19 27
046c8b5e 28 if ( ( ref($replacement) || '' ) eq 'CODE' ) {
e3c07b19 29 $v =~ s/$regex/$replacement->()/e;
046c8b5e 30 }
31 else {
e3c07b19 32 $v =~ s/$regex/$replacement/;
33 }
34
046c8b5e 35 $writer->( $_[0], $v );
e3c07b19 36 };
37}
38
39sub match : method {
046c8b5e 40 my ( $attr, $reader, $writer ) = @_;
41 return sub { $reader->( $_[0] ) =~ $_[1] };
e3c07b19 42}
43
44sub chop : method {
046c8b5e 45 my ( $attr, $reader, $writer ) = @_;
e3c07b19 46 return sub {
046c8b5e 47 my $v = $reader->( $_[0] );
e3c07b19 48 CORE::chop($v);
046c8b5e 49 $writer->( $_[0], $v );
e3c07b19 50 };
51}
52
53sub chomp : method {
046c8b5e 54 my ( $attr, $reader, $writer ) = @_;
e3c07b19 55 return sub {
046c8b5e 56 my $v = $reader->( $_[0] );
e3c07b19 57 chomp($v);
046c8b5e 58 $writer->( $_[0], $v );
e3c07b19 59 };
60}
61
62sub inc : method {
046c8b5e 63 my ( $attr, $reader, $writer ) = @_;
e3c07b19 64 return sub {
046c8b5e 65 my $v = $reader->( $_[0] );
e3c07b19 66 $v++;
046c8b5e 67 $writer->( $_[0], $v );
e3c07b19 68 };
69}
70
71sub clear : method {
046c8b5e 72 my ( $attr, $reader, $writer ) = @_;
e3c07b19 73 return sub { $writer->( $_[0], '' ) }
74}
75
8a1e47bc 76sub length : method {
77 my ($attr, $reader, $writer) = @_;
78 return sub {
79 my $v = $reader->($_[0]);
80 return CORE::length($v);
81 };
82}
83
e3c07b19 84sub substr : method {
046c8b5e 85 my ( $attr, $reader, $writer ) = @_;
e3c07b19 86 return sub {
87 my $self = shift;
046c8b5e 88 my $v = $reader->($self);
e3c07b19 89
90 my $offset = defined $_[0] ? shift : 0;
91 my $length = defined $_[0] ? shift : CORE::length($v);
92 my $replacement = defined $_[0] ? shift : undef;
93
94 my $ret;
046c8b5e 95 if ( defined $replacement ) {
96 $ret = CORE::substr( $v, $offset, $length, $replacement );
97 $writer->( $self, $v );
e3c07b19 98 }
99 else {
046c8b5e 100 $ret = CORE::substr( $v, $offset, $length );
e3c07b19 101 }
102
103 return $ret;
104 };
105}
106
1071;
108
109__END__
110
111=pod
112
113=head1 NAME
114
c466e58f 115Moose::Meta::Attribute::Native::MethodProvider::String
e3c07b19 116
117=head1 DESCRIPTION
118
119This is a role which provides the method generators for
a40b446a 120L<Moose::Meta::Attribute::Trait::Native::String>.
e3c07b19 121
122=head1 METHODS
123
124=over 4
125
126=item B<meta>
127
128=back
129
130=head1 PROVIDED METHODS
131
132=over 4
133
134=item B<append>
135
136=item B<prepend>
137
138=item B<replace>
139
140=item B<match>
141
142=item B<chomp>
143
144=item B<chop>
145
146=item B<inc>
147
148=item B<clear>
149
8a1e47bc 150=item B<length>
151
e3c07b19 152=item B<substr>
153
154=back
155
156=head1 BUGS
157
158All complex software has bugs lurking in it, and this module is no
159exception. If you find a bug please either email me, or add the bug
160to cpan-RT.
161
162=head1 AUTHOR
163
164Stevan Little E<lt>stevan@iinteractive.comE<gt>
165
166=head1 COPYRIGHT AND LICENSE
167
168Copyright 2007-2009 by Infinity Interactive, Inc.
169
170L<http://www.iinteractive.com>
171
172This library is free software; you can redistribute it and/or modify
173it under the same terms as Perl itself.
174
175=cut