=head1 NAME
Templer::Plugin::TimeStamp - A plugin to get TimeStamp of source files
=cut
=head1 SYNOPSIS
The following is a good example use of this plugin
title: About my site
mtime: timestamp(%Y-%m-%d %H:M:%S)
----
<p>This file has been last modified on <!-- tmpl_var name='mtime' -->.
=cut
=head1 DESCRIPTION
This plugin allows template variables to be set to the source file
modification time. The parameter passed to the function are passed as is to
strftime with leading and trailing spaces removed.
=cut
=head1 LICENSE
This module is free software; you can redistribute it and/or modify it
under the terms of either:
a) the GNU General Public License as published by the Free Software
Foundation; either version 2, or (at your option) any later version,
or
b) the Perl "Artistic License".
=cut
=head1 AUTHOR
Bruno BEAUFILS <bruno@boulgour.com>
=cut
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2015 Bruno BEAUFILS <bruno@boulgour.com>.
This library is free software. You can modify and or distribute it under
the same terms as Perl itself.
=cut
=head1 METHODS
=cut
use strict;
use warnings;
use POSIX qw{strftime};
package Templer::Plugin::TimeStamp;
=head2
Constructor. No arguments are required/supported.
=cut
sub new
{
my ( $proto, %supplied ) = (@_);
my $class = ref($proto) || $proto;
my $self = {};
bless( $self, $class );
return $self;
}
=head2 expand_variables
This is the method which is called by the L<Templer::Plugin::Factory>
to expand the variables contained in a L<Templer::Site::Page> object.
Variables are written in the file in the form "key: value", and are
internally stored within the Page object as a hash.
This method iterates over each key & value and updates any that
seem to refer to timestamps.
=cut
sub expand_variables
{
my ( $self, $site, $page, $data ) = (@_);
#
# Get the page-variables in the template.
#
my %hash = %$data;
#
# The mtime of the page-source. Cached.
#
my $mtime;
#
# Look for a value of "timestamp" in each key.
#
foreach my $key ( keys %hash )
{
if ( $hash{ $key } =~ /^timestamp\((.*)\)/ )
{
#
# The format to use.
#
my $ts = $1;
#
# Strip leading/trailing whitespace.
#
$ts =~ s/^\s+|\s+$//g;
#
# Get mtime of the source file - if we've not already done so.
#
if ( !$mtime )
{
$mtime = ( stat( $page->source() ) )[9];
}
#
# Store formatted modification time
#
my @mtime = localtime($mtime);
$hash{ $key } = POSIX::strftime $ts, @mtime;
}
}
#
# Return.
#
return ( \%hash );
}
#
# Register the plugin.
#
Templer::Plugin::Factory->new()->register_plugin("Templer::Plugin::TimeStamp");