- #!/usr/bin/env perl
-
- =pod
-
- =head1 NAME
-
- wrt-render-all - utility for rendering static HTML files from wrt entries
-
- =head1 USAGE
-
- wrt render-all
- wrt render-all --config ./wrt.json ...
- wrt render-all --help
-
- =head1 DESCRIPTION
-
- Renders all entries in the current wrt archive to the C<publish_dir> specified
- in the configuration file (normally F<wrt.json>). By default, this is
- F<./public>.
-
- Detailed documentation can be found in the L<App::WRT> man page or at
- L<https://code.p1k3.com/gitea/brennen/wrt>.
-
- =head1 LICENSE
-
- wrt is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- =head1 AUTHOR
-
- Brennen Bearnes <code@p1k3.com>
-
- =cut
-
- use 5.10.0;
-
- use strict;
- use warnings;
- no warnings 'uninitialized';
-
- use Getopt::Long;
- use Pod::Usage;
- use Time::HiRes;
- use App::WRT;
- use App::WRT::FileIO;
- use App::WRT::Renderer;
-
- my $start_time = [Time::HiRes::gettimeofday()];
-
- # If invoked directly from the command-line, caller() will return undef.
- # Execute main() with a callback to print output directly, a FileIO object,
- # and a copy of our real @ARGV:
- if (not caller()) {
- my $output = sub { say @_; };
- my $io = App::WRT::FileIO->new();
- main($output, $io, @ARGV);
- exit(0);
- }
-
- # main() takes an output callback, a FileIO object or equivalent, and an @ARGV
- # to pass in to GetOptionsFromArray(). This allows relatively simple
- # integration tests to be written. See also: t/bin-wrt-render-all.t
- sub main {
- my ($output, $io, @local_argv) = @_;
-
- # Handle options, including help generated from the POD above. See:
- # - http://perldoc.perl.org/Getopt/Long.html#User-defined-subroutines-to-handle-options
- # - https://metacpan.org/pod/Pod::Usage
- # - http://michael.thegrebs.com/2014/06/08/Pod-Usage/
- my $config_file = 'wrt.json';
- GetOptions(
- 'config=s' => \$config_file,
- help => sub { pod2usage(0) },
- ) or pod2usage(2);
-
- unless (-e $config_file) {
- die "No wrt config file found. Tried: $config_file";
- }
-
- my $wrt = App::WRT::new_from_file($config_file);
-
- # This expects a callback to handle logging output and a callback to handle
- # file writing:
-
- my $renderer = App::WRT::Renderer->new(
- $wrt,
- $output,
- $io
- );
-
- $renderer->render();
-
- $output->(
- "elapsed: " . Time::HiRes::tv_interval($start_time) . " seconds"
- );
- }
-
- 1;
|