MouseX::AttributeHelpers::Counter - MouseX::AttributeHelpers::Counter documentation


MouseX-AttributeHelpers documentation Contained in the MouseX-AttributeHelpers distribution.

Index


Code Index:

NAME

Top

MouseX::AttributeHelpers::Counter

SYNOPSIS

Top

    package MyHomePage;
    use Mouse;
    use MouseX::AttributeHelpers;

    has 'counter' => (
        metaclass => 'Counter',
        is        => 'rw',
        isa       => 'Num',
        default   => 0,
        provides  => {
            inc   => 'inc_counter',
            dec   => 'dec_counter',
            reset => 'reset_counter',
        },
    );

    package main;
    my $page = MyHomePage->new;

    $page->inc_counter; # same as $page->counter($page->counter + 1);
    $page->dec_counter; # same as $page->counter($page->counter - 1);

DESCRIPTION

Top

This module provides a simple counter attribute, which can be incremented and decremented.

PROVIDERS

Top

reset

set

inc

dec

METHODS

Top

method_constructors

helper_type

helper_default

AUTHOR

Top

NAKAGAWA Masaki <masaki@cpan.org>

LICENSE

Top

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Top

MouseX::AttributeHelpers, MouseX::AttributeHelpers::Base


MouseX-AttributeHelpers documentation Contained in the MouseX-AttributeHelpers distribution.

package MouseX::AttributeHelpers::Counter;
use Mouse;

extends 'MouseX::AttributeHelpers::Base';

has '+method_constructors' => (
    default => sub {
        return +{
            reset => sub {
                my ($attr, $name) = @_;
                return sub {
                    $_[0]->{$name} = do {
                        if ($attr->has_default) {
                            my $default = $attr->default;
                            ref $default eq 'CODE' ? $default->($_[0]) : $default;
                        }
                        elsif ($attr->has_builder) {
                            my $builder = $attr->builder;
                            $_[0]->$builder;
                        }
                    };
                };
            },
            set => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} = $_[1] };
            },
            inc => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} += defined $_[1] ? $_[1] : 1 };
            },
            dec => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} -= defined $_[1] ? $_[1] : 1 };
            },
        };
    },
);

sub helper_type    { 'Num' }
sub helper_default { 0 }

no Mouse;
__PACKAGE__->meta->make_immutable(inline_constructor => 0);
__END__