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.
100 =item B<method_constructors>
104 =head1 PROVIDED METHODS
106 It is important to note that all those methods do in place
107 modification of the value stored in the attribute.
111 =item I<set ($value)>
113 Alternate way to set the value.
115 =item I<add ($value)>
117 Adds the current value of the attribute to C<$value>.
119 =item I<sub ($value)>
121 Subtracts the current value of the attribute to C<$value>.
123 =item I<mul ($value)>
125 Multiplies the current value of the attribute to C<$value>.
127 =item I<div ($value)>
129 Divides the current value of the attribute to C<$value>.
131 =item I<mod ($value)>
133 Modulus the current value of the attribute to C<$value>.
137 Sets the current value of the attribute to its absolute value.
143 All complex software has bugs lurking in it, and this module is no
144 exception. If you find a bug please either email me, or add the bug
151 =head1 COPYRIGHT AND LICENSE
153 Copyright 2007-2009 by Infinity Interactive, Inc.
155 L<http://www.iinteractive.com>
157 This library is free software; you can redistribute it and/or modify
158 it under the same terms as Perl itself.