1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
package HTML::FormFu::Role::ContainsElementsSharedWithField;
$HTML::FormFu::Role::ContainsElementsSharedWithField::VERSION = '2.01';
use Moose::Role;
use HTML::FormFu::Util qw(
require_class
_merge_hashes
);
use Carp qw( croak );
use List::MoreUtils qw( none uniq );
use Scalar::Util qw( refaddr weaken );
sub get_error {
my $self = shift;
return if !$self->form->submitted;
my $c = $self->get_errors(@_);
return @$c ? $c->[0] : ();
}
sub _require_constraint {
my ( $self, $type, $arg ) = @_;
croak 'required arguments: $self, $type, \%options' if @_ != 3;
eval { my %x = %$arg };
croak "options argument must be hash-ref" if $@;
my $abs = $type =~ s/^\+//;
my $not = 0;
if ( $type =~ /^Not_(\w+)$/i ) {
$type = $1;
$not = 1;
}
my $class = $type;
if ( !$abs ) {
$class = "HTML::FormFu::Constraint::$class";
}
$type =~ s/^\+//;
require_class($class);
my $constraint = $class->new( {
type => $type,
not => $not,
parent => $self,
} );
# handle default_args
my $parent = $self->parent;
if ( exists $parent->default_args->{constraints}{$type} ) {
$arg = _merge_hashes( $parent->default_args->{constraints}{$type}, $arg,
);
}
$constraint->populate($arg);
return $constraint;
}
1;
|