App-Automaton
view release on metacpan or search on metacpan
lib/App/Automaton.pm view on Meta::CPAN
package App::Automaton;
# ABSTRACT: Execute various tasks based on input from various sources
use strict;
use warnings;
use Moo;
use YAML::Tiny;
use Module::Load;
use Data::Dumper;
has conf => ( is => 'rw' );
has yaml_conf => ( is => 'rw' );
has conf_file => ( is => 'rw' );
has found_bits => ( is => 'rw' );
has debug => ( is => 'rw');
sub BUILD {
my $self = shift;
$self->load_conf();
return 1;
}
sub load_conf {
my $self = shift;
if ( $self->{yaml_conf} ) {
$self->{conf} = YAML::Tiny::Load($self->{yaml_conf});
} elsif ( $self->{conf_file} ) {
$self->{conf} = YAML::Tiny::LoadFile($self->{conf_file}) or die;
}
$self->logger('Loaded config');
return $self->{conf};
}
sub check_sources {
my $self = shift;
my $sources = $self->{conf}->{sources};
foreach my $name (keys %$sources) {
my $source = $sources->{$name};
next if $source->{bypass};
$source->{debug} = $self->{debug};
$self->logger("checking source: $name");
my $mod = 'App::Automaton::Plugin::Source::' . $source->{type};
load $mod;
my $s = eval {$mod->new()};
die $! unless $s;
die $! unless $s->can('go');
push(@{$self->{found_bits}}, $s->go($source));
}
return $1;
}
sub apply_filters {
my $self = shift;
my $filters = $self->{conf}{filters};
foreach my $name (keys %{$filters}) {
my $filter = $filters->{$name};
next if $filter->{bypass};
$filter->{debug} = $self->{debug};
$self->logger("Applying filter: $name");
my $mod = 'App::Automaton::Plugin::Filter::' . $filter->{type};
load $mod;
my $a = eval {$mod->new()};
die $! unless $a;
die $! unless $a->can('go');
( run in 1.351 second using v1.01-cache-2.11-cpan-39bf76dae61 )