Bump to 0.12
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers / Counter.pm
CommitLineData
22d869ff 1
2package MooseX::AttributeHelpers::Counter;
3use Moose;
22d869ff 4
3f58c364 5our $VERSION = '0.12';
22d869ff 6our $AUTHORITY = 'cpan:STEVAN';
7
8e3fab6d 8use MooseX::AttributeHelpers::MethodProvider::Counter;
d26633fc 9
8e3fab6d 10extends 'MooseX::AttributeHelpers::Base';
8ba40fb0 11
8e3fab6d 12has '+method_provider' => (
13 default => 'MooseX::AttributeHelpers::MethodProvider::Counter'
d26633fc 14);
8e3fab6d 15
16sub helper_type { 'Num' }
38abf787 17
18before 'process_options_for_provides' => sub {
19 my ($self, $options, $name) = @_;
20
21 # Set some default attribute options here unless already defined
9a976497 22 if ((my $type = $self->helper_type) && !exists $options->{isa}){
23 $options->{isa} = $type;
38abf787 24 }
22d869ff 25
829736f9 26 $options->{is} = 'ro' unless exists $options->{is};
27 $options->{default} = 0 unless exists $options->{default};
28};
29
30after 'check_provides_values' => sub {
31 my $self = shift;
32 my $provides = $self->provides;
33
34 unless (scalar keys %$provides) {
35 my $method_constructors = $self->method_constructors;
36 my $attr_name = $self->name;
37
38 foreach my $method (keys %$method_constructors) {
39 $provides->{$method} = ($method . '_' . $attr_name);
40 }
38abf787 41 }
42};
43
22d869ff 44no Moose;
22d869ff 45
46# register the alias ...
0f31cc28 47package # hide me from search.cpan.org
48 Moose::Meta::Attribute::Custom::Counter;
22d869ff 49sub register_implementation { 'MooseX::AttributeHelpers::Counter' }
50
511;
52
53__END__
54
55=pod
56
57=head1 NAME
58
59MooseX::AttributeHelpers::Counter
60
61=head1 SYNOPSIS
62
63 package MyHomePage;
64 use Moose;
5431dff2 65 use MooseX::AttributeHelpers;
22d869ff 66
67 has 'counter' => (
68 metaclass => 'Counter',
38abf787 69 is => 'ro',
70 isa => 'Num',
22d869ff 71 default => sub { 0 },
72 provides => {
73 inc => 'inc_counter',
21c7045b 74 dec => 'dec_counter',
38abf787 75 reset => 'reset_counter',
22d869ff 76 }
77 );
78
79 my $page = MyHomePage->new();
80 $page->inc_counter; # same as $page->counter($page->counter + 1);
21c7045b 81 $page->dec_counter; # same as $page->counter($page->counter - 1);
22d869ff 82
83=head1 DESCRIPTION
84
5431dff2 85This module provides a simple counter attribute, which can be
86incremented and decremeneted.
87
38abf787 88If your attribute definition does not include any of I<is>, I<isa>,
89I<default> or I<provides> but does use the C<Counter> metaclass,
90then this module applies defaults as in the L</SYNOPSIS>
91above. This allows for a very basic counter definition:
92
93 has 'foo' => (metaclass => 'Counter');
94 $obj->inc_foo;
95
22d869ff 96=head1 METHODS
97
5431dff2 98=over 4
99
b91f57af 100=item B<meta>
101
5431dff2 102=item B<method_provider>
103
104=item B<has_method_provider>
105
106=item B<helper_type>
107
38abf787 108=item B<process_options_for_provides>
109
110Run before its superclass method.
111
829736f9 112=item B<check_provides_values>
113
114Run after its superclass method.
115
5431dff2 116=back
117
c91a1347 118=head1 PROVIDED METHODS
119
120It is important to note that all those methods do in place
121modification of the value stored in the attribute.
122
123=over 4
124
eef0ea50 125=item I<set>
126
127Set the counter to the specified value.
128
c91a1347 129=item I<inc>
130
eef0ea50 131Increments the value stored in this slot by 1.Providing an argument will
132cause the counter to be increased by specified amount.
c91a1347 133
134=item I<dec>
135
eef0ea50 136Decrements the value stored in this slot by 1. Providing an argument will
137cause the counter to be increased by specified amount.
c91a1347 138
139=item I<reset>
140
eef0ea50 141Resets the value stored in this slot to it's default value.
c91a1347 142
143=back
144
22d869ff 145=head1 BUGS
146
147All complex software has bugs lurking in it, and this module is no
148exception. If you find a bug please either email me, or add the bug
149to cpan-RT.
150
151=head1 AUTHOR
152
153Stevan Little E<lt>stevan@iinteractive.comE<gt>
154
155=head1 COPYRIGHT AND LICENSE
156
99c62fb8 157Copyright 2007-2008 by Infinity Interactive, Inc.
22d869ff 158
159L<http://www.iinteractive.com>
160
161This library is free software; you can redistribute it and/or modify
162it under the same terms as Perl itself.
163
38abf787 164=cut