On 1-04-2011 at 10:21, Richard Huxton wrote:
I've tried to do something similar to Simon too and been disappointed. I was trying:
load_app 'MyApp::Secret', prefix =>'/secret', before => &admin_only;
I think the surprising thing is the fact that "before" spans packages. Within a package, I'm happy with multiple occurrences chaining, but it seems wrong for an included module to change global behaviour.
You're close. This will work as you need: package MyApp; before sub { ... }; # do something package MyApp::Secret; before sub { ... }; # do something else package main; load_app 'MyApp'; load_app 'MyApp::Secret', prefix => '/secret'; 'before' hooks are scoped to a single Dancer app. Note that splitting your application in packages is not sufficient to have Dancer see them as different 'apps': you have to load them using load_app(). Everything (well, almost) that happens during that load_app() call is scoped to that particular app and not to the global application. Note that while this works correctly for the example you provided, there are some issues that you may be interested in: https://github.com/sukria/Dancer/issues/421 https://github.com/sukria/Dancer/issues/425 https://github.com/sukria/Dancer/issues/429 Cheers, - al.