Composite now implemented.
[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
5431dff2 112=head1 CAVEAT
113
114This is an early release of this module. Right now it is in great need
115of documentation and tests in the test suite. However, we have used this
c91a1347 116module to great success at C<$work> where it has been tested very thoroughly
5431dff2 117and deployed into a major production site.
118
119I plan on getting better docs and tests in the next few releases, but until
120then please refer to the few tests we do have and feel free email and/or
121message me on irc.perl.org if you have any questions.
122
123=head1 TODO
124
125We need tests and docs badly.
126
22d869ff 127=head1 BUGS
128
129All complex software has bugs lurking in it, and this module is no
130exception. If you find a bug please either email me, or add the bug
131to cpan-RT.
132
133=head1 AUTHOR
134
135Stevan Little E<lt>stevan@iinteractive.comE<gt>
136
5431dff2 137B<with contributions from:>
138
139Robert (rlb3) Boone
140
141Chris (perigrin) Prather
142
143Robert (phaylon) Sedlacek
144
38abf787 145Tom (dec) Lanyon
146
eca30395 147Yuval Kogman
148
22d869ff 149=head1 COPYRIGHT AND LICENSE
150
eca30395 151Copyright 2007, 2008 by Infinity Interactive, Inc.
22d869ff 152
153L<http://www.iinteractive.com>
154
155This library is free software; you can redistribute it and/or modify
156it under the same terms as Perl itself.
157
e295d072 158=cut