6 use Test::More tests => 1;
19 sub validate { confess "Abstract method!" }
20 sub error_message { confess "Abstract method!" }
22 sub validation_value {
23 my ($self, $field) = @_;
27 package Constraint::AtLeast;
34 has 'value' => (isa => 'Num', is => 'ro');
37 my ($self, $field) = @_;
38 if ($self->validation_value($field) >= $self->value) {
42 return $self->error_message;
46 sub error_message { 'must be at least ' . (shift)->value; }
48 package Constraint::NoMoreThan;
55 has 'value' => (isa => 'Num', is => 'ro');
58 my ($self, $field) = @_;
59 if ($self->validation_value($field) <= $self->value) {
62 return $self->error_message;
66 sub error_message { 'must be no more than ' . (shift)->value; }
68 package Constraint::OnLength;
73 has 'units' => (isa => 'Str', is => 'ro');
75 override 'value' => sub {
76 return length(super());
79 override 'error_message' => sub {
81 return super() . ' ' . $self->units;
84 package Constraint::LengthNoMoreThan;
89 extends 'Constraint::NoMoreThan';
90 with 'Constraint::OnLength';
92 package Constraint::LengthAtLeast;
97 extends 'Constraint::AtLeast';
98 with 'Constraint::OnLength';