package TestApp::View::Dump;
use strict;
-use base qw[Catalyst::Base];
+use base 'Catalyst::View';
use Data::Dumper ();
+use Scalar::Util qw(blessed weaken);
sub dump {
my ( $self, $reference ) = @_;
return unless $reference;
- my $dumper = Data::Dumper->new( [ $reference ] );
+ my $dumper = Data::Dumper->new( [$reference] );
$dumper->Indent(1);
$dumper->Purity(1);
$dumper->Useqq(0);
sub process {
my ( $self, $c, $reference ) = @_;
- if ( my $output = $self->dump( $reference || $c->stash->{dump} || $c->stash ) ) {
+ # Force processing of on-demand data
+ $c->prepare_body;
- $c->res->headers->content_type('text/plain');
- $c->res->output($output);
- return 1;
+ # Remove body from reference if needed
+ $reference->{__body_type} = blessed $reference->body
+ if (blessed $reference->{_body});
+ my $body = delete $reference->{_body};
+
+ # Remove context from reference if needed
+ my $context = delete $reference->{_context};
+
+ if ( my $output =
+ $self->dump( $reference ) )
+ {
+
+ $c->res->headers->content_type('text/plain');
+ $c->res->output($output);
+
+ # Repair context
+ $reference->{_context} = $context;
+ weaken( $reference->{_context} );
+
+ # Repair body
+ delete $reference->{__body_type};
+ $reference->{_body} = $body;
+
+ return 1;
}
return 0;