package Moose::Meta::Attribute::Native::Trait::Number;
use Moose::Role;
-our $VERSION = '0.89_02';
+our $VERSION = '1.15';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
+use Moose::Meta::Method::Accessor::Native::Number::abs;
+use Moose::Meta::Method::Accessor::Native::Number::add;
+use Moose::Meta::Method::Accessor::Native::Number::div;
+use Moose::Meta::Method::Accessor::Native::Number::mod;
+use Moose::Meta::Method::Accessor::Native::Number::mul;
+use Moose::Meta::Method::Accessor::Native::Number::set;
+use Moose::Meta::Method::Accessor::Native::Number::sub;
+
with 'Moose::Meta::Attribute::Native::Trait';
sub _helper_type { 'Num' }
-# NOTE: we don't use the method provider for this module since many of
-# the names of the provided methods would conflict with keywords - SL
-
-has 'method_constructors' => (
- is => 'ro',
- isa => 'HashRef',
- lazy => 1,
- default => sub {
- return +{
- set => sub {
- my ( $attr, $reader, $writer ) = @_;
- return sub { $writer->( $_[0], $_[1] ) };
- },
- add => sub {
- my ( $attr, $reader, $writer ) = @_;
- return sub { $writer->( $_[0], $reader->( $_[0] ) + $_[1] ) };
- },
- sub => sub {
- my ( $attr, $reader, $writer ) = @_;
- return sub { $writer->( $_[0], $reader->( $_[0] ) - $_[1] ) };
- },
- mul => sub {
- my ( $attr, $reader, $writer ) = @_;
- return sub { $writer->( $_[0], $reader->( $_[0] ) * $_[1] ) };
- },
- div => sub {
- my ( $attr, $reader, $writer ) = @_;
- return sub { $writer->( $_[0], $reader->( $_[0] ) / $_[1] ) };
- },
- mod => sub {
- my ( $attr, $reader, $writer ) = @_;
- return sub { $writer->( $_[0], $reader->( $_[0] ) % $_[1] ) };
- },
- abs => sub {
- my ( $attr, $reader, $writer ) = @_;
- return sub { $writer->( $_[0], abs( $reader->( $_[0] ) ) ) };
- },
- };
- }
-);
-
no Moose::Role;
1;
=head1 NAME
-Moose::Meta::Attribute::Native::Trait::Number
+Moose::Meta::Attribute::Native::Trait::Number - Helper trait for Num attributes
=head1 SYNOPSIS
use Moose;
has 'integer' => (
- metaclass => 'Number',
- is => 'ro',
- isa => 'Int',
- default => 5,
- handles => {
+ traits => ['Number'],
+ is => 'ro',
+ isa => 'Num',
+ default => 5,
+ handles => {
set => 'set',
add => 'add',
sub => 'sub',
);
my $real = Real->new();
- $real->add(5); # same as $real->integer($real->integer + 5);
- $real->sub(2); # same as $real->integer($real->integer - 2);
+ $real->add(5); # same as $real->integer($real->integer + 5);
+ $real->sub(2); # same as $real->integer($real->integer - 2);
=head1 DESCRIPTION
-This provides a simple numeric attribute, which supports most of the
-basic math operations.
+This trait provides native delegation methods for numbers. All of the
+operations correspond to arithmetic operations like addition or
+multiplication.
-=head1 PROVIDED METHODS
+=head1 DEFAULT TYPE
-It is important to note that all those methods do in place modification of the
-value stored in the attribute. These methods are implemented within this
-package.
+If you don't provide an C<isa> value for your attribute, it will default to
+C<Num>.
-=over 4
+=head1 PROVIDED METHODS
-=item B<set($value)>
+All of these methods modify the attribute's value in place. All methods return
+the new value.
-Alternate way to set the value.
+=over 4
-=item B<add($value)>
+=item * B<add($value)>
Adds the current value of the attribute to C<$value>.
-=item B<sub($value)>
+=item * B<sub($value)>
-Subtracts the current value of the attribute to C<$value>.
+Subtracts C<$value> from the current value of the attribute.
-=item B<mul($value)>
+=item * B<mul($value)>
-Multiplies the current value of the attribute to C<$value>.
+Multiplies the current value of the attribute by C<$value>.
-=item B<div($value)>
+=item * B<div($value)>
-Divides the current value of the attribute to C<$value>.
+Divides the current value of the attribute by C<$value>.
-=item B<mod($value)>
+=item * B<mod($value)>
-Modulus the current value of the attribute to C<$value>.
+Returns the current value of the attribute modulo C<$value>.
-=item B<abs>
+=item * B<abs>
Sets the current value of the attribute to its absolute value.
=back
-=head1 METHODS
-
-=over 4
-
-=item B<meta>
-
-=item B<method_constructors>
-
-=back
-
=head1 BUGS
-All complex software has bugs lurking in it, and this module is no
-exception. If you find a bug please either email me, or add the bug
-to cpan-RT.
+See L<Moose/BUGS> for details on reporting bugs.
=head1 AUTHOR