1 package Moose::Meta::Attribute::Native::Trait::Number;
5 $VERSION = eval $VERSION;
6 our $AUTHORITY = 'cpan:STEVAN';
8 with 'Moose::Meta::Attribute::Native::Trait';
10 sub _helper_type { 'Num' }
12 # NOTE: we don't use the method provider for this module since many of
13 # the names of the provided methods would conflict with keywords - SL
15 has 'method_constructors' => (
22 my ( $attr, $reader, $writer ) = @_;
23 return sub { $writer->( $_[0], $_[1] ) };
26 my ( $attr, $reader, $writer ) = @_;
27 return sub { $writer->( $_[0], $reader->( $_[0] ) + $_[1] ) };
30 my ( $attr, $reader, $writer ) = @_;
31 return sub { $writer->( $_[0], $reader->( $_[0] ) - $_[1] ) };
34 my ( $attr, $reader, $writer ) = @_;
35 return sub { $writer->( $_[0], $reader->( $_[0] ) * $_[1] ) };
38 my ( $attr, $reader, $writer ) = @_;
39 return sub { $writer->( $_[0], $reader->( $_[0] ) / $_[1] ) };
42 my ( $attr, $reader, $writer ) = @_;
43 return sub { $writer->( $_[0], $reader->( $_[0] ) % $_[1] ) };
46 my ( $attr, $reader, $writer ) = @_;
47 return sub { $writer->( $_[0], abs( $reader->( $_[0] ) ) ) };
61 Moose::Meta::Attribute::Native::Trait::Number
67 use Moose::AttributeHelpers;
70 metaclass => 'Number',
85 my $real = Real->new();
86 $real->add(5); # same as $real->integer($real->integer + 5);
87 $real->sub(2); # same as $real->integer($real->integer - 2);
91 This provides a simple numeric attribute, which supports most of the
92 basic math operations.
94 =head1 PROVIDED METHODS
96 It is important to note that all those methods do in place modification of the
97 value stored in the attribute. These methods are implemented within this
102 =item I<set ($value)>
104 Alternate way to set the value.
106 =item I<add ($value)>
108 Adds the current value of the attribute to C<$value>.
110 =item I<sub ($value)>
112 Subtracts the current value of the attribute to C<$value>.
114 =item I<mul ($value)>
116 Multiplies the current value of the attribute to C<$value>.
118 =item I<div ($value)>
120 Divides the current value of the attribute to C<$value>.
122 =item I<mod ($value)>
124 Modulus the current value of the attribute to C<$value>.
128 Sets the current value of the attribute to its absolute value.
138 =item B<method_constructors>
144 All complex software has bugs lurking in it, and this module is no
145 exception. If you find a bug please either email me, or add the bug
152 =head1 COPYRIGHT AND LICENSE
154 Copyright 2007-2009 by Infinity Interactive, Inc.
156 L<http://www.iinteractive.com>
158 This library is free software; you can redistribute it and/or modify
159 it under the same terms as Perl itself.