Bivio::Type::Boolean
# Copyright (c) 1999-2007 bivio Software, Inc. All rights reserved.
# $Id$
package Bivio::Type::Boolean;
use strict;
use Bivio::Base 'Bivio::Type::Integer';
sub FALSE {
return 0;
}
sub TRUE {
return 1;
}
sub can_be_negative {
return 0;
}
sub can_be_positive {
return 1;
}
sub can_be_zero {
return 1;
}
sub from_literal {
my($res, $err) = shift->SUPER::from_literal(@_);
if ($err) {
my($v) = @_;
if ($v =~ /^\s*(?:y|yes|t|true|on)\s*$/i) {
$res = 1;
}
elsif ($v =~ /^\s*(?:n|no|f|false|off)\s*$/i) {
$res = 0;
}
}
# Booleans are never non-null. Always returns 0 or 1 or error.
return defined($res) ? $res : $err ? ($res, $err) : 0;
}
sub get_decimals {
return 0;
}
sub get_default {
return 0;
}
sub get_max {
return 1;
}
sub get_min {
return 0;
}
sub get_precision {
return 1;
}
sub get_width {
return 1;
}
sub to_json {
return shift->to_xml(shift);
}
sub to_sql_param {
shift;
my($v) = shift;
return !defined($v) ? undef : $v ? '1' : '0';
}
sub to_xml {
my($proto, $value) = @_;
return !defined($value) ? '' : $value ? 'true' : 'false';
}
1;