Some more documentation updates.
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers.pm
CommitLineData
22d869ff 1package MooseX::AttributeHelpers;
2
532b802c 3our $VERSION = '0.08';
22d869ff 4our $AUTHORITY = 'cpan:STEVAN';
5
786dbc3d 6use MooseX::AttributeHelpers::Composite;
7
8f7951c9 8use MooseX::AttributeHelpers::Meta::Method::Provided;
9
22d869ff 10use MooseX::AttributeHelpers::Counter;
565fe238 11use MooseX::AttributeHelpers::Number;
190b1c02 12use MooseX::AttributeHelpers::String;
457dc4fb 13use MooseX::AttributeHelpers::Collection::List;
22d869ff 14use MooseX::AttributeHelpers::Collection::Array;
15use MooseX::AttributeHelpers::Collection::Hash;
9a976497 16use MooseX::AttributeHelpers::Collection::ImmutableHash;
17use MooseX::AttributeHelpers::Collection::Bag;
22d869ff 18
191;
20
21__END__
22
23=pod
24
25=head1 NAME
26
e295d072 27MooseX::AttributeHelpers - Extend your attribute interfaces
fa4df2e6 28
22d869ff 29=head1 SYNOPSIS
30
e295d072 31 package MyClass;
32 use Moose;
5431dff2 33 use MooseX::AttributeHelpers;
e295d072 34
5431dff2 35 has 'mapping' => (
e295d072 36 metaclass => 'Collection::Hash',
37 is => 'rw',
5431dff2 38 isa => 'HashRef[Str]',
e295d072 39 default => sub { {} },
40 provides => {
41 exists => 'exists_in_mapping',
42 keys => 'ids_in_mapping',
43 get => 'get_mapping',
44 set => 'set_mapping',
45 },
46 );
47
48 # ...
49
50 my $obj = MyClass->new;
51 $obj->set_mapping(4, 'foo');
52 $obj->set_mapping(5, 'bar');
53 $obj->set_mapping(6, 'baz');
54
55 # prints 'bar'
56 print $obj->get_mapping(5) if $obj->exists_in_mapping(5);
57
58 # prints '4, 5, 6'
59 print join ', ', $obj->ids_in_mapping;
60
22d869ff 61=head1 DESCRIPTION
62
e295d072 63While L<Moose> attributes provide you with a way to name your accessors,
64readers, writers, clearers and predicates, this library provides commonly
65used attribute helper methods for more specific types of data.
66
67As seen in the L</SYNOPSIS>, you specify the extension via the
68C<metaclass> parameter. Available meta classes are:
69
70=over
71
72=item L<Number|MooseX::AttributeHelpers::Number>
73
74Common numerical operations.
75
76=item L<Counter|MooseX::AttributeHelpers::Counter>
77
78Methods for incrementing and decrementing a counter attribute.
79
720fa35b 80=item L<String|MooseX::AttributeHelpers::String>
81
82Common string operations.
83
e295d072 84=item L<Collection::Hash|MooseX::AttributeHelpers::Collection::Hash>
85
86Common methods for hash references.
87
88=item L<Collection::Array|MooseX::AttributeHelpers::Collection::Array>
89
90Common methods for array references.
91
72a41843 92=item L<Collection::List|MooseX::AttributeHelpers::Collection::List>
457dc4fb 93
94Common list methods for array references.
95
720fa35b 96=item L<Collection::Bag|MooseX::AttributeHelpers::Collection::Bag>
97
98Mathematical bags.
99
100=item L<Collection::ImmutableHash|MooseX::AttributeHelpers::Collection::ImmutableHash>
101
102Hashes with no change methods.
103
e295d072 104=back
105
786dbc3d 106=head1 COMPOSITE
107
108The methods provided by the above methods can be selectively composed with the
109metaclass L<Composite|MooseX::AttributeHelpers::Composite>, which is also
110available in L<Trait|MooseX::AttributeHelpers::Composite::Trait> form.
111
f2b3b8f9 112=head1 METHOD PROVIDERS
113
114There is an interface for defining new MethodProviders that can be used either
115directly by L<Composite|MooseX::AttributeHelpers::Composite> or by a custom
116metaclass that you create (see L<MooseX::AttributeHelpers::Base>). The
117interface is defined by L<MooseX::AttributeHelpers::MethodProvider>.
118
5431dff2 119=head1 CAVEAT
120
121This is an early release of this module. Right now it is in great need
122of documentation and tests in the test suite. However, we have used this
c91a1347 123module to great success at C<$work> where it has been tested very thoroughly
5431dff2 124and deployed into a major production site.
125
126I plan on getting better docs and tests in the next few releases, but until
127then please refer to the few tests we do have and feel free email and/or
128message me on irc.perl.org if you have any questions.
129
130=head1 TODO
131
132We need tests and docs badly.
133
22d869ff 134=head1 BUGS
135
136All complex software has bugs lurking in it, and this module is no
137exception. If you find a bug please either email me, or add the bug
138to cpan-RT.
139
140=head1 AUTHOR
141
142Stevan Little E<lt>stevan@iinteractive.comE<gt>
143
5431dff2 144B<with contributions from:>
145
146Robert (rlb3) Boone
147
148Chris (perigrin) Prather
149
150Robert (phaylon) Sedlacek
151
38abf787 152Tom (dec) Lanyon
153
eca30395 154Yuval Kogman
155
f2b3b8f9 156Paul (frodwith) Driver
157
22d869ff 158=head1 COPYRIGHT AND LICENSE
159
eca30395 160Copyright 2007, 2008 by Infinity Interactive, Inc.
22d869ff 161
162L<http://www.iinteractive.com>
163
164This library is free software; you can redistribute it and/or modify
165it under the same terms as Perl itself.
166
e295d072 167=cut