| PPIx-EditorTools documentation | Contained in the PPIx-EditorTools distribution. |
my $munged = PPIx::EditorTools::RenamePackageFromPath->new->rename(
code => "package TestPackage;\nuse strict;\nBEGIN {
$^W = 1;
}\n1;\n",
filename => './lib/Test/Code/Path.pm',
);
my $new_code_as_string = $munged->code;
my $package_ppi_element = $munged->element;
This module uses PPI to change the package name of code.
Constructor. Generally shouldn't be called with any arguments.
Accepts either a PPI::Document to process or a string containing
the code (which will be converted into a PPI::Document) to process.
Replaces the package name with that supplied in the filename
parameter and returns a PPIx::EditorTools::ReturnObject with the
new code available via the ppi or code accessors, as a
PPI::Document or string, respectively.
An attempt will be made to derive the package name from the filename passed
as a parameter. The filename's path will converted to an absolute path and
it will be searched for a lib directory which will be assumed the start
of the package name. If no lib directory can be found in the absolute
path, the relative path will be used.
Croaks with a "package name not found" exception if unable to find the package name.
This class inherits from PPIx::EditorTools.
Also see App::EditorTools, Padre, and PPI.
| PPIx-EditorTools documentation | Contained in the PPIx-EditorTools distribution. |
package PPIx::EditorTools::RenamePackageFromPath; # ABSTRACT: Change the package name based on the files path use 5.008; use strict; use warnings; use Carp; use Class::XSAccessor accessors => { 'replacement' => 'replacement', 'filename' => 'filename', }; use base 'PPIx::EditorTools'; use PPIx::EditorTools::RenamePackage; use Carp; use File::Spec; use File::Basename; our $VERSION = '0.15';
sub rename { my ( $self, %args ) = @_; $self->process_doc(%args); my $path = $args{filename} || croak "filename required"; my $dir = dirname $path; my $file = basename $path, qw/.pm .PM .Pm/; my @directories = grep { $_ && !/^\.$/ } File::Spec->splitdir( File::Spec->rel2abs($dir) ); my $replacement; if ( grep {/^lib$/} @directories ) { while ( shift(@directories) !~ /^lib$/ ) { } } else { @directories = grep { $_ && !/^\.$/ } File::Spec->splitdir($dir); } $replacement = join( '::', @directories, $file ); return PPIx::EditorTools::RenamePackage->new( ppi => $self->ppi )->rename( replacement => $replacement ); } 1; __END__