Form::Factory::Control::Role::BooleanValue - boolean valued controls


Form-Factory documentation Contained in the Form-Factory distribution.

Index


Code Index:

NAME

Top

Form::Factory::Control::Role::BooleanValue - boolean valued controls

VERSION

Top

version 0.020

DESCRIPTION

Top

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.

ATTRIBUTES

Top

true_value

The string value the control should have when the control is_true.

false_value

The string value the control should have when the control is not is_true.

METHODS

Top

is_currently_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.

is_true

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.

current_value

We need to handle current value special.

has_current_value

If the value is true or false, it has a current value. Otherwise, it does not.

AUTHOR

Top

Andrew Sterling Hanenkamp <hanenkamp@cpan.org>

COPYRIGHT AND LICENSE

Top


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;