stick DispatchNode comments to the appropiate code
[catagits/Web-Simple.git] / lib / Web / Simple / DispatchNode.pm
index 36e5e67..f3b0e56 100644 (file)
@@ -6,10 +6,15 @@ extends 'Web::Dispatch::Node';
 
 has _app_object => (is => 'ro', init_arg => 'app_object', required => 1);
 
-# this ensures that the dispatchers get called as methods of the app itself
 around _curry => sub {
   my ($orig, $self) = (shift, shift);
-  $self->$orig($self->_app_object, @_);
+  # this ensures that the dispatchers get called as methods of the app itself
+  my $code = $self->$orig($self->_app_object, @_);
+  # if the first argument is a hashref, localize %_ to it to permit
+  # use of $_{name} inside the dispatch sub
+  ref($_[0]) eq 'HASH'
+    ? do { my $v = $_[0]; sub { local *_ = $v; &$code } }
+    : $code
 };
 
 1;