The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Form::Factory::Feature::Role::InitializeControl;
BEGIN {
  $Form::Factory::Feature::Role::InitializeControl::VERSION = '0.020';
}
use Moose::Role;

requires qw( initialize_control );

=head1 NAME

Form::Factory::Feature::Role::InitializeControl - control features that work on just constructed controls

=head1 VERSION

version 0.020

=head1 SYNOPSIS

  package MyApp::Feature::Control::LoadDBValue;
  use Moose;

  with qw(
      Form::Factory::Feature
      Form::Factory::Feature::Role::Control
      Form::Factory::Feature::Role::InitializeControl
  );

  sub check_control { 
      my ($self, $control) = @_;

      # nasty ducks and they typings
      die "control action has no record"
          unless $control->action->can('record');
  }

  sub initialize_control {
      my $self    = shift;
      my $action  = $self->action;
      my $control = $self->control;

      my $name   = $control->name;
      my $record = $action->record;

      # Set the default value from the record value
      $control->default_value( $record->$name );
  }

  package Form::Factory::Feature::Control::Custom::LoadDatabaseValue;
  sub register_implementation { 'MyApp::Feature::Control::LoadDBValue' }

=head1 DESCRIPTION

This role may be implemented by a control feature that needs to access a control and do something with it immediately after the control has been completely constructed.

The feature must implement the C<initialize_control> method.

=head1 ROLE METHODS

=head2 initialize_control

This method is called on the feature immediately after the control has been completely constructed. This method is called with no arguments and the return value is ignored.

=head1 AUTHOR

Andrew Sterling Hanenkamp C<< <hanenkamp@cpan.org> >>

=head1 COPYRIGHT AND LICENSE

Copyright 2010 Qubling Software LLC.

This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

1;