App-MiseEnPlace

 view release on metacpan or  search on metacpan

lib/App/MiseEnPlace.pm  view on Meta::CPAN

    [ 'version|V'          => 'show version' ] ,
  );
}

sub validate_args {
  my( $self , $opt , $args ) = @_;

  $self->usage_error( "No args needed" ) if @$args;

  if ( $opt->{version} ) {
    say $App::MiseEnPlace::VERSION;
    exit;
  }

  $self->config_file( $opt->{config} ) if $opt->{config};
  $self->verbose( $opt->{verbose} )    if $opt->{verbose};
}

sub execute {
  my( $self , $opt , $args ) = @_;

lib/App/MiseEnPlace.pm  view on Meta::CPAN

    $msg = colored('ERROR: blocked by non-dirctory','bold white on_red');
  }
  else {
    path( $dir )->mkpath();
    $msg = colored('created','bold black on_green');
  }

  my $home = $self->homedir();
  if ( $msg ) {
    $dir =~ s/^$home/~/;
    say "[ DIR] $msg $dir";
  }
}

sub _create_link {
  my( $self , $linkpair ) = @_;

  my( $src , $target ) = @$linkpair;

  my $msg;

lib/App/MiseEnPlace.pm  view on Meta::CPAN

  }
  else {
    symlink $src , $target;
    $msg = colored( 'created' , 'bold black on_green' );
  }

  my $home = $self->homedir();
  if ( $msg ) {
    $src    =~ s/^$home/~/;
    $target =~ s/^$home/~/;
    say "[LINK] $msg $src -> $target";
  }
}

sub _load_configs {
  my( $self ) = shift;

  unless ( -e $self->config_file() ) {
    say "Whoops, it looks like you don't have a " . $self->config_file() . " file yet.";
    say "Please review the documentation, create one, and try again.";
    exit;
  }

  my $base_config = _load_config_file( $self->config_file() );

  my @links = map { _parse_linkpair( $_ , $self->homedir() ) } @{ $base_config->{create}{links} };

  my @dirs = map { _prepend_dir( $_ , $self->homedir() ) } @{ $base_config->{create}{directories} };

  my @managed_dirs = map { glob _prepend_dir( $_ , $self->homedir() ) } @{ $base_config->{manage} };

lib/App/MiseEnPlace.pm  view on Meta::CPAN

  $self->links( $self->_parse_create_links( \@links ) );
}

sub _load_config_file {
  my $file = shift;

  my $config;

  try { $config = LoadFile( glob($file) ) }
  catch {
    say "Failed to parse config file $file:\n\t$_";
    exit;
  };

  return $config;
}

sub _parse_create_links {
  my( $self, $link_array ) = @_;

  my( %link_targets , @links );

lib/App/MiseEnPlace.pm  view on Meta::CPAN

  for my $link_pair ( @$link_array ) {
    my( $src , $target ) = ( %$link_pair );

    my $src_base = path( $src )->basename();

    $target = $self->bindir() if $target =~ m'BIN$';
    $target = path($target, $src_base)->stringify()
      if path($target)->is_dir() and ! path( $src )->is_dir();

    if (exists $link_targets{$target} ) {
      say "ERROR: Attempting to create multiple links to the same target:";
      printf "%s -> %s\n%s -> %s\n" ,
        $link_targets{$target} , $target , $src , $target;
    }

    $link_targets{$target} = $src;

    push @links , [ $src , $target ];
  }

  return \@links;

lib/App/MiseEnPlace.pm  view on Meta::CPAN

  my $bin = $self->bindir();

  opendir( my $dh , $bin );
  while ( readdir $dh ) {
    my $path = path( $bin , $_ );

    next unless -l $path;

    $path->remove();

    say colored('UNLINK' , 'bright_red' ) , " ~/bin/$_"
      if $opt->{verbose};
  }

  closedir( $dh );
}

1;

__END__



( run in 0.778 second using v1.01-cache-2.11-cpan-a1f116cd669 )