d1d42f15394c48da88522832010eb995bbe68428
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers / Counter.pm
1
2 package MooseX::AttributeHelpers::Counter;
3 use Moose;
4 use MooseX::AttributeHelpers::Sugar;
5
6 extends 'MooseX::AttributeHelpers::Base';
7
8 our $VERSION   = '0.03';
9 our $AUTHORITY = 'cpan:STEVAN';
10
11 define_attribute_helper (
12     default_options  => {
13         is      => 'ro', 
14         default => 0,
15     },
16
17     helper_type      => 'Num',
18     method_provider  => 'MooseX::AttributeHelpers::MethodProvider::Counter',
19     auto_provide     => 1,
20     shortcut         => 'Counter',
21 );
22
23 no Moose;
24 no MooseX::AttributeHelpers::Sugar;
25
26 1;
27
28 __END__
29
30 =pod
31
32 =head1 NAME
33
34 MooseX::AttributeHelpers::Counter
35
36 =head1 SYNOPSIS
37
38   package MyHomePage;
39   use Moose;
40   use MooseX::AttributeHelpers;
41   
42   has 'counter' => (
43       metaclass => 'Counter',
44       is        => 'ro',
45       isa       => 'Num',
46       default   => sub { 0 },
47       provides  => {
48           inc => 'inc_counter',
49           dec => 'dec_counter',          
50           reset => 'reset_counter',
51       }
52   );
53
54   my $page = MyHomePage->new();
55   $page->inc_counter; # same as $page->counter($page->counter + 1);
56   $page->dec_counter; # same as $page->counter($page->counter - 1);  
57   
58 =head1 DESCRIPTION
59
60 This module provides a simple counter attribute, which can be 
61 incremented and decremeneted. 
62
63 If your attribute definition does not include any of I<is>, I<isa>,
64 I<default> or I<provides> but does use the C<Counter> metaclass,
65 then this module applies defaults as in the L</SYNOPSIS>
66 above. This allows for a very basic counter definition:
67
68   has 'foo' => (metaclass => 'Counter');
69   $obj->inc_foo;
70
71 =head1 METHODS
72
73 =over 4
74
75 =item B<meta>
76
77 =head1 PROVIDED METHODS
78
79 It is important to note that all those methods do in place
80 modification of the value stored in the attribute.
81
82 =over 4
83
84 =item I<inc>
85
86 Increments the value stored in this slot by 1.
87
88 =item I<dec>
89
90 Decrements the value stored in this slot by 1.
91
92 =item I<reset>
93
94 Resets the value stored in this slot to it's default value.
95
96 =back
97
98 =head1 BUGS
99
100 All complex software has bugs lurking in it, and this module is no 
101 exception. If you find a bug please either email me, or add the bug
102 to cpan-RT.
103
104 =head1 AUTHOR
105
106 Stevan Little E<lt>stevan@iinteractive.comE<gt>
107
108 =head1 COPYRIGHT AND LICENSE
109
110 Copyright 2007-2008 by Infinity Interactive, Inc.
111
112 L<http://www.iinteractive.com>
113
114 This library is free software; you can redistribute it and/or modify
115 it under the same terms as Perl itself.
116
117 =cut