[Dancer-users] Tokens and Template plugins

Mike Schroeder mike at donor.com
Tue Oct 5 04:48:10 CEST 2010


On Mon, Oct 4, 2010 at 10:14 AM, David Precious <davidp at preshweb.co.uk>wrote:

>
> Sorry for the slow & rushed reply.
>

No worries - thanks for responding!


> Yes, HTML::Template can be a pain to work with - you're right that it
> doesn't
> handle a hash of hashes.
>
> This is something that needs fixing - can you raise an issue on Github at
> http://github.com/bigpresh/Dancer-Template-HtmlTemplate/issues ?
>
>
Done: http://github.com/bigpresh/Dancer-Template-HtmlTemplate/issues/issue/1



> I'm rather busy this week so probably won't have time to deal with it right
> away.
>

Sounds great - I have a workaround for the moment, but I refactor my hack
out and end up with a cleaner app when your patch is done.

Rather than hardcoding the param names to look at, I think I'd be inclined
> to
> have it automatically flatten any hashrefs in the params into keys in the
> to
> level hashref of params - so, for instance, if the params that were going
> to
> be passed to HTML::Template looked like:
>
> {
>    foo => 1,
>    bar => {
>      baz => 2,
>      bletch => 3,
>    }
> }
>
> it would get "flattened" into, say,:
>
> {
>    foo => 1,
>    bar.baz => 2,
>    bar.bletch => 3,
> }
>
>
Great idea - just pre-process the whole $tokens hash regardless of source.



> Having to do that is nasty, but it's a limitation of HTML::Template which
> doesn't let you dig into hashrefs, unlike for instance TT, where you can
> quite
> happily use e.g. [% foo.bar %]
>
>
> > 2) an alternate solution would be to make the creation of tokens a
> > subroutine that a Template plugin can expose back to Dancer as an
> > alternative way of serializing the tokens for the given Template engine.
> >  *something like:
> >
> > $tokens ||= {};
> > if (Dancer::Template->engine->can('create_default_tokens') ) {
> >     $tokens = Dancer::Template->engine->create_default_tokens($tokens);
> > } else {
> > $tokens->{settings} = Dancer::Config->settings;
> > $tokens->{request} = Dancer::SharedData->request;
> > $tokens->{params} = Dancer::SharedData->request->params;
> > if (setting('session')) {
> > $tokens->{session} = Dancer::Session->get;
> > }
> > }
>
> This might be a cleaner way, perhaps, but requires changes to Dancer's core
> just to support this single template engine; on the other hand, it means
> working around issues like this in future could be be easier.
>

Right - I was thinking someone might want to give some architectural
direction, but either approach works for me.

Thanks again David.

Mike.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.backup-manager.org/pipermail/dancer-users/attachments/20101004/20aa87c7/attachment-0001.htm>


More information about the Dancer-users mailing list