Commit | Line | Data |
667db0bf |
1 | package MooseX::AttributeHelpers::MethodProvider::Number; |
786dbc3d |
2 | use MooseX::AttributeHelpers::MethodProvider; |
667db0bf |
3 | |
4 | our $VERSION = '0.02'; |
5 | our $AUTHORITY = 'cpan:STEVAN'; |
6 | |
786dbc3d |
7 | my %o = (add => '+', sub => '-', mul => '*', div => '/', mod => '%'); |
8 | my %methods = map {my $m = $_; $m => sub { |
9 | my ($attr, $reader, $writer) = @_; |
10 | return eval "sub { \$writer->(\$_[0], \$reader->(\$_[0]) $o{$m} \$_[1]) }"; |
11 | }} (keys %o); |
667db0bf |
12 | |
786dbc3d |
13 | $methods{abs} = sub { |
667db0bf |
14 | my ($attr, $reader, $writer) = @_; |
15 | return sub { $writer->($_[0], CORE::abs($reader->($_[0]))) }; |
786dbc3d |
16 | }; |
667db0bf |
17 | |
786dbc3d |
18 | $methods{set} = sub { |
667db0bf |
19 | my ($attr, $reader, $writer) = @_; |
20 | return sub { $writer->($_[0], $_[1]) }; |
786dbc3d |
21 | }; |
22 | |
23 | add_method_provider Number => ( |
24 | type => 'Num', |
25 | provides => \%methods, |
26 | ); |
667db0bf |
27 | |
28 | 1; |
29 | |
30 | __END__ |
31 | |
32 | =pod |
33 | |
34 | =head1 NAME |
35 | |
36 | MooseX::AttributeHelpers::MethodProvider::Number |
786dbc3d |
37 | |
667db0bf |
38 | =head1 DESCRIPTION |
39 | |
1d458eb8 |
40 | This module provides the method factories for |
667db0bf |
41 | L<MooseX::AttributeHelpers::Number>. |
42 | |
43 | =head1 PROVIDED METHODS |
44 | |
786dbc3d |
45 | All methods but 'set' are plain mathematical operators, as in |
720fa35b |
46 | C<$current_value = $current_value OP $argument> |
47 | where OP is the operator listed next to the method name. |
667db0bf |
48 | |
49 | =over 4 |
50 | |
720fa35b |
51 | =item B<add> + |
667db0bf |
52 | |
720fa35b |
53 | =item B<sub> - |
667db0bf |
54 | |
720fa35b |
55 | =item B<mul> * |
667db0bf |
56 | |
720fa35b |
57 | =item B<div> / |
667db0bf |
58 | |
720fa35b |
59 | =item B<mod> % |
667db0bf |
60 | |
720fa35b |
61 | =item B<abs> |$val|, or $val = abs($value). |
667db0bf |
62 | |
720fa35b |
63 | =item B<set> |
667db0bf |
64 | |
1d458eb8 |
65 | A way to set the value instead of C<setter> or C<is => 'rw'>. This method is |
667db0bf |
66 | provided for convenience. |
67 | |
68 | =back |
69 | |
70 | =head1 BUGS |
71 | |
786dbc3d |
72 | All complex software has bugs lurking in it, and this module is no |
667db0bf |
73 | exception. If you find a bug please either email me, or add the bug |
74 | to cpan-RT. |
75 | |
76 | =head1 AUTHOR |
77 | |
f2b3b8f9 |
78 | Paul Driver E<lt>frodwith@cpan.orgE<gt> |
667db0bf |
79 | |
80 | =head1 COPYRIGHT AND LICENSE |
81 | |
82 | Copyright 2007-2008 by Infinity Interactive, Inc. |
83 | |
84 | L<http://www.iinteractive.com> |
85 | |
86 | This library is free software; you can redistribute it and/or modify |
87 | it under the same terms as Perl itself. |
88 | |
89 | =cut |