6 use Test::More tests => 1;
20 sub validate { confess "Abstract method!" }
21 sub error_message { confess "Abstract method!" }
23 sub validation_value {
24 my ($self, $field) = @_;
28 package Constraint::AtLeast;
35 has 'value' => (isa => 'Num', is => 'ro');
38 my ($self, $field) = @_;
39 if ($self->validation_value($field) >= $self->value) {
43 return $self->error_message;
47 sub error_message { 'must be at least ' . (shift)->value; }
49 package Constraint::NoMoreThan;
56 has 'value' => (isa => 'Num', is => 'ro');
59 my ($self, $field) = @_;
60 if ($self->validation_value($field) <= $self->value) {
63 return $self->error_message;
67 sub error_message { 'must be no more than ' . (shift)->value; }
69 package Constraint::OnLength;
74 has 'units' => (isa => 'Str', is => 'ro');
76 override 'value' => sub {
77 return length(super());
80 override 'error_message' => sub {
82 return super() . ' ' . $self->units;
85 package Constraint::LengthNoMoreThan;
90 extends 'Constraint::NoMoreThan';
91 with 'Constraint::OnLength';
93 package Constraint::LengthAtLeast;
98 extends 'Constraint::AtLeast';
99 with 'Constraint::OnLength';