MouseX::AttributeHelpers::Number - MouseX::AttributeHelpers::Number documentation


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

Index


Code Index:

NAME

Top

MouseX::AttributeHelpers::Number

SYNOPSIS

Top

    package Real;
    use Mouse;
    use MouseX::AttributeHelpers;

    has 'integer' => (
        metaclass => 'Number',
        is        => 'rw',
        isa       => 'Int',
        default   => 5,
        provides  => {
            set => 'set',
            add => 'add',
            sub => 'sub',
            mul => 'mul',
            div => 'div',
            mod => 'mod',
            abs => 'abs',
        },
    );

    package main;
    my $real = Real->new;

    $real->add(5); # same as $real->integer($real->integer + 5);
    $real->sub(2); # same as $real->integer($real->integer - 2);

DESCRIPTION

Top

This provides a simple numeric attribute, which supports most of the basic math operations.

PROVIDERS

Top

set

add

sub

mul

div

mod

abs

METHODS

Top

method_constructors

helper_type

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::Number;
use Mouse;

extends 'MouseX::AttributeHelpers::Base';

has '+method_constructors' => (
    default => sub {
        return +{
            set => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} = $_[1] };
            },
            add => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} += $_[1] };
            },
            sub => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} -= $_[1] };
            },
            mul => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} *= $_[1] };
            },
            div => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} /= $_[1] };
            },
            mod => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} %= $_[1] };
            },
            abs => sub {
                my (undef, $name) = @_;
                return sub { $_[0]->{$name} = abs $_[0]->{$name} };
            },
        };
    },
);

sub helper_type { 'Num' }

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