| Form-Factory documentation | Contained in the Form-Factory distribution. |
Form::Factory::Control::Role::BooleanValue - boolean valued controls
version 0.020
Controls that implement this role have a boolean value. This say much about how that is actually implemented, just that is has a true_value a false_value and then a flag stating whether the true value or false value is currently selected.
The string value the control should have when the control is_true.
The string value the control should have when the control is not is_true.
Returns a true value when the current_value is set to true_value or a false value when the current_value is set to false_value.
This method returns undef if it is neither true nor false.
If passed a value, e.g.:
$self->is_currently_true(1);
This will set the current_value. If a true value is given, the value will be set to true_value. Otherwise, it will cause the current_value to take on the contents of false_value.
Returns a true value when the value is set to true_value or a false value when the value is set to false_value.
This method returns undef if it is neither true nor false.
Unlikely is_currently_true, this may not be used as a setter.
We need to handle current value special.
If the value is true or false, it has a current value. Otherwise, it does not.
Andrew Sterling Hanenkamp <hanenkamp@cpan.org>
Copyright 2009 Qubling Software LLC.
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.
| Form-Factory documentation | Contained in the Form-Factory distribution. |
package Form::Factory::Control::Role::BooleanValue; BEGIN { $Form::Factory::Control::Role::BooleanValue::VERSION = '0.020'; } use Moose::Role; excludes qw( Form::Factory::Control::Role::ListValue Form::Factory::Control::Role::ScalarValue );
has true_value => ( is => 'ro', required => 1, default => 1, );
has false_value => ( is => 'ro', required => 1, default => '', );
sub _is_it_true { my ($self, $value) = @_; # blow off these warnings rather than test for them no warnings 'uninitialized'; return 1 if $value eq $self->true_value; return '' if $value eq $self->false_value; return scalar undef; } sub is_currently_true { my $self = shift; if (@_) { my $is_true = shift; $self->current_value($is_true ? $self->true_value : $self->false_value); } return $self->_is_it_true($self->value) if $self->has_value; return $self->_is_it_true($self->default_value) if $self->has_default_value; return scalar undef; }
sub is_true { my $self = shift; return $self->_is_it_true($self->value); }
around current_value => sub { my $next = shift; my $self = shift; my $truth = $self->is_currently_true; $self->value(@_) if @_; if ($truth) { return $self->true_value; } elsif (defined $truth) { return $self->false_value; } else { return scalar undef; } };
around has_current_value => sub { my $next = shift; my $self = shift; return defined $self->is_currently_true; };
1;