Data-AnyXfer
view release on metacpan or search on metacpan
lib/Data/AnyXfer/Elastic/Utils.pm view on Meta::CPAN
If being executued within a test environment, the index name is made unique
enough to prevent clashes.
=cut
sub configure_index_name {
my ( $class, $index_name, $hostname, $user ) = @_;
$index_name = $class->_make_unique_name( $index_name, $hostname, $user );
return $index_name;
}
=head2 C<configure_alias_name>
$name = Utils->configure_alias_name('interiors');
$names = Utils->configure_alias_name(['interiors', 'properties']);
print $name; # prints e.g. <user>_<hostname>_<package>_interiors.
If being executued within a test environment, the alias name is made unique
enough to prevent clashes.
=cut
sub configure_alias_name {
my ( $class, $alias_name, $hostname, $user ) = @_;
$alias_name = $class->_make_unique_name( $alias_name, $hostname, $user );
return $alias_name;
}
sub _make_unique_name {
my ( $class, $name, $hostname, $user, $caller ) = @_;
return $name unless Data::AnyXfer->test();
# note: arguement $hostname and $caller are solely for testing purposes
if ( ref($name) eq 'ARRAY' ) {
return [
map { $class->_make_unique_name( $_, $hostname, $user, $caller ) }
@{$name}
];
} else {
return $class->make_safe_name( $name, $hostname, $user, $caller );
}
}
sub make_safe_name {
my ( $self, $name, $hostname, $user, $package ) = @_;
croak "name not supplied" unless $name;
$hostname //= Sys::Hostname::hostname;
$user //= getpwuid($>) || $>;
$package //= $self->_find_test_package_name;
my $safe_name
= join( '_', grep {$_} ( $user, $hostname, $package, $name ) );
# make the name pretty and easy to type
$safe_name =~ s/-/_/g; # some hostnames have dashes in them
return $safe_name;
}
my $TEST_PKG;
sub _find_test_package_name {
my ($class) = @_;
return $TEST_PKG if $TEST_PKG;
my $trace = Devel::StackTrace->new;
my $test_frame;
# search stack for the frame containing the .t test
while ( my $frame = $trace->prev_frame ) {
next
unless $frame->package eq 'main'
&& $frame->filename =~ /\.t$/;
$test_frame = $frame;
last;
}
return unless $test_frame; # failed to find it -- bail out
# found the stack frame containing the .t test
my $file = Path::Class::file( $test_frame->filename );
my $dir = $file->dir->absolute;
# search up through the dir structure until we find the "t" or "xt" dir
while () {
last if $dir->basename eq "t";
last if $dir->basename eq "xt";
last if $dir->basename eq "st";
# selenium tests may not be in a t dir
last if $dir->parent->basename =~ /^selenium/;
# failed -- bail out
return if $dir eq "/";
$dir = $dir->parent;
}
# found the test's package name
$TEST_PKG = $dir->parent->basename;
# make it pretty and easy to type
$TEST_PKG =~ s/\d+//g; # maya puts version number in dir name
$TEST_PKG =~ s/\.//g; # maya puts version number in dir name
$TEST_PKG =~ s/-/_/g; # maya puts dashes in dir name
$TEST_PKG =~ s/_+/_/g; # maya problem: just one _
$TEST_PKG =~ s/_$//g; # maya problem: don't end with a _
$TEST_PKG = lc $TEST_PKG;
( run in 1.890 second using v1.01-cache-2.11-cpan-39bf76dae61 )