Skip to content

Commit

Permalink
tidy
Browse files Browse the repository at this point in the history
  • Loading branch information
kentfredric committed Aug 25, 2011
1 parent 3dfa94d commit 60d1817
Showing 1 changed file with 67 additions and 63 deletions.
130 changes: 67 additions & 63 deletions util/sniff_meta_json.pl
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,20 @@

use strict;
use warnings;

# FILENAME: sniff_meta_json.pl
# CREATED: 25/08/11 16:11:55 by Kent Fredric (kentnl) <kentfredric@gmail.com>
# ABSTRACT: Scrape the dists code and make a API representation in JSON

use Path::Class::Dir;
use Path::Class::File;

my ( $util_dir, $project_root, $libs );
my ($util_dir, $project_root, $libs);

BEGIN {
$util_dir = Path::Class::File->new(__FILE__)->parent;
$project_root = $util_dir->parent;
$libs = $project_root->subdir('lib');
$util_dir = Path::Class::File->new(__FILE__)->parent;
$project_root = $util_dir->parent;
$libs = $project_root->subdir('lib');
}

use lib $libs->absolute->stringify;
Expand All @@ -23,57 +24,58 @@ BEGIN

use Package::Stash;


sub i_package {
my ( $file, $package ) = @_;

my $stash = Package::Stash->new( $package );

if( not exists $data{$file} ){
$data{$file} = {};
}

if ( not exists $data{$file}->{packages} ){
$data{$file}->{packages} = {};
}
my $symbols = $stash->get_all_symbols;
$data{$file}->{packages}->{$package} = {
# symbols => [ keys %{$symbols} ],
#isa => $stash->get_symbol('@ISA'),

};

my $meta = $symbols->{meta};
if ( $meta ){
#$data{$file}->{packages}->{$package}->{meta}->{isa} = $package->meta . "";
}
if ( $meta and $package->meta->isa( 'Moose::Meta::Class' ) ) {
$data{$file}->{packages}->{$package}->{properties}->{class} = $package->meta . "";

$data{$file}->{packages}->{$package}->{roles} = [ map { $_->name } $package->meta->calculate_all_roles_with_inheritance] ;
$data{$file}->{packages}->{$package}->{superclasses} = [ map { $_ ."" } $package->meta->superclasses] ;
$data{$file}->{packages}->{$package}->{immutable} = $package->meta->is_immutable;
$data{$file}->{packages}->{$package}->{pristine} = $package->meta->is_pristine;
$data{$file}->{packages}->{$package}->{linearized_isa} = [ $package->meta->linearized_isa ];
$data{$file}->{packages}->{$package}->{subclasses} = [ $package->meta->subclasses];
$data{$file}->{packages}->{$package}->{direct_subclasses} = [ $package->meta->subclasses];
$data{$file}->{packages}->{$package}->{methods} = [ $package->meta->get_method_list ];
$data{$file}->{packages}->{$package}->{all_methods} = [ $package->meta->get_all_method_names ];
$data{$file}->{packages}->{$package}->{attributes} = [ map { $_ } $package->meta->get_attribute_list ];
$data{$file}->{packages}->{$package}->{all_attributes} = [ map { $_->name } $package->meta->get_all_attributes ];


}
if ( $meta and $package->meta->isa( 'Moose::Meta::Role' ) ) {
$data{$file}->{packages}->{$package}->{properties}->{role} = $package->meta . "";
$data{$file}->{packages}->{$package}->{consumers} [ map { $_ . "" } $package->meta->consumers ];
$data{$file}->{packages}->{$package}->{own_roles} = [ map { $_->name } @{$package->meta->get_roles}] ;
# $data{$file}->{packages}->{$package}->{roles} = [ map { $_->name } $package->meta->calculate_all_roles] ;
$data{$file}->{packages}->{$package}->{requires} = [ map { $_ . "" } $package->meta->get_required_method_list ];
$data{$file}->{packages}->{$package}->{methods} = [ $package->meta->get_method_list ];
$data{$file}->{packages}->{$package}->{attributes} = [ $package->meta->get_attribute_list ];

}
my ($file, $package) = @_;

my $stash = Package::Stash->new($package);

if (not exists $data{$file}) {
$data{$file} = {};
}

if (not exists $data{$file}->{packages}) {
$data{$file}->{packages} = {};
}
my $symbols = $stash->get_all_symbols;
$data{$file}->{packages}->{$package} = {

# symbols => [ keys %{$symbols} ],
#isa => $stash->get_symbol('@ISA'),

};

my $meta = $symbols->{meta};
if ($meta) {

#$data{$file}->{packages}->{$package}->{meta}->{isa} = $package->meta . "";
}
if ($meta and $package->meta->isa('Moose::Meta::Class')) {
$data{$file}->{packages}->{$package}->{properties}->{class} = $package->meta . "";

$data{$file}->{packages}->{$package}->{roles} = [map { $_->name } $package->meta->calculate_all_roles_with_inheritance];
$data{$file}->{packages}->{$package}->{superclasses} = [map { $_ . "" } $package->meta->superclasses];
$data{$file}->{packages}->{$package}->{immutable} = $package->meta->is_immutable;
$data{$file}->{packages}->{$package}->{pristine} = $package->meta->is_pristine;
$data{$file}->{packages}->{$package}->{linearized_isa} = [$package->meta->linearized_isa];
$data{$file}->{packages}->{$package}->{subclasses} = [$package->meta->subclasses];
$data{$file}->{packages}->{$package}->{direct_subclasses} = [$package->meta->subclasses];
$data{$file}->{packages}->{$package}->{methods} = [$package->meta->get_method_list];
$data{$file}->{packages}->{$package}->{all_methods} = [$package->meta->get_all_method_names];
$data{$file}->{packages}->{$package}->{attributes} = [map { $_ } $package->meta->get_attribute_list];
$data{$file}->{packages}->{$package}->{all_attributes} = [map { $_->name } $package->meta->get_all_attributes];

}
if ($meta and $package->meta->isa('Moose::Meta::Role')) {
$data{$file}->{packages}->{$package}->{properties}->{role} = $package->meta . "";
$data{$file}->{packages}->{$package}->{consumers}[map { $_ . "" } $package->meta->consumers];
$data{$file}->{packages}->{$package}->{own_roles} = [map { $_->name } @{$package->meta->get_roles}];

# $data{$file}->{packages}->{$package}->{roles} = [ map { $_->name } $package->meta->calculate_all_roles] ;
$data{$file}->{packages}->{$package}->{requires} = [map { $_ . "" } $package->meta->get_required_method_list];
$data{$file}->{packages}->{$package}->{methods} = [$package->meta->get_method_list];
$data{$file}->{packages}->{$package}->{attributes} = [$package->meta->get_attribute_list];

}

}
my @probe_pkg;
Expand All @@ -85,32 +87,34 @@ sub i_package {
my $fh = $file->openr();
my $package;
my $objects = 0;
my %stash = (
filename => $file->relative( $project_root )->stringify,
my %stash = (
filename => $file->relative($project_root)->stringify,
);
my $filename = $file->relative('.')->stringify;

print "\e[32m$filename\e[0m\n";
eval {
require $filename;
require $filename;
} or warn "$@";

while (my $line = <$fh>) {
if ($line =~ /^package\s*(\S+);/) {
push @probe_pkg, [ $file, $1 ];
push @probe_pkg, [$file, $1];

#i_package( $file, $1 );
next;
}
if ($line =~ /^##\s*package\s+(\S)+/ ){
push @probe_pkg, [ $file, $1 ];
#i_package( $file, $1);
if ($line =~ /^##\s*package\s+(\S)+/) {
push @probe_pkg, [$file, $1];

#i_package( $file, $1);
next;
}
}
return;
});
for my $probe ( @probe_pkg ){
i_package( @{ $probe });
for my $probe (@probe_pkg) {
i_package(@{$probe});
}

use JSON;
Expand Down

0 comments on commit 60d1817

Please sign in to comment.