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