summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-11 14:22:55 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-11 14:23:09 -0500
commitcd59caeec925cf0bf8625d567a442e3c46ae7475 (patch)
tree9fc7ba28aca00fec5f6c53ee1b18249fcd4df006 /lib
parentc5ee7923bb6d38f138e58e7da5f9dfaa85bb9721 (diff)
downloadmoosex-validation-doctypes-cd59caeec925cf0bf8625d567a442e3c46ae7475.tar.gz
moosex-validation-doctypes-cd59caeec925cf0bf8625d567a442e3c46ae7475.zip
also provide stringification for the error object
Diffstat (limited to 'lib')
-rw-r--r--lib/MooseX/Validation/Doctypes/Errors.pm46
1 files changed, 46 insertions, 0 deletions
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;