package Solution::Tag::Dump; { $Solution::Tag::Dump::VERSION = 'v1.0.0' } use Carp qw[confess]; use base 'Template::Liquid::Tag'; sub import { Template::Liquid::register_tag('dump') } sub new { my ($class, $args, $tokens) = @_; confess 'Missing template' if !defined $args->{'template'}; $args->{'attrs'} ||= '.'; my $s = bless {name => 'dump-' . $args->{'attrs'}, tag_name => $args->{'tag_name'}, variable => $args->{'attrs'}, template => $args->{'template'}, parent => $args->{'parent'}, }, $class; return $s; } sub render { my $s = shift; my $var = $s->{'variable'}; $var = $var eq '.' ? $s->{template}{context}{scopes} : $var eq '.*' ? [$s->{template}{context}{scopes}] : $s->{template}{context}->resolve($var); if (eval { require Data::Dump }) { return Data::Dump::pp($var); } else { require Data::Dumper; return Data::Dumper::Dumper($var); } return ''; } 1; =pod =head1 NAME Solution::Tag::Dump - Simple Perl Structure Dumping Tag (Functioning Custom Tag Example) =head1 Synopsis {% dump var %} =head1 Description This is a dead simple demonstration of L. This tag attempts to use L and L to create stringified versions of data structures... use Template::Liquid; use Solution::Tag::Dump; warn Template::Liquid->parse("{%dump env%}")->render(env => \%ENV); ...or the entire current scope with C<.>... use Template::Liquid; use Solution::Tag::Include; warn Template::Liquid->parse('{%dump .%}') ->render(env => \%ENV, inc => \@INC); ...or the entire stack of scopes with C<.*>... use Template::Liquid; use Solution::Tag::Include; warn Template::Liquid->parse('{%for x in (1..1) %}{%dump .*%}{%endfor%}') ->render(); =head1 Notes This is a 5m hack and is subject to change ...I've included no error handling and it may be completly broken. For a better example, see L. =head1 See Also Liquid for Designers: http://wiki.github.com/tobi/liquid/liquid-for-designers L's section on custom tags. =head1 Author Sanko Robinson - http://sankorobinson.com/ =head1 License and Legal Copyright (C) 2009-2012 by Sanko Robinson Esanko@cpan.orgE This program is free software; you can redistribute it and/or modify it under the terms of The Artistic License 2.0. See the F file included with this distribution or http://www.perlfoundation.org/artistic_license_2_0. For clarification, see http://www.perlfoundation.org/artistic_2_0_notes. When separated from the distribution, all original POD documentation is covered by the Creative Commons Attribution-Share Alike 3.0 License. See http://creativecommons.org/licenses/by-sa/3.0/us/legalcode. For clarification, see http://creativecommons.org/licenses/by-sa/3.0/us/. =cut