App-RecordStream
view release on metacpan or search on metacpan
lib/App/RecordStream/Operation.pm view on Meta::CPAN
elsif ( $capturing ) {
if ( $line =~ m/^\s*$/ ) {
$accumulator .= "\n\n";
}
else {
$line =~ s/^\s*//;
$accumulator .= " $line";
}
}
else {
$output .= $line . "\n";
}
}
return $output;
}
sub init {
}
# subclasses can override to indicate they'll handle their own extra
# args and input in stream_done()
sub wants_input {
return 1;
}
sub does_record_output {
return 1;
}
sub finish {
my $this = shift;
$this->stream_done();
$this->{'NEXT'}->finish();
}
{
my $filename;
sub get_current_filename {
return $filename || 'NONE';
}
sub set_current_filename {
my $name = shift;
$filename = $name;
}
}
sub subclass_should_implement {
my $this = shift;
croak "Subclass should implement: " . ref($this);
}
sub stream_done {
}
sub push_record {
my ($this, $record) = @_;
if ( $this->{'FILENAME_KEY'} ) {
${$record->guess_key_from_spec($this->{'FILENAME_KEY'})} = get_current_filename();
}
return $this->{'NEXT'}->accept_record($record);
}
sub push_line {
my ($this, $line) = @_;
$this->{'NEXT'}->accept_line($line);
}
sub load_operation {
my $script = shift;
my $operation = $script;
die "Script not named recs-*: $script" unless ( $script =~ s/^recs-// );
my @modules = ("App::RecordStream::Operation::$script");
App::RecordStream::Site::bootstrap();
my @sites = sort { $a->{'priority'} <=> $b->{'priority'} } App::RecordStream::Site::list_sites();
for my $site (@sites)
{
unshift @modules, $site->{'path'} . "::Operation::$script";
}
my $module;
my @errors;
for my $try_module (@modules)
{
eval "require $try_module";
if($@) {
if ($@ =~ m/^Please install missing/ ) {
warn $@;
exit 1;
}
push @errors, "Could not load $try_module: $@";
}
else {
$module = $try_module;
last;
}
}
if(!$module) {
die "Could not find operation $script:\n" . join("", @errors);
}
return $module;
}
sub is_recs_operation {
my $script = shift;
if ( $script =~ m/^recs-/ ) {
eval { load_operation($script) };
return 0 if ( $@ );
return 1;
}
return 0;
}
( run in 0.738 second using v1.01-cache-2.11-cpan-39bf76dae61 )