Commit | Line | Data |
7fc7e054 |
1 | |
2 | package MooseX::AttributeHelpers::Trait::Counter; |
3 | use Moose::Role; |
4 | |
5 | with 'MooseX::AttributeHelpers::Trait::Base' |
6 | => { excludes => ['method_provider'] }; |
7 | |
8 | our $VERSION = '0.03'; |
9 | our $AUTHORITY = 'cpan:STEVAN'; |
10 | |
11 | use MooseX::AttributeHelpers::MethodProvider::Counter; |
12 | |
13 | has 'method_provider' => ( |
14 | is => 'ro', |
15 | isa => 'ClassName', |
16 | predicate => 'has_method_provider', |
17 | default => 'MooseX::AttributeHelpers::MethodProvider::Counter', |
18 | ); |
19 | |
20 | sub helper_type { 'Num' } |
21 | |
22 | before 'process_options_for_provides' => sub { |
23 | my ($self, $options, $name) = @_; |
24 | |
25 | # Set some default attribute options here unless already defined |
26 | if ((my $type = $self->helper_type) && !exists $options->{isa}){ |
27 | $options->{isa} = $type; |
28 | } |
29 | |
30 | $options->{is} = 'ro' unless exists $options->{is}; |
31 | $options->{default} = 0 unless exists $options->{default}; |
32 | }; |
33 | |
34 | after 'check_provides_values' => sub { |
35 | my $self = shift; |
36 | my $provides = $self->provides; |
37 | |
38 | unless (scalar keys %$provides) { |
39 | my $method_constructors = $self->method_constructors; |
40 | my $attr_name = $self->name; |
41 | |
42 | foreach my $method (keys %$method_constructors) { |
43 | $provides->{$method} = ($method . '_' . $attr_name); |
44 | } |
45 | } |
46 | }; |
47 | |
48 | no Moose::Role; |
49 | |
50 | # register the alias ... |
51 | package # hide me from search.cpan.org |
52 | Moose::Meta::Attribute::Custom::Trait::Counter; |
53 | sub register_implementation { 'MooseX::AttributeHelpers::Trait::Counter' } |
54 | |
55 | 1; |
56 | |