Allow you to spin this up without the script and get data out programatically more...
Tomas Doran [Wed, 5 Oct 2011 14:05:20 +0000 (15:05 +0100)]
Makefile.PL
lib/CatalystX/HelpText/Script/SearchUndocumentedHelpText.pm

index 6598c42..e610168 100644 (file)
@@ -16,6 +16,8 @@ requires 'Moose::Autobox';
 requires 'MooseX::Types';
 requires 'MooseX::Types::Path::Class';
 requires 'MooseX::Getopt';
+requires 'Template';
+requires 'List::MoreUtils';
 
 build_requires 'Catalyst::Runtime' => '5.80015';
 build_requires 'Catalyst::View::TT' => '0.37';
index 109c5cf..0d16276 100644 (file)
@@ -2,13 +2,13 @@ package CatalystX::HelpText::Script::SearchUndocumentedHelpText;
 use Moose;
 use Moose::Autobox;
 use MooseX::Types::Path::Class qw/ Dir /;
-use MooseX::Types::Moose qw/Str Undef/;
+use MooseX::Types::Moose qw/Str Undef HashRef ArrayRef Bool/;
 use File::Find;
 use Data::Dumper;
 use Getopt::Long::Descriptive; # Force GLD as we override bits..
 use MooseX::Types::LoadableClass qw/ LoadableClass /;
 use Template;
-use Capture::Tiny qw/capture/;
+use List::MoreUtils qw/ uniq /;
 use namespace::autoclean;
 
 has help_files_path => (
@@ -41,20 +41,76 @@ has help_files_ext => (
 
 sub run {
     my ($self) = @_;
-    my $file_vs_keys = {};
-    my $undocumented_keys = {};
-    foreach my $fn ($self->find_files->flatten) {
-        $file_vs_keys->{$fn} = $self->find_helptext_keys($fn);
-        foreach my $key ($file_vs_keys->{$fn}->flatten) {
-            unless ($self->is_there_helptext_file_for_key($key)) {
-                $undocumented_keys->{$key} = 1;
-            }
-        }
-    }
-    $self->print_result([ keys %$undocumented_keys ], $file_vs_keys);
+    $self->print_result();
 }
 
-sub find_files {
+has all_keys => (
+    is => 'ro',
+    isa => ArrayRef[Str],
+    lazy => 1,
+    builder => '_build_all_keys',
+);
+
+sub _build_all_keys {
+    my $self = shift;
+    [ uniq map { $self->_find_helptext_keys_in_fn($_)->flatten } $self->all_files->flatten ];
+}
+
+has keys_to_helptext_exist_map => (
+    isa => HashRef[Bool],
+    lazy => 1,
+    builder => '_build_keys_to_helptext_exist_map',
+    traits => ['Hash'],
+    handles => {
+        does_helptext_exist_for_key => 'get',
+    },
+);
+
+sub _build_keys_to_helptext_exist_map {
+    my $self = shift;
+    return {
+        map { $_ => $self->_helptext_file_for_key_exists($_) }
+        $self->all_keys->flatten
+    };
+}
+
+
+has documented_keys => (
+    isa => ArrayRef[Str],
+    is => 'ro',
+    lazy => 1,
+    default => sub {
+        my $self = shift;
+        [ grep { $self->does_helptext_exist_for_key($_) } $self->all_keys->flatten ];
+    },
+    traits => ['Array'],
+    handles => {
+        has_documented_keys => 'count',
+    },
+);
+
+has undocumented_keys => (
+    isa => ArrayRef[Str],
+    is => 'ro',
+    lazy => 1,
+    default => sub {
+        my $self = shift;
+        [ grep { ! $self->does_helptext_exist_for_key($_) } $self->all_keys->flatten ];
+    },
+    traits => ['Array'],
+    handles => {
+        has_undocumented_keys => 'count',
+    },
+);
+
+has all_files => (
+    isa => ArrayRef[Str],
+    is => 'ro',
+    lazy => 1,
+    builder => '_build_all_files',
+);
+
+sub _build_all_files {
     my ($self) = @_;
     my $filename_pattern = $self->filename_pattern;
     my @files = ();
@@ -71,7 +127,7 @@ sub find_files {
     return [ @files ];
 }
 
-sub find_helptext_keys {
+sub _find_helptext_keys_in_fn {
     my ($self, $fn) = @_;
     my $dir = $self->template_search_dir;
     my @keys = ();
@@ -79,13 +135,12 @@ sub find_helptext_keys {
         INCLUDE_PATH => [ $self->template_search_dir ],
         ABSOLUTE => 1,
     });
-    my ($stdout, $stderr) = capture {
-        $t->process($fn, {  help_text => sub { push @keys, shift } });
-    };
-    return [ @keys ];
+    my $out;
+    $t->process($fn, { help_text => sub { push @keys, shift } }, \$out);
+    return [ uniq @keys ];
 }
 
-sub is_there_helptext_file_for_key {
+sub _helptext_file_for_key_exists {
     my ($self, $key) = @_;
     my $file = $self->_get_file($key);
     $file .= "." . $self->help_files_ext if defined($self->help_files_ext);
@@ -93,10 +148,10 @@ sub is_there_helptext_file_for_key {
 }
 
 sub print_result {
-    my ($self, $undocumented_keys, $file_vs_keys) = @_;
-    if (scalar @$undocumented_keys) {
+    my ($self) = @_;
+    if ($self->has_undocumented_keys) {
         print "Undocumented help text keys: \n";
-        print " - $_" for ($undocumented_keys->flatten);
+        print " - $_\n" for ($self->undocumented_keys->flatten);
     }
 }