/util/get_messages.pl

http://github.com/gshank/html-formhandler · Perl · 72 lines · 41 code · 12 blank · 19 comment · 4 complexity · ae22783518461db058f260173fcd6657 MD5 · raw file

  1. #!/usr/bin/env perl
  2. #============================================================
  3. # util/get_messages.pl
  4. #
  5. # This is a utility to pull all of the messages out of the
  6. # FormHandler fields (and the Types package), for easy
  7. # updating of I18N files.
  8. #
  9. # Writes out file util/messages that contains Dumper
  10. # output for current messages, so that changes to messages
  11. # can be tracked.
  12. #
  13. # Could also be used to construct customized messages in the
  14. # form.
  15. #============================================================
  16. use strict;
  17. use warnings;
  18. use Cwd;
  19. use File::Find;
  20. use Class::Load ':all';
  21. use Data::Dumper;
  22. use lib ( getcwd() . '/lib');
  23. my @directories = ( getcwd() . "/lib/HTML/FormHandler/Field" );
  24. my @field_types;
  25. find(\&wanted, @directories);
  26. # get base Field class messages
  27. my $base_messages = $HTML::FormHandler::Field::class_messages;
  28. # get messages from Types module
  29. use HTML::FormHandler::Types;
  30. my $type_messages = $HTML::FormHandler::Types::class_messages;
  31. my $all_messages = [ { 'Field' => { %$base_messages } },
  32. { 'Types' => { %$type_messages } }];
  33. # get messages from the Field classes
  34. foreach my $type (@field_types) {
  35. my $class = "HTML::FormHandler::Field::$type";
  36. my $messages = eval '$HTML::FormHandler::Field::' . $type . '::class_messages';
  37. next unless keys %$messages;
  38. push @$all_messages, { $type => $messages };
  39. }
  40. $Data::Dumper::Terse = 1;
  41. my $output = Dumper($all_messages);
  42. my $outfile = getcwd() . '/util/messages';
  43. open( my $fh, '>', $outfile ) or die "Unable to open $outfile";
  44. print $fh $output;
  45. close $fh;
  46. # you can pull in the arrayref of hashrefs that's written out
  47. my $recovered = eval $output;
  48. sub wanted {
  49. my $type = $_;
  50. return if $type eq '.';
  51. $type =~ s/\.pm$//;
  52. return if $type eq 'Result';
  53. my $field_class = "HTML::FormHandler::Field::$type";
  54. if( try_load_class( $field_class ) ) {
  55. push @field_types, $type;
  56. }
  57. else {
  58. print "did not load $type\n";
  59. }
  60. }