Ubic
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Ubic/Multiservice/Dir.pm view on Meta::CPAN
package Ubic::Multiservice::Dir;
$Ubic::Multiservice::Dir::VERSION = '1.60';
use strict;
use warnings;
# ABSTRACT: multiservice which uses directory with configs to instantiate services
use parent qw(Ubic::Multiservice);
use Params::Validate qw(:all);
use Carp;
use File::Basename;
use Scalar::Util qw(blessed);
use Ubic::ServiceLoader;
sub new {
my $class = shift;
my ($dir, @options) = validate_pos(@_, 1, 0);
my $options = {};
if (@options) {
$options = validate(@options, {
protected => 0,
});
}
return bless { service_dir => $dir, %$options } => $class;
}
sub has_simple_service {
my $self = shift;
my ($name) = validate_pos(@_, {type => SCALAR, regex => qr/^[\w.-]+$/});
if ($self->_name2file($name)) {
return 1;
}
else {
return;
}
}
sub _filter_files {
my $self = shift;
my @files = @_;
my @filtered;
for my $name (@files) {
# list of taboo extensions is stolen from logrotate(8)
if ($name =~ /(
\.rpmorig |
\.rpmsave |
,v |
\.swp |
\.rpmnew |
~ |
\.cfsaved |
\.rhn-cfg-tmp-.* |
\.dpkg-dist |
\.dpkg-old |
\.dpkg-new |
\.disabled
)$/x
) {
next; # skip silently
}
push @filtered, $name;
}
return @filtered;
}
sub _name2file {
my $self = shift;
my ($name) = @_;
my $base = "$self->{service_dir}/$name";
my @files = glob "$base.*";
unshift @files, $base if -e $base;
@files = $self->_filter_files(@files);
unless (@files) {
return;
}
if (@files > 1) {
for my $file (@files[1 .. $#files]) {
warn "Ignoring duplicate service config '$file', using '$files[0]' instead";
}
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.553 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )