On 3/14/2014 07:46, Lee Carmichael wrote:
We do this:

hook before_error_init => sub {
     my $err_obj = shift;

     if ( request->path !~ m{^/api/} && ( my $ser =
setting('serializer') ) ) {
         set 'serializer', undef;
         $err_obj->{_save_serializer} = $ser;
     }
};

And then restore it:

hook after_error_render => sub {
     my $response = shift;
     my $err_obj  = vars->{_save_err_obj};

     if ( my $ser = delete $err_obj->{_save_serializer} ) {
         set 'serializer', $ser;
     }
};

After using this for a while, I noticed that after an error happens, the serializer setting isn't getting restored. This simpler rewrite appears to have the same effect, without the problem:

    hook before_error_init => sub {
        set('serializer', undef) if request->path !~ m{^/api/};
    };
    hook after_error_render => sub {
        set('serializer', 'JSON') unless defined setting('serializer');
    };

The restoration code is heavy-handed and violates the DRY principle, but I think it will work for our purposes.
_______________________________________________
dancer-users mailing list
[email protected]
http://lists.preshweb.co.uk/mailman/listinfo/dancer-users

Reply via email to