ROLES
[gitmo/Moose.git] / t / 006_basic.t
CommitLineData
b841b2a3 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
471c4f09 6use Test::More tests => 1;
b841b2a3 7use Test::Exception;
8
9BEGIN {
10 use_ok('Moose');
11}
e9bb8a31 12
78cd1d3b 13{
3824830b 14 package Constraint;
15 use strict;
16 use warnings;
17 use Moose;
18
19 sub validate { confess "Abstract method!" }
20 sub error_message { confess "Abstract method!" }
21
22 sub validation_value {
23 my ($self, $field) = @_;
24 return $field->value;
25 }
26
27 package Constraint::AtLeast;
28 use strict;
29 use warnings;
30 use Moose;
31
32 extends 'Constraint';
33
34 has 'value' => (isa => 'Num', is => 'ro');
35
36 sub validate {
37 my ($self, $field) = @_;
38 if ($self->validation_value($field) >= $self->value) {
39 return undef;
40 }
41 else {
42 return $self->error_message;
43 }
44 }
45
46 sub error_message { 'must be at least ' . (shift)->value; }
47
48 package Constraint::NoMoreThan;
49 use strict;
50 use warnings;
51 use Moose;
52
53 extends 'Constraint';
54
55 has 'value' => (isa => 'Num', is => 'ro');
56
57 sub validate {
58 my ($self, $field) = @_;
59 if ($self->validation_value($field) <= $self->value) {
60 return undef;
61 } else {
62 return $self->error_message;
63 }
64 }
65
66 sub error_message { 'must be no more than ' . (shift)->value; }
67
68 package Constraint::OnLength;
69 use strict;
70 use warnings;
71 use Moose::Role;
72
73 has 'units' => (isa => 'Str', is => 'ro');
74
75 override 'value' => sub {
76 return length(super());
77 };
78
79 override 'error_message' => sub {
80 my $self = shift;
81 return super() . ' ' . $self->units;
82 };
83
84 package Constraint::LengthNoMoreThan;
85 use strict;
86 use warnings;
87 use Moose;
88
89 extends 'Constraint::NoMoreThan';
90 with 'Constraint::OnLength';
91
78cd1d3b 92 package Constraint::LengthAtLeast;
93 use strict;
94 use warnings;
95 use Moose;
96
97 extends 'Constraint::AtLeast';
98 with 'Constraint::OnLength';
99}