Dist-Zilla-App-Command-regenerate

 view release on metacpan or  search on metacpan

lib/Dist/Zilla/Plugin/Regenerate.pm  view on Meta::CPAN

use 5.006;    # our
use strict;
use warnings;

package Dist::Zilla::Plugin::Regenerate;

our $VERSION = '0.001003';

# ABSTRACT: Write contents to your source tree explicitly

our $AUTHORITY = 'cpan:DBOOK'; # AUTHORITY

use Moose qw( with has around );
use Beam::Event qw();
use Beam::Emitter qw();
use Path::Tiny 0.017 qw( path );
use namespace::clean -except => 'meta';

with qw/ Dist::Zilla::Role::Plugin Dist::Zilla::Role::Regenerator Beam::Emitter /;

has filenames => ( is => 'ro', isa => 'ArrayRef', default => sub { [] }, );

around dump_config => sub {
  my ( $orig, $self, @args ) = @_;
  my $config = $self->$orig(@args);
  my $payload = $config->{ +__PACKAGE__ } = {};
  $payload->{filenames} = $self->filenames;

  ## no critic (RequireInterpolationOfMetachars)
  # Self report when inherited
  $payload->{ q[$] . __PACKAGE__ . '::VERSION' } = $VERSION unless __PACKAGE__ eq ref $self;
  return $config;
};

no Moose;
__PACKAGE__->meta->make_immutable;





sub mvp_multivalue_args { qw( filenames ) }
sub mvp_aliases { +{ filename => 'filenames' } }

sub regenerate {
  my ( $self, $config ) = @_;
  $self->emit( 'before_regenerate', class => 'Dist::Zilla::Event::Regenerate::BeforeRegenerate', %{$config} );

  # Note, that because dzil is build -> dir -> archive -> release
  # regenerate has to pick files from the "dir" target on disk, and can't go through
  # dzil IO
  for my $file ( @{ $self->filenames } ) {
    my $src  = path( $config->{build_root}, $file );
    my $dest = path( $config->{root},       $file );
    $src->copy($dest);
    $self->log("Copied $src to $dest");
  }

  $self->emit( 'after_regenerate', class => 'Dist::Zilla::Event::Regenerate::AfterRegenerate', %{$config} );
}

{
  package    # Hide
    Dist::Zilla::Event::Regenerate::BeforeRegenerate;
  use Moose qw( has extends );
  extends q/Beam::Event/;

  has 'build_root' => ( isa => 'Str', is => 'ro', required => 1 );
  has 'root'       => ( isa => 'Str', is => 'ro', required => 1 );
  no Moose;
  __PACKAGE__->meta->make_immutable;
}
{
  package    # Hide
    Dist::Zilla::Event::Regenerate::AfterRegenerate;
  use Moose qw( has extends );
  extends q/Beam::Event/;

  has 'build_root' => ( isa => 'Str', is => 'ro', required => 1 );
  has 'root'       => ( isa => 'Str', is => 'ro', required => 1 );
  no Moose;



( run in 2.142 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )