App-Microsite-Assemble
view release on metacpan or search on metacpan
lib/App/Microsite/Assemble.pm view on Meta::CPAN
}
# merge all the config.json's in this hierarchy
sub _merge_config {
my $class = shift;
my $dir = shift;
my $args = shift;
my %config;
my $config_dir = $dir;
while ($args->{templates_dir}->subsumes($config_dir)) {
my $config_file = $config_dir->file($args->{config_name});
if (-e $config_file) {
my $config_contents = $config_file->slurp;
# provide more context for JSON syntax errors
try {
# more specific dirs override config from wrapper dirs
%config = (
%{ from_json($config_contents) },
%config,
);
} catch {
die "Parse error in $config_file:\n $_\n";
};
}
$config_dir = $config_dir->parent;
}
return \%config;
}
1;
__END__
=pod
=head1 NAME
App::Microsite::Assemble - Assemble a microsite with Handlebars
=head1 VERSION
version 0.03
=head1 DESCRIPTION
This module assembles F<templates/> into fully-baked pages.
Your project should contain a F<fragments/> subdirectory, filled with files that contain bits of copy. Any template can use C<{{fragment "copy-file-name"}}> to inline the text from that file.
Subdirectories of F<templates/> can establish a hierarchy of wrappers. For example, you might have F<templates/basic/contact/> which is page C<contact> wrapped by wrapper C<basic>. The F<templates/basic/contact/> directory would have a F<content.hand...
Any directory in the hierarchy can have a F<wrapper.handlebars> which wraps everything below it. So the top-level F<templates/> could have a very generic F<wrapper.handlebars> that sets up C<< <html> >> etc. Subdirectories under F<templates/> can pro...
Similarly, any directory can have a F<config.json> which will combine in the usual way; files deeper in the hierarchy override settings from their upwards directories. Config variables will be provided in the template and its wrappers. This is intend...
You can put partials in any directory under F<templates/> and they will cascade; deeper partials will shadow shallower partials.
Finally, the F<fragments/> directory structure should match F<templates/>. The search path for fragment names works just like everything else.
=head1 AUTHORS
=over 4
=item *
Shawn M Moore <code@sartak.org>
=item *
Michael Reddick <michael.reddick@iinteractive.com>
=back
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Infinity Interactive, Inc..
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
( run in 1.662 second using v1.01-cache-2.11-cpan-ad19def0cd9 )