_bool_yn accessor
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 6 Oct 2011 10:20:43 +0000 (12:20 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Mon, 13 Feb 2012 15:26:49 +0000 (16:26 +0100)
SL/DB/Helper/Attr.pm
t/helper/attr.t

index 94b53dd..f7fabfe 100644 (file)
@@ -33,6 +33,7 @@ sub _make_by_type {
   _as_percent($package, $name, places =>  2) if $type =~ /numeric | real | float/xi;
   _as_number ($package, $name, places =>  0) if $type =~ /int/xi;
   _as_date   ($package, $name)               if $type =~ /date | timestamp/xi;
+  _as_bool_yn($package, $name)               if $type =~ /bool/xi;
 }
 
 sub _as_number {
@@ -104,6 +105,23 @@ sub _as_date {
   return 1;
 }
 
+sub _as_bool_yn {
+  my ($package, $attribute, %params) = @_;
+
+  no strict 'refs';
+  *{ $package . '::' . $attribute . '_as_bool_yn' } = sub {
+    my ($self) = @_;
+
+    if (@_ > 1) {
+      die 'not an accessor';
+    }
+
+    return !defined $self->$attribute ? ''
+         :          $self->$attribute ? $::locale->text('Yes')
+         :                              $::locale->text('No');
+  }
+}
+
 1;
 
 
index 3fc0607..5d6238e 100644 (file)
@@ -1,4 +1,4 @@
-use Test::More tests => 29;
+use Test::More tests => 32;
 
 use lib 't';
 
@@ -50,3 +50,13 @@ $i->amount(12);
 $i->netamount(10.34);
 is($i->taxamount_as_number, '1,66');
 
+$o->closed(1);
+is $o->closed_as_bool_yn, 'Ja', 'bool 1';
+$o->closed(0);
+is $o->closed_as_bool_yn, 'Nein', 'bool 2';
+
+# undef test: this only works for columns without default, rose will set
+# defaults according to the database
+$i->taxincluded(undef);
+is $i->taxincluded_as_bool_yn, '', 'bool 3';
+