bump version numbers
[gitmo/Moose.git] / lib / Moose / Meta / Attribute / Native / Trait / String.pm
CommitLineData
c466e58f 1package Moose::Meta::Attribute::Native::Trait::String;
e3c07b19 2use Moose::Role;
3
122a129a 4our $VERSION = '0.89';
e3c07b19 5$VERSION = eval $VERSION;
6our $AUTHORITY = 'cpan:STEVAN';
7
c466e58f 8use Moose::Meta::Attribute::Native::MethodProvider::String;
e3c07b19 9
c466e58f 10with 'Moose::Meta::Attribute::Native::Trait';
e3c07b19 11
12has 'method_provider' => (
13 is => 'ro',
14 isa => 'ClassName',
15 predicate => 'has_method_provider',
c466e58f 16 default => 'Moose::Meta::Attribute::Native::MethodProvider::String',
e3c07b19 17);
18
2edb73d9 19sub _default_default { q{} }
20sub _default_is { 'rw' }
2e069f5a 21sub _helper_type { 'Str' }
e3c07b19 22
2edb73d9 23after '_check_handles_values' => sub {
046c8b5e 24 my $self = shift;
40ef30a5 25 my $handles = $self->handles;
e3c07b19 26
046c8b5e 27 unless ( scalar keys %$handles ) {
e3c07b19 28 my $method_constructors = $self->method_constructors;
29 my $attr_name = $self->name;
30
046c8b5e 31 foreach my $method ( keys %$method_constructors ) {
32 $handles->{$method} = ( $method . '_' . $attr_name );
e3c07b19 33 }
34 }
35};
36
37no Moose::Role;
38
e3c07b19 391;
40
41__END__
42
43=pod
44
45=head1 NAME
46
c466e58f 47Moose::Meta::Attribute::Native::Trait::String
e3c07b19 48
49=head1 SYNOPSIS
50
51 package MyHomePage;
52 use Moose;
e3c07b19 53
54 has 'text' => (
55 metaclass => 'String',
56 is => 'rw',
57 isa => 'Str',
2edb73d9 58 default => q{},
5f3663b2 59 handles => {
60 add_text => 'append',
61 replace_text => 'replace',
e3c07b19 62 }
63 );
64
65 my $page = MyHomePage->new();
66 $page->add_text("foo"); # same as $page->text($page->text . "foo");
67
68=head1 DESCRIPTION
69
70This module provides a simple string attribute, to which mutating string
71operations can be applied more easily (no need to make an lvalue attribute
72metaclass or use temporary variables). Additional methods are provided for
73completion.
74
75If your attribute definition does not include any of I<is>, I<isa>,
5f3663b2 76I<default> or I<handles> but does use the C<String> metaclass,
e3c07b19 77then this module applies defaults as in the L</SYNOPSIS>
78above. This allows for a very basic counter definition:
79
80 has 'foo' => (metaclass => 'String');
81 $obj->append_foo;
82
e3c07b19 83=head1 PROVIDED METHODS
84
79b647c6 85These methods are implemented in
86L<Moose::Meta::Attribute::Native::MethodProvider::STring>. It is important to
87note that all those methods do in place modification of the value stored in
88the attribute.
e3c07b19 89
90=over 4
91
92=item I<inc>
93
94Increments the value stored in this slot using the magical string autoincrement
a6dd8c94 95operator. Note that Perl doesn't provide analogous behavior in C<-->, so
e3c07b19 96C<dec> is not available.
97
98=item I<append> C<$string>
99
100Append a string, like C<.=>.
101
102=item I<prepend> C<$string>
103
104Prepend a string.
105
106=item I<replace> C<$pattern> C<$replacement>
107
108Performs a regexp substitution (L<perlop/s>). There is no way to provide the
109C<g> flag, but code references will be accepted for the replacement, causing
110the regex to be modified with a single C<e>. C</smxi> can be applied using the
111C<qr> operator.
112
113=item I<match> C<$pattern>
114
115Like I<replace> but without the replacement. Provided mostly for completeness.
116
117=item C<chop>
118
119L<perlfunc/chop>
120
121=item C<chomp>
122
123L<perlfunc/chomp>
124
125=item C<clear>
126
127Sets the string to the empty string (not the value passed to C<default>).
128
129=back
130
79b647c6 131=head1 METHODS
132
133=over 4
134
135=item B<meta>
136
137=item B<method_provider>
138
139=item B<has_method_provider>
140
141=back
142
e3c07b19 143=head1 BUGS
144
145All complex software has bugs lurking in it, and this module is no
146exception. If you find a bug please either email me, or add the bug
147to cpan-RT.
148
149=head1 AUTHOR
150
151Stevan Little E<lt>stevan@iinteractive.comE<gt>
152
153=head1 COPYRIGHT AND LICENSE
154
155Copyright 2007-2009 by Infinity Interactive, Inc.
156
157L<http://www.iinteractive.com>
158
159This library is free software; you can redistribute it and/or modify
160it under the same terms as Perl itself.
161
162=cut