package HTML::FormHandler::Foo; # ABSTRACT: Experiment in loading form from config file $HTML::FormHandler::Foo::VERSION = '0.40068'; use Moose; extends 'HTML::FormHandler'; with 'HTML::FormHandler::Render::WithTT'; use Config::Any; has 'form_error_message' => ( isa => 'Str', is => 'rw' ); has 'javascript_src' => ( isa => 'Str', is => 'rw' ); has 'javascript' => ( isa => 'Str', is => 'rw' ); sub before_build { my $self = shift; $self->add_tt_include_path('share/templates/foo'); $self->process_config_file; $self->process_config; } sub build_tt_template { 'form.tt' } has 'config_file' => ( isa => 'Str', is => 'rw' ); has 'config' => ( isa => 'HashRef', is => 'rw' ); sub submitted_and_valid { shift->validated } sub process_config_file { my $self = shift; return unless $self->config_file; unless ( -e $self->config_file ) { die "form config file " . $self->config_file . " . does not exist"; } my $config = Config::Any->load_files({ files => [$self->config_file], use_ext => 1, driver_args => { General => { -UTF8 => 1 }, }, }); $config = $config->[0]->{$self->config_file}; $self->config($config); } sub process_config { my $self = shift; my $config = $self->config; while ( my ( $key, $value ) = each %{$config} ) { confess "invalid attribute '$key' in form config" unless $self->can($key); $self->$key($value); } } __PACKAGE__->meta->make_immutable; use namespace::autoclean; 1; __END__ =pod =encoding UTF-8 =head1 NAME HTML::FormHandler::Foo - Experiment in loading form from config file =head1 VERSION version 0.40068 =head1 AUTHOR FormHandler Contributors - see HTML::FormHandler =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2017 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut