Class-Sniff
view release on metacpan or search on metacpan
lib/Class/Sniff/App.pm view on Meta::CPAN
package Class::Sniff::App;
use 5.006;
use strict;
use warnings;
use Class::Sniff;
use Getopt::Long 2.24 qw/ :config no_ignore_case /;
use File::Find::Rule;
use File::Spec;
=head1 NAME
Class::Sniff::App - C<cnsiff> support class.
=head1 VERSION
Version 0.10
=cut
our $VERSION = '0.10';
=head1 SYNOPSIS
use Class::Sniff::App;
my $app = Class::Sniff::App->new(@ARGV);
$app->run;
=head1 DESCRIPTION
This class implements the functionality for the C<csniff> executable which
ships with C<Class::Sniff>. See C<perldoc csniff> for more information.
=cut
sub new {
my ( $class, @args ) = @_;
local @ARGV = @args;
my $self = bless {
dirs => undef,
ignore => undef,
namespace => qr/./,
output => undef,
verbose => undef,
} => $class;
GetOptions(
"ignore=s" => \$self->{ignore},
"namespace=s" => \$self->{namespace},
"verbose" => \$self->{verbose},
"png" => sub { $self->{output} = 'png' },
"gif" => sub { $self->{output} = 'gif' },
"output=s" => \$self->{output},
"I=s@" => \$self->{lib},
);
$self->{output} ||= 'txt';
unless ( @ARGV ) {
die "You must supply at least one directory to load for Class::Sniff::App";
}
$self->{dirs} = \@ARGV;
$self->_initialize;
return $self;
}
sub _dirs { @{$_[0]->{dirs}} }
sub _ignore { $_[0]->{ignore} }
sub _graph { $_[0]->{graph} }
sub _namespace { $_[0]->{namespace} }
sub _output { $_[0]->{output} }
sub _verbose { $_[0]->{verbose} }
sub _initialize {
my $self = shift;
$self->{namespace} = qr/$self->{namespace}/
unless 'Regexp' eq ref $self->{namespace};
$self->{ignore} = qr/$self->{ignore}/ if $self->{ignore};
}
sub run {
my $self = shift;
$self->_load_classes;
my $graph = Class::Sniff->graph_from_namespace(
{
namespace => $self->_namespace,
ignore => $self->_ignore,
universal => 1,
clean => 1,
}
);
$self->{graph} = $graph;
my $output = $self->_output;
print $output eq 'txt'
? ( $self->_as_txt )
: ( $self->_as_dot($output) );
}
( run in 1.471 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )