Fix warnings, we may not always be dumping a object
[catagits/Catalyst-Runtime.git] / t / lib / TestApp / View / Dump.pm
1 package TestApp::View::Dump;
2
3 use strict;
4 use base 'Catalyst::View';
5
6 use Data::Dumper ();
7 use Scalar::Util qw(blessed weaken);
8
9 sub dump {
10     my ( $self, $reference ) = @_;
11
12     return unless $reference;
13
14     my $dumper = Data::Dumper->new( [$reference] );
15     $dumper->Indent(1);
16     $dumper->Purity(1);
17     $dumper->Useqq(0);
18     $dumper->Deepcopy(1);
19     $dumper->Quotekeys(0);
20     $dumper->Terse(1);
21
22     return $dumper->Dump;
23 }
24
25 sub process {
26     my ( $self, $c, $reference ) = @_;
27
28     # Force processing of on-demand data
29     $c->prepare_body;
30
31     # Remove body from reference if needed
32     $reference->{__body_type} = blessed $reference->body
33         if (blessed $reference->{_body});
34     my $body = delete $reference->{_body};
35
36     # Remove context from reference if needed
37     my $context = delete $reference->{_context};
38
39     if ( my $output =
40         $self->dump( $reference ) )
41     {
42
43         $c->res->headers->content_type('text/plain');
44         $c->res->output($output);
45
46         if ($context) {
47             # Repair context
48             $reference->{_context} = $context;
49             weaken( $reference->{_context} );
50         }
51
52         if ($body) {
53             # Repair body
54             delete $reference->{__body_type};
55             $reference->{_body} = $body;
56         }
57
58         return 1;
59     }
60
61     return 0;
62 }
63
64 1;