bump version to 0.89_01
[gitmo/Moose.git] / lib / Moose / Meta / Attribute / Native / Trait / Number.pm
CommitLineData
c466e58f 1package Moose::Meta::Attribute::Native::Trait::Number;
e3c07b19 2use Moose::Role;
3
9039e8ec 4our $VERSION = '0.89_01';
e3c07b19 5$VERSION = eval $VERSION;
6our $AUTHORITY = 'cpan:STEVAN';
7
c466e58f 8with 'Moose::Meta::Attribute::Native::Trait';
e3c07b19 9
2e069f5a 10sub _helper_type { 'Num' }
e3c07b19 11
a65d8455 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
e3c07b19 14
15has 'method_constructors' => (
16 is => 'ro',
17 isa => 'HashRef',
18 lazy => 1,
19 default => sub {
20 return +{
21 set => sub {
046c8b5e 22 my ( $attr, $reader, $writer ) = @_;
23 return sub { $writer->( $_[0], $_[1] ) };
e3c07b19 24 },
25 add => sub {
046c8b5e 26 my ( $attr, $reader, $writer ) = @_;
27 return sub { $writer->( $_[0], $reader->( $_[0] ) + $_[1] ) };
e3c07b19 28 },
29 sub => sub {
046c8b5e 30 my ( $attr, $reader, $writer ) = @_;
31 return sub { $writer->( $_[0], $reader->( $_[0] ) - $_[1] ) };
e3c07b19 32 },
33 mul => sub {
046c8b5e 34 my ( $attr, $reader, $writer ) = @_;
35 return sub { $writer->( $_[0], $reader->( $_[0] ) * $_[1] ) };
e3c07b19 36 },
37 div => sub {
046c8b5e 38 my ( $attr, $reader, $writer ) = @_;
39 return sub { $writer->( $_[0], $reader->( $_[0] ) / $_[1] ) };
e3c07b19 40 },
41 mod => sub {
046c8b5e 42 my ( $attr, $reader, $writer ) = @_;
43 return sub { $writer->( $_[0], $reader->( $_[0] ) % $_[1] ) };
e3c07b19 44 },
45 abs => sub {
046c8b5e 46 my ( $attr, $reader, $writer ) = @_;
47 return sub { $writer->( $_[0], abs( $reader->( $_[0] ) ) ) };
e3c07b19 48 },
046c8b5e 49 };
e3c07b19 50 }
51);
52
53no Moose::Role;
54
e3c07b19 551;
56
57=pod
58
59=head1 NAME
60
c466e58f 61Moose::Meta::Attribute::Native::Trait::Number
e3c07b19 62
63=head1 SYNOPSIS
64
65 package Real;
66 use Moose;
e3c07b19 67
68 has 'integer' => (
69 metaclass => 'Number',
70 is => 'ro',
71 isa => 'Int',
2edb73d9 72 default => 5,
9610c1d2 73 handles => {
e3c07b19 74 set => 'set',
75 add => 'add',
76 sub => 'sub',
77 mul => 'mul',
78 div => 'div',
79 mod => 'mod',
80 abs => 'abs',
9610c1d2 81 },
e3c07b19 82 );
83
84 my $real = Real->new();
85 $real->add(5); # same as $real->integer($real->integer + 5);
86 $real->sub(2); # same as $real->integer($real->integer - 2);
87
88=head1 DESCRIPTION
89
90This provides a simple numeric attribute, which supports most of the
91basic math operations.
92
e3c07b19 93=head1 PROVIDED METHODS
94
ace7cdf9 95It is important to note that all those methods do in place modification of the
96value stored in the attribute. These methods are implemented within this
97package.
e3c07b19 98
99=over 4
100
157e0475 101=item B<set($value)>
e3c07b19 102
103Alternate way to set the value.
104
157e0475 105=item B<add($value)>
e3c07b19 106
107Adds the current value of the attribute to C<$value>.
108
157e0475 109=item B<sub($value)>
e3c07b19 110
111Subtracts the current value of the attribute to C<$value>.
112
157e0475 113=item B<mul($value)>
e3c07b19 114
115Multiplies the current value of the attribute to C<$value>.
116
157e0475 117=item B<div($value)>
e3c07b19 118
119Divides the current value of the attribute to C<$value>.
120
157e0475 121=item B<mod($value)>
e3c07b19 122
123Modulus the current value of the attribute to C<$value>.
124
157e0475 125=item B<abs>
e3c07b19 126
127Sets the current value of the attribute to its absolute value.
128
129=back
130
ace7cdf9 131=head1 METHODS
132
133=over 4
134
135=item B<meta>
136
137=item B<method_constructors>
138
139=back
140
e3c07b19 141=head1 BUGS
142
143All complex software has bugs lurking in it, and this module is no
144exception. If you find a bug please either email me, or add the bug
145to cpan-RT.
146
147=head1 AUTHOR
148
149Robert Boone
150
151=head1 COPYRIGHT AND LICENSE
152
153Copyright 2007-2009 by Infinity Interactive, Inc.
154
155L<http://www.iinteractive.com>
156
157This library is free software; you can redistribute it and/or modify
158it under the same terms as Perl itself.
159
160=cut