MooseX-amine

 view release on metacpan or  search on metacpan

bin/mexi  view on Meta::CPAN

#! /opt/perl/bin/perl

# ABSTRACT: An interactive web-based Dancer-powered inspection tool for Moose-based code.
# PODNAME: mexi


use Dancer;
use File::Find::Rule;
use File::ShareDir    qw/ dist_dir /;
use File::Spec;
use Hash::Merge       qw/ merge /;
use Modern::Perl;
use MooseX::amine;
use Template;
use Try::Tiny;

my $dir    = dist_dir('MooseX-amine');
my $public = ( -e './share/public') ? File::Spec->rel2abs('./share/public') : "$dir/public";
my $views  = ( -e './share/views' ) ? File::Spec->rel2abs('./share/views')  : "$dir/views";

set access_log   => 1;
set appdir       => $dir;
set appname      => 'MooseX::amine';
set charset      => "UTF-8";
set layout       => 'main';
set log          => 'warning';
set logger       => 'console';
set public       => $public;
set show_errors  => 1 ;
set template     => 'template_toolkit';
set views        => $views;
set warnings     => 1;

my %standard_mooosex_amine_args = (
  include_private_attributes => 1 ,
  include_private_methods    => 1 ,
);

get '/_list' => sub {
  my $dir   = File::Spec->rel2abs( './' );
  my @files = File::Find::Rule->file()->name('*.pm')->in('./');

  my %tree;
  foreach my $file ( @files ) {
    next if $file =~ /^\./;

    my @parts = split '/' , $file;
    my $hash  = { pop @parts => $file };

    while ( my $part = pop @parts ) {
      my $new_hash = { $part => $hash };
      $hash = $new_hash;
    }

    %tree = %{ merge( $hash , \%tree )  };
  }
  template 'list' => { files => \@files  , tree => \%tree , dir => $dir };
};

get '/_show/name/*' => sub {
  my( $name ) = splat;

  try {
    my $mex = MooseX::amine->new({
      module => $name ,
      %standard_mooosex_amine_args ,
    });
    template 'show' => {
      mex  => $mex->examine ,
      name => $name
    };
  }



( run in 1.364 second using v1.01-cache-2.11-cpan-364913b4093 )