Create a helper for dealing with nested attribute sets

This commit is contained in:
Graham Christensen
2021-03-17 11:53:00 -04:00
parent d62a2c1657
commit 88e0198a8e
4 changed files with 136 additions and 1 deletions

View File

@ -0,0 +1,56 @@
package Hydra::Helper::AttributeSet;
use strict;
use warnings;
sub new {
my ($self) = @_;
return bless { "paths" => [] }, $self;
}
sub registerValue {
my ($self, $attributePath) = @_;
my @pathParts = splitPath($attributePath);
pop(@pathParts);
if (scalar(@pathParts) == 0) {
return;
}
my $lineage = "";
for my $pathPart (@pathParts) {
$lineage = $self->registerChild($lineage, $pathPart);
}
}
sub registerChild {
my ($self, $parent, $attributePath) = @_;
if ($parent ne "") {
$parent .= "."
}
my $name = $parent . $attributePath;
if (!grep { $_ eq $name} @{$self->{"paths"}}) {
push(@{$self->{"paths"}}, $name);
}
return $name;
}
sub splitPath {
my ($s) = @_;
if ($s eq "") {
return ('')
}
return split(/\./, $s, -1);
}
sub enumerate {
my ($self) = @_;
my @paths = sort { length($a) <=> length($b) } @{$self->{"paths"}};
return wantarray ? @paths : \@paths;
}
1;

View File

@ -2,8 +2,9 @@ package Hydra::Helper::Escape;
use strict;
use base qw(Exporter);
use Hydra::Helper::AttributeSet;
our @EXPORT = qw(escapeString);
our @EXPORT = qw(escapeString escapeAttributePath);
sub escapeString {
my ($s) = @_;
@ -12,3 +13,9 @@ sub escapeString {
$s =~ s|\$|\\\$|g;
return "\"" . $s . "\"";
}
sub escapeAttributePath {
my ($s) = @_;
return join(".", map( { escapeString($_) } Hydra::Helper::AttributeSet::splitPath($s)));
}