Commit | Line | Data |
190b1c02 |
1 | |
2 | package MooseX::AttributeHelpers::MethodProvider::String; |
3 | use Moose::Role; |
4 | |
18d43c2c |
5 | our $VERSION = '0.13'; |
190b1c02 |
6 | our $AUTHORITY = 'cpan:STEVAN'; |
7 | |
8 | sub append : method { |
9 | my ($attr, $reader, $writer) = @_; |
10 | |
11 | return sub { $writer->( $_[0], $reader->($_[0]) . $_[1] ) }; |
12 | } |
13 | |
14 | sub prepend : method { |
15 | my ($attr, $reader, $writer) = @_; |
16 | |
17 | return sub { $writer->( $_[0], $_[1] . $reader->($_[0]) ) }; |
18 | } |
19 | |
20 | sub replace : method { |
21 | my ($attr, $reader, $writer) = @_; |
22 | |
23 | return sub { |
24 | my ( $self, $regex, $replacement ) = @_; |
25 | my $v = $reader->($_[0]); |
26 | |
27 | if ( (ref($replacement)||'') eq 'CODE' ) { |
28 | $v =~ s/$regex/$replacement->()/e; |
29 | } else { |
30 | $v =~ s/$regex/$replacement/; |
31 | } |
32 | |
33 | $writer->( $_[0], $v); |
34 | }; |
35 | } |
36 | |
37 | sub match : method { |
38 | my ($attr, $reader, $writer) = @_; |
39 | return sub { $reader->($_[0]) =~ $_[1] }; |
40 | } |
41 | |
42 | sub chop : method { |
43 | my ($attr, $reader, $writer) = @_; |
44 | return sub { |
45 | my $v = $reader->($_[0]); |
46 | CORE::chop($v); |
47 | $writer->( $_[0], $v); |
48 | }; |
49 | } |
50 | |
51 | sub chomp : method { |
52 | my ($attr, $reader, $writer) = @_; |
53 | return sub { |
54 | my $v = $reader->($_[0]); |
55 | chomp($v); |
56 | $writer->( $_[0], $v); |
57 | }; |
58 | } |
59 | |
60 | sub inc : method { |
61 | my ($attr, $reader, $writer) = @_; |
62 | return sub { |
63 | my $v = $reader->($_[0]); |
64 | $v++; |
65 | $writer->( $_[0], $v); |
66 | }; |
67 | } |
68 | |
69 | sub clear : method { |
70 | my ($attr, $reader, $writer ) = @_; |
71 | return sub { $writer->( $_[0], '' ) } |
72 | } |
73 | |
74 | 1; |
75 | |
76 | __END__ |
77 | |
78 | =pod |
79 | |
80 | =head1 NAME |
81 | |
82 | MooseX::AttributeHelpers::MethodProvider::String |
83 | |
84 | =head1 DESCRIPTION |
85 | |
86 | This is a role which provides the method generators for |
87 | L<MooseX::AttributeHelpers::String>. |
88 | |
89 | =head1 METHODS |
90 | |
91 | =over 4 |
92 | |
93 | =item B<meta> |
94 | |
95 | =back |
96 | |
97 | =head1 PROVIDED METHODS |
98 | |
99 | =over 4 |
100 | |
101 | =item B<append> |
102 | |
103 | =item B<prepend> |
104 | |
105 | =item B<replace> |
106 | |
107 | =item B<match> |
108 | |
109 | =item B<chomp> |
110 | |
111 | =item B<chop> |
112 | |
113 | =item B<inc> |
114 | |
115 | =item B<clear> |
116 | |
117 | =back |
118 | |
119 | =head1 BUGS |
120 | |
121 | All complex software has bugs lurking in it, and this module is no |
122 | exception. If you find a bug please either email me, or add the bug |
123 | to cpan-RT. |
124 | |
125 | =head1 AUTHOR |
126 | |
127 | Stevan Little E<lt>stevan@iinteractive.comE<gt> |
128 | |
129 | =head1 COPYRIGHT AND LICENSE |
130 | |
99c62fb8 |
131 | Copyright 2007-2008 by Infinity Interactive, Inc. |
190b1c02 |
132 | |
133 | L<http://www.iinteractive.com> |
134 | |
135 | This library is free software; you can redistribute it and/or modify |
136 | it under the same terms as Perl itself. |
137 | |
138 | =cut |