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