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