From cd59caeec925cf0bf8625d567a442e3c46ae7475 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 11 Oct 2012 14:22:55 -0500 Subject: also provide stringification for the error object --- lib/MooseX/Validation/Doctypes/Errors.pm | 46 ++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'lib') diff --git a/lib/MooseX/Validation/Doctypes/Errors.pm b/lib/MooseX/Validation/Doctypes/Errors.pm index ca4d54d..7601855 100644 --- a/lib/MooseX/Validation/Doctypes/Errors.pm +++ b/lib/MooseX/Validation/Doctypes/Errors.pm @@ -2,6 +2,8 @@ package MooseX::Validation::Doctypes::Errors; use Moose; # ABSTRACT: error class for MooseX::Validation::Doctypes +use overload '""' => 'stringify'; + =head1 SYNOPSIS use MooseX::Validation::Doctypes; @@ -113,6 +115,50 @@ sub TO_JSON { }; } +sub stringify { + my $self = shift; + + return join( + "\n", + (sort $self->_stringify_ref($self->errors)), + $self->_stringify_extra_data($self->extra_data), + ); +} + +sub _stringify_ref { + my $self = shift; + my ($data) = @_; + + return + if !defined $data; + + return $data + if !ref $data; + + return map { $self->_stringify_ref($_) } values %$data + if ref($data) eq 'HASH'; + + return map { $self->_stringify_ref($_) } @$data + if ref($data) eq 'ARRAY'; + + return "unknown data: $data"; +} + +sub _stringify_extra_data { + my $self = shift; + my ($data) = @_; + + return + unless defined $data; + + require Data::Dumper; + local $Data::Dumper::Terse = 1; + my $string = Data::Dumper::Dumper($data); + chomp($string); + + return ("extra data found:", $string); +} + __PACKAGE__->meta->make_immutable; no Moose; -- cgit v1.2.3-54-g00ecf