Commit | Line | Data |
eb8ff5ad |
1 | package CatalystX::HelpText::Script::SearchUndocumentedHelpText; |
2 | use Moose; |
3 | use Moose::Autobox; |
4 | use MooseX::Types::Path::Class qw/ Dir /; |
5 | use MooseX::Types::Moose qw/Str Undef/; |
6 | use File::Find; |
7 | use Data::Dumper; |
8 | use Getopt::Long::Descriptive; # Force GLD as we override bits.. |
9 | use namespace::autoclean; |
10 | |
11 | has help_files_path => ( |
12 | is => 'ro', |
13 | isa => Dir, |
14 | coerce => 1, |
15 | required => 1, |
16 | handles => { |
17 | _get_file => 'file', |
18 | } |
19 | ); |
20 | |
21 | has template_search_dir => ( |
22 | is => 'ro', |
23 | isa => Str, |
24 | default => './', |
25 | ); |
26 | |
27 | has filename_pattern => ( |
28 | is => 'ro', |
29 | isa => Str, |
30 | default => '\.(html|tt)$', |
31 | ); |
32 | |
33 | has help_files_ext => ( |
34 | is => 'ro', |
35 | isa => Str|Undef, |
36 | default => 'html', |
37 | ); |
38 | |
39 | sub run { |
40 | my ($self) = @_; |
41 | my $filename_pattern = $self->filename_pattern; |
42 | my %helpkeys = (); |
43 | find( |
44 | { |
45 | wanted => sub { |
46 | my $filename = $File::Find::name; |
47 | return unless -f $filename; |
48 | return unless $filename =~ /$filename_pattern/; |
49 | |
ca3ec616 |
50 | #FIXME - Not a regex here, we should actually pass the templates through TT |
51 | # and pass in our own callback! |
52 | # I guess the 'here is a file name, hand me the list of links in it' |
53 | # stuff should be delegated to another class (which is settable by command line) |
54 | # to allow people to have alternative methods of using this |
eb8ff5ad |
55 | open(FILE, $filename) or warn "Can't open $filename\n" && return; |
56 | while (<FILE>) { |
57 | if (my ($key) = m/help_text\('(.*)'\)/o) { |
58 | $helpkeys{$key} = 1; |
59 | } |
60 | } |
61 | close(FILE); |
62 | }, |
63 | bydepth => 1 |
64 | }, $self->template_search_dir->flatten); |
65 | |
66 | my @notfound = (); |
67 | foreach (keys %helpkeys) { |
68 | my $file = $self->_get_file($_); |
69 | $file .= "." . $self->help_files_ext if defined($self->help_files_ext); |
70 | push (@notfound, $file) unless (-e $file); |
71 | } |
ca3ec616 |
72 | # XXX FIXME - This method is way too big! |
73 | # It'd be useless if you wanted to customise it by sub-classing (which we _will_) |
74 | # later want to do as part of our build process! |
75 | # We should have a method to find a list of all the potential files |
76 | # then a for each file method, which calls to the delegate class and |
77 | # then we should build a hash of all the filemame => [qw/ helptext1 helptext 2 /] |
78 | # and then finally we should hand that to a method for pretty printing |
79 | # (and that method needs to unique the finds, which we don't do at the moment) |
eb8ff5ad |
80 | print "\nMissing Help Text files:\n" if (scalar @notfound); |
81 | print " - $_\n" for (@notfound); |
82 | } |
83 | |
84 | with qw/ |
85 | MooseX::Getopt |
86 | /; |
87 | |
88 | __PACKAGE__->meta->make_immutable; |
89 | __PACKAGE__->new_with_options->run unless caller; |
90 | |
91 | 1; |