diff --git a/lib/HTML/FormHandler/Field.pm b/lib/HTML/FormHandler/Field.pm index abe646a9..8e95a6ab 100644 --- a/lib/HTML/FormHandler/Field.pm +++ b/lib/HTML/FormHandler/Field.pm @@ -128,6 +128,13 @@ has 'value' => ( is => 'rw', clearer => 'clear_value', predicate => 'has_value', + trigger => sub { + my ( $self, $value ) = @_; + $self->fif( $self->fif_value($value) ) + unless ( ( $self->password && $self->password == 1 ) + || $self->has_fields ); + return $value; + } ); =head2 parent @@ -164,6 +171,12 @@ has 'input' => ( is => 'rw', clearer => 'clear_input', predicate => 'has_input', + trigger => sub { + my ( $self, $input ) = @_; + $self->fif($input) + unless ( $self->password && $self->password == 1 ); + return $input; + } ); =head2 input_without_param @@ -189,24 +202,7 @@ input parameters. The normal use would be to access this field from a template: =cut -has 'fif' => ( - is => 'rw', - clearer => 'clear_fif', - predicate => 'has_fif', - lazy_build => 1, -); - -sub _build_fif { - my $self = shift; - return if( defined $self->password && $self->password == 1 ); - if( defined $self->input ){ - return $self->input; - } - if( defined $self->value ){ - return $self->value; - } - return; -} +has 'fif' => ( is => 'rw', clearer => 'clear_fif', predicate => 'has_fif' ); =head2 accessor @@ -885,7 +881,7 @@ sub process $field->_apply_actions; -# $field->_build_fif if $field->can('_build_fif'); + $field->_build_fif if $field->can('_build_fif'); return if $field->has_errors; return unless $field->validate; return unless $field->test_ranges; diff --git a/lib/HTML/FormHandler/Model/DBIC.pm b/lib/HTML/FormHandler/Model/DBIC.pm index 0087f2a0..df990194 100644 --- a/lib/HTML/FormHandler/Model/DBIC.pm +++ b/lib/HTML/FormHandler/Model/DBIC.pm @@ -437,7 +437,6 @@ sub init_value } $field->init_value($value); $field->value($value); - $field->fif($value); } sub _fix_value diff --git a/t/fif.t b/t/fif.t index 8fa8fa50..35ecf5fe 100644 --- a/t/fif.t +++ b/t/fif.t @@ -66,9 +66,7 @@ ok( !$form->field('author')->has_input, 'no input for field'); $form->clear_state; ok( !$form->fif, 'clear_state clears fif' ); -warn $form->field('author')->value; -warn $form->field('author')->input; -warn Dumper( $form->fif ); use Data::Dumper; + my $params = { title => 'Testing form', @@ -77,6 +75,7 @@ my $params = { author => 'J.Doe', publisher => '', }; + $form = BookDB::Form::Book->new(item => $book, schema => $schema, params => $params); $validated = $form->validate( $params ); diff --git a/t/filters.t b/t/filters.t index 1483bcfb..4d15d1df 100644 --- a/t/filters.t +++ b/t/filters.t @@ -109,7 +109,7 @@ is( ref $form->field('date_coercion_pass')->value, 'DateTime', 'values coerced ok( $form->field('date_coercion_error')->has_errors, 'DateTime coercion error' ); my ( $message ) = $form->field('date_coercion_error')->errors; is( $message, 'This is not a correct date', 'Error message for coercion' ); -#$params->{coerce_pass} = '10'; -#$params->{sprintf_filter} = '<1e+02>'; +$params->{coerce_pass} = '10'; +$params->{sprintf_filter} = '<1e+02>'; is_deeply( $form->fif, $params, 'fif is correct' ); diff --git a/t/password.t b/t/password.t index ef467c77..5ff4954d 100644 --- a/t/password.t +++ b/t/password.t @@ -29,12 +29,11 @@ is( $field->password, undef, 'password is not set'); $field->value('abcdef'); is( $field->value, 'abcdef', 'set and get value' ); + is( $field->fif, 'abcdef', 'get fif'); -$field->clear_fif; $field->value(undef); is( $field->fif, undef, 'get undef fif' ); -$field->clear_fif; $field->input('xyz'); is( $field->fif, 'xyz', 'get fif from input');