Attr Helper umgeschrieben auf dnamisch registrierte coderefs.
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 2 Sep 2010 09:27:16 +0000 (11:27 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Wed, 8 Sep 2010 14:03:58 +0000 (16:03 +0200)
SL/DB/Helpers/AttrDate.pm
SL/DB/Helpers/AttrNumber.pm
SL/DB/Helpers/AttrPercent.pm

index fa63388..38d5696 100644 (file)
@@ -10,31 +10,27 @@ sub define {
   my $attribute   = shift;
   my %params      = @_;
 
-  $params{places} = 2 if !defined($params{places});
-
-  my $code        = <<CODE;
-package ${package};
-
-sub ${attribute}_as_date {
-  my \$self = shift;
-
-  if (scalar \@_) {
-    if (\$_[0]) {
-      my (\$yy, \$mm, \$dd) = \$::locale->parse_date(\\\%::myconfig, \@_);
-      \$self->${attribute}(DateTime->new(year => \$yy, month => \$mm, day => \$dd));
-    } else {
-      \$self->${attribute}(undef);
+  no strict 'refs';
+  *{ $package . '::' . $attribute . '_as_date' } = sub {
+    my ($self, $string) = @_;
+
+    if (@_ > 1) {
+      if ($string) {
+        my ($yy, $mm, $dd) = $::locale->parse_date(\%::myconfig, $string);
+        $self->$attribute(DateTime->new(year => $yy, month => $mm, day => $dd));
+      } else {
+        $self->$attribute(undef);
+      }
     }
-  }
-
-  return \$self->${attribute} ? \$::locale->reformat_date({ dateformat => 'yy-mm-dd' }, \$self->${attribute}->ymd, \$::myconfig{dateformat}) : undef;
-}
-
-1;
-CODE
 
-  eval $code;
-  croak "Defining '${attribute}_as_number' failed: $EVAL_ERROR" if $EVAL_ERROR;
+    return $self->$attribute
+      ? $::locale->reformat_date(
+          { dateformat => 'yy-mm-dd' },
+          $self->${attribute}->ymd,
+          $::myconfig{dateformat}
+        )
+      : undef;
+  };
 
   return 1;
 }
index 98acf19..6593fb7 100644 (file)
@@ -12,24 +12,14 @@ sub define {
 
   $params{places} = 2 if !defined($params{places});
 
-  my $code        = <<CODE;
-package ${package};
+  no strict 'refs';
+  *{ $package . '::' . $attribute . '_as_number' } = sub {
+    my ($self, $string) = @_;
 
-sub ${attribute}_as_number {
-  my \$self = shift;
+    $self->$attribute($::form->parse_amount(\%::myconfig, $string)) if @_ > 1;
 
-  if (scalar \@_) {
-    \$self->${attribute}(\$::form->parse_amount(\\\%::myconfig, \$_[0]));
-  }
-
-  return \$::form->format_amount(\\\%::myconfig, \$self->${attribute}, $params{places});
-}
-
-1;
-CODE
-
-  eval $code;
-  croak "Defining '${attribute}_as_number' failed: $EVAL_ERROR" if $EVAL_ERROR;
+    return $::form->format_amount(\%::myconfig, $self->$attribute, $params{places});
+  };
 
   return 1;
 }
index 24f8164..e4c44ae 100644 (file)
@@ -12,24 +12,14 @@ sub define {
 
   $params{places} = 2 if !defined($params{places});
 
-  my $code        = <<CODE;
-package ${package};
+  no strict 'refs';
+  *{ $package . '::' . $attribute . '_as_percent' } = sub {
+    my ($self, $string) = @_;
 
-sub ${attribute}_as_percent {
-  my \$self = shift;
+    $self->$attribute($::form->parse_amount(\%::myconfig, $string) / 100) if @_ > 1;
 
-  if (scalar \@_) {
-    \$self->${attribute}(\$::form->parse_amount(\\\%::myconfig, \$_[0]) / 100);
-  }
-
-  return \$::form->format_amount(\\\%::myconfig, 100 * \$self->${attribute}, $params{places});
-}
-
-1;
-CODE
-
-  eval $code;
-  croak "Defining '${attribute}_as_number' failed: $EVAL_ERROR" if $EVAL_ERROR;
+    return $::form->format_amount(\%::myconfig, 100 * $self->$attribute, $params{places});
+  };
 
   return 1;
 }