~ubuntu-branches/ubuntu/intrepid/libclass-meta-perl/intrepid

« back to all changes in this revision

Viewing changes to lib/Class/Meta/Types/Numeric.pm

  • Committer: Bazaar Package Importer
  • Author(s): Krzysztof Krzyzaniak (eloy)
  • Date: 2006-01-03 17:29:20 UTC
  • Revision ID: james.westby@ubuntu.com-20060103172920-h94p8qrrav90bzq0
Tags: upstream-0.52
ImportĀ upstreamĀ versionĀ 0.52

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package Class::Meta::Types::Numeric;
 
2
 
 
3
# $Id: Numeric.pm 2405 2005-12-17 03:41:09Z theory $
 
4
 
 
5
=head1 NAME
 
6
 
 
7
Class::Meta::Types::Numeric - Numeric data types
 
8
 
 
9
=head1 SYNOPSIS
 
10
 
 
11
  package MyApp::Thingy;
 
12
  use strict;
 
13
  use Class::Meta;
 
14
  use Class::Meta::Types::Numeric;
 
15
  # OR...
 
16
  # use Class::Meta::Types::Numeric 'affordance';
 
17
  # OR...
 
18
  # use Class::Meta::Types::Numeric 'semi-affordance';
 
19
 
 
20
  BEGIN {
 
21
      # Create a Class::Meta object for this class.
 
22
      my $cm = Class::Meta->new( key => 'thingy' );
 
23
 
 
24
      # Add an integer attribute.
 
25
      $cm->add_attribute( name => 'age',
 
26
                          type => 'integer' );
 
27
      $cm->build;
 
28
  }
 
29
 
 
30
=head1 DESCRIPTION
 
31
 
 
32
This module provides numeric data types for use with Class::Meta attributes.
 
33
Simply load it, then pass the name of one of its types to the
 
34
C<add_attribute()> method of a Class::Meta object to create attributes of the
 
35
numeric data type. See L<Class::Meta::Type|Class::Meta::Type> for more
 
36
information on using and creating data types.
 
37
 
 
38
The validation checks for Class::Meta::Types::Numeric are provided by the
 
39
Data::Types module. Consult its documentation to find out what it considers to
 
40
be a number and what's not.
 
41
 
 
42
The data types created by Class::Meta::Types::Numeric are:
 
43
 
 
44
=over
 
45
 
 
46
=item whole
 
47
 
 
48
A whole number. That is, a positive integer.
 
49
 
 
50
=item integer
 
51
 
 
52
=item int
 
53
 
 
54
An integer number.
 
55
 
 
56
=item decimal
 
57
 
 
58
=item dec
 
59
 
 
60
A decimal number.
 
61
 
 
62
=item real
 
63
 
 
64
A real number.
 
65
 
 
66
=item float
 
67
 
 
68
A floating point number.
 
69
 
 
70
=back
 
71
 
 
72
=cut
 
73
 
 
74
use strict;
 
75
use Class::Meta::Type;
 
76
use Data::Types ();
 
77
our $VERSION = "0.52";
 
78
 
 
79
# This code ref builds value checkers.
 
80
my $mk_chk = sub {
 
81
    my ($code, $type) = @_;
 
82
    return [
 
83
        sub {
 
84
            return unless defined $_[0];
 
85
            $code->($_[0])
 
86
              or $_[2]->class->handle_error("Value '$_[0]' is not a valid "
 
87
                                              . "$type");
 
88
            }
 
89
    ];
 
90
};
 
91
 
 
92
##############################################################################
 
93
sub import {
 
94
    my ($pkg, $builder) = @_;
 
95
    $builder ||= 'default';
 
96
    return if eval "Class::Meta::Type->new('whole')";
 
97
 
 
98
    Class::Meta::Type->add(
 
99
        key     => "whole",
 
100
        name    => "Whole Number",
 
101
        desc    => "Whole number",
 
102
        builder => $builder,
 
103
        check   => $mk_chk->(\&Data::Types::is_whole, 'whole number'),
 
104
    );
 
105
 
 
106
    Class::Meta::Type->add(
 
107
        key     => "integer",
 
108
        name    => "Integer",
 
109
        desc    => "Integer",
 
110
        alias   => 'int',
 
111
        builder => $builder,
 
112
        check   => $mk_chk->(\&Data::Types::is_int, 'integer'),
 
113
    );
 
114
 
 
115
    Class::Meta::Type->add(
 
116
        key     => "decimal",
 
117
        name    => "Decimal Number",
 
118
        desc    => "Decimal number",
 
119
        alias   => 'dec',
 
120
        builder => $builder,
 
121
        check   => $mk_chk->(\&Data::Types::is_decimal, 'decimal number'),
 
122
    );
 
123
 
 
124
    Class::Meta::Type->add(
 
125
        key     => "real",
 
126
        name    => "Real Number",
 
127
        desc    => "Real number",
 
128
        builder => $builder,
 
129
        check   => $mk_chk->(\&Data::Types::is_real, 'real number'),
 
130
    );
 
131
 
 
132
    Class::Meta::Type->add(
 
133
        key     => "float",
 
134
        name    => "Floating Point Number",
 
135
        desc    => "Floating point number",
 
136
        builder => $builder,
 
137
        check   => $mk_chk->(\&Data::Types::is_float, 'floating point number'),
 
138
    );
 
139
}
 
140
 
 
141
1;
 
142
__END__
 
143
 
 
144
=head1 BUGS
 
145
 
 
146
Please send bug reports to <bug-class-meta@rt.cpan.org> or report them via the
 
147
CPAN Request Tracker at L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Class-Meta>.
 
148
 
 
149
=head1 AUTHOR
 
150
 
 
151
David Wheeler <david@kineticode.com>
 
152
 
 
153
=head1 SEE ALSO
 
154
 
 
155
Other classes of interest within the Class::Meta distribution include:
 
156
 
 
157
=over 4
 
158
 
 
159
=item L<Class::Meta|Class::Meta>
 
160
 
 
161
This class contains most of the documentation you need to get started with
 
162
Class::Meta.
 
163
 
 
164
=item L<Class::Meta::Type|Class::Meta::Type>
 
165
 
 
166
This class manages the creation of data types.
 
167
 
 
168
=item L<Class::Meta::Attribute|Class::Meta::Attribute>
 
169
 
 
170
This class manages Class::Meta class attributes, all of which are based on
 
171
data types.
 
172
 
 
173
=back
 
174
 
 
175
Other data type modules:
 
176
 
 
177
=over 4
 
178
 
 
179
=item L<Class::Meta::Types::Perl|Class::Meta::Types::Perl>
 
180
 
 
181
=item L<Class::Meta::Types::String|Class::Meta::Types::String>
 
182
 
 
183
=item L<Class::Meta::Types::Boolean|Class::Meta::Types::Boolean>
 
184
 
 
185
=back
 
186
 
 
187
=head1 COPYRIGHT AND LICENSE
 
188
 
 
189
Copyright (c) 2002-2005, David Wheeler. All Rights Reserved.
 
190
 
 
191
This module is free software; you can redistribute it and/or modify it under
 
192
the same terms as Perl itself.
 
193
 
 
194
=cut