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