#!/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 specified in the configuration file (normally F). By default, this is F<./public>. Detailed documentation can be found in the L man page or at L. =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 =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;