| Jifty-DBI documentation | Contained in the Jifty-DBI distribution. |
Jifty::DBI::Filter::Boolean - Encodes booleans
Transform the value into 1 or 0 so Perl's concept of the value agrees with the database's concept of the value. (For example, 't' and 'f' might be used in the database, but 'f' is true in Perl)
Transform the value to the canonical true or false value as expected by the database.
| Jifty-DBI documentation | Contained in the Jifty-DBI distribution. |
package Jifty::DBI::Filter::Boolean; use warnings; use strict; use base 'Jifty::DBI::Filter'; use constant TRUE_VALUES => qw(1 t true y yes TRUE); use constant FALSE_VALUES => ('', qw(0 f false n no FALSE)); sub _is_true { my $self = shift; my $value = shift; no warnings 'uninitialized'; for ($self->TRUE_VALUES, map { "'$_'" } $self->TRUE_VALUES) { return 1 if $value eq $_; } return 0; } sub _is_false { my $self = shift; my $value = shift; return 1 if not defined $value; for ($self->FALSE_VALUES, map { "'$_'" } $self->FALSE_VALUES) { return 1 if $value eq $_; } return 0; }
sub decode { my $self = shift; my $value_ref = $self->value_ref; return unless defined $$value_ref; if ($self->_is_true($$value_ref)) { $$value_ref = 1; } elsif ($self->_is_false($$value_ref)) { $$value_ref = 0; } else { $self->handle->log("The value '$$value_ref' does not look like a boolean. Defaulting to false."); $$value_ref = 0; } }
sub encode { my $self = shift; my $value_ref = $self->value_ref; return unless defined($$value_ref) or $self->column->mandatory; return if uc($$value_ref||'') eq "NULL" and not $self->column->mandatory; if ($self->_is_true($$value_ref)) { $$value_ref = $self->handle->canonical_true; } elsif ($self->_is_false($$value_ref)) { $$value_ref = $self->handle->canonical_false; } else { $self->handle->log("The value '$$value_ref' does not look like a boolean. Defaulting to false."); $$value_ref = $self->handle->canonical_false; } }
1;