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