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 )