CVar-Accessor für Optionen und Flags
authorThomas Heck <theck@linet-services.de>
Fri, 3 May 2013 13:54:30 +0000 (15:54 +0200)
committerThomas Heck <theck@linet-services.de>
Tue, 16 Jul 2013 12:23:52 +0000 (14:23 +0200)
SL/DB/CustomVariableConfig.pm

index fd247d8..203f83a 100644 (file)
@@ -25,4 +25,66 @@ sub validate {
   return @errors;
 }
 
+use constant OPTION_DEFAULTS =>
+  {
+    MAXLENGTH => 75,
+    WIDTH => 30,
+    HEIGHT => 5,
+  };
+
+sub processed_options {
+  my ($self) = @_;
+
+  if( exists($self->{processed_options_cache}) ) {
+    return $self->{processed_options_cache};
+  }
+
+  my $ops = $self->options;
+  my $ret;
+
+  if ( $self->type eq 'select' ) {
+    my @op_array = split('##', $ops);
+    $ret = \@op_array;
+  }
+  else {
+    $ret = {%{$self->OPTION_DEFAULTS}};
+    while ( $ops =~ /\s*([^=\s]+)\s*=\s*([^\s]*)(?:\s*|$)/g ) {
+      $ret->{$1} = $2;
+    }
+  }
+
+  $self->{processed_options_cache} = $ret;
+
+  return $ret;
+}
+
+sub processed_flags {
+  my ($self) = @_;
+
+  if( exists($self->{processed_flags_cache}) ) {
+    return $self->{processed_flags_cache};
+  }
+
+  my $flags = $self->flags;
+  my $ret;
+
+  foreach my $flag (split m/:/, $flags) {
+    if ( $flag =~ m/(.*?)=(.*)/ ) {
+      $ret->{$1} = $2;
+    } else {
+      $ret->{$flag} = 1;
+    }
+  }
+
+  $self->{processed_flags_cache} = $ret;
+
+  return $ret;
+}
+
+sub has_flag {
+  my ($self, $flag) = @_;
+
+  return $self->processed_flags()->{$flag};
+}
+
 1;