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 => (
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 = ();
return [ @files ];
}
-sub find_helptext_keys {
+sub _find_helptext_keys_in_fn {
my ($self, $fn) = @_;
my $dir = $self->template_search_dir;
my @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);
}
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);
}
}