diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Reply/Plugin/DataDump.pm | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/Reply/Plugin/DataDump.pm b/lib/Reply/Plugin/DataDump.pm index 64d756e..a020adb 100644 --- a/lib/Reply/Plugin/DataDump.pm +++ b/lib/Reply/Plugin/DataDump.pm @@ -5,7 +5,8 @@ use warnings; use base 'Reply::Plugin'; -use Data::Dump 'pp'; +use Data::Dump 'dumpf'; +use overload (); =head1 SYNOPSIS @@ -18,10 +19,30 @@ This plugin uses L<Data::Dump> to format results. =cut +sub new { + my $class = shift; + my %opts = @_; + $opts{respect_stringification} = 1 + unless defined $opts{respect_stringification}; + + my $self = $class->SUPER::new(@_); + $self->{filter} = sub { + my ($ctx, $ref) = @_; + return unless $ctx->is_blessed; + my $stringify = overload::Method($ref, '""'); + return unless $stringify; + return { + dump => $stringify->($ref), + }; + } if $opts{respect_stringification}; + + return $self; +} + sub mangle_result { my $self = shift; my (@result) = @_; - return @result ? pp(@result) : (); + return @result ? dumpf(@result, $self->{filter}) : (); } 1; |