Any-Moose-Convert
view release on metacpan or search on metacpan
lib/Any/Moose/Convert.pm view on Meta::CPAN
package Any::Moose::Convert;
use 5.008_001;
use strict;
use warnings;
our $VERSION = '0.004';
use base qw(Exporter);
our @EXPORT = qw(moose2mouse mouse2moose);
use PerlIO::Util;
use File::Find;
use File::Spec;
use File::Path qw(mkpath);
use File::Basename qw(dirname);
my $IGNORE = qr/\A \. (?: git | svn | cvs | hg) \b/;
sub moose2mouse { _moose2mouse(1, @_) }
sub mouse2moose { _moose2mouse(0, @_) }
sub _moose2mouse {
my $moose2mouse = shift;
my @paths = @_ ? @_ : @ARGV;
my $dry_run;
$dry_run = !!(shift @paths) if $paths[0] eq '--dry-run';
foreach my $file(_expand(@paths)){
my $new_file = $file;
if($moose2mouse){
$new_file =~ s/Moose/Mouse/g;
}
else{
$new_file =~ s/Mouse/Moose/g;
}
if($new_file !~ /^mo[ou]se/){
$new_file = File::Spec->catfile(
$moose2mouse ? 'mouse' : 'moose',
$new_file
);
}
print "$file to $new_file\n";
next if $dry_run;
_do_moose2mouse_to_file($moose2mouse, $file, $new_file);
}
return;
}
sub _expand {
my @files;
foreach my $path(@_){
if(-e $path){
if(-f $path){
push @files, $path;
}
else{
find(sub{
return if !-f $_;
push @files, $File::Find::name;
}, $path);
}
}
else{
die "The path not found: $path\n";
}
}
my %seen;
return grep { !$seen{$_}++ }
map{ File::Spec->abs2rel($_) } @files;
}
sub _do_moose2mouse_to_file {
my($moose2mouse, $file, $new_file) = @_;
my $content;
{
my $in = PerlIO::Util->open('<:raw', $file);
local $/;
$content = <$in>;
}
if($file !~ $IGNORE){
if($moose2mouse){
_convert_moose_to_mouse(\$content);
}
else{
_convert_mouse_to_moose(\$content);
}
}
mkpath(dirname($new_file), 1);
my $out = PerlIO::Util->open('>:raw', $new_file);
print $out $content;
close $out or die "Cannot close '$new_file': $!\n";
return;
}
my $cmop_utils = join '|', qw(
is_class_loaded
load_class
load_first_existing_class
class_of
get_metaclass_by_name
get_code_info
);
( run in 1.073 second using v1.01-cache-2.11-cpan-5b529ec07f3 )