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::Populate;
use Moose::Role;
use Carp qw( croak );
after BUILD => sub {
my ( $self, $args ) = @_;
$args ||= {};
$self->populate($args);
return;
};
sub populate {
my ( $self, $arg_ref ) = @_;
# shallow clone the args so we don't stomp on them
my %args = %$arg_ref;
# we have to handle element_defaults seperately, as it is no longer a
# simple hash key
if ( exists $args{element_defaults} ) {
$self->element_defaults( delete $args{element_defaults} );
}
# notes for @keys...
# 'options', 'values', 'value_range' is for _Group elements,
# to ensure any 'empty_first' value gets set first
my @keys = qw(
default_args
auto_fieldset
load_config_file
element elements
default_values
filter filters
constraint constraints
inflator inflators
deflator deflators
query
validator validators
transformer transformers
plugins
options
values
value_range
);
my %defer;
for (@keys) {
$defer{$_} = delete $args{$_} if exists $args{$_};
}
eval {
map { $self->$_( delete $args{$_} ) } keys %args;
map { $self->$_( $defer{$_} ) }
grep { exists $defer{$_} } @keys;
};
croak $@ if $@;
return $self;
}
1;
|