File Coverage

blib/lib/JSON/Schema/Modern/Error.pm
Criterion Covered Total %
statement 75 76 98.6
branch 4 4 100.0
condition n/a
subroutine 25 26 96.1
pod 1 2 50.0
total 105 108 97.2


line stmt bran cond sub pod time code
1 45     45   349 use strict;
  45         145  
  45         1920  
2 45     45   254 use warnings;
  45         80  
  45         3470  
3             package JSON::Schema::Modern::Error;
4             # vim: set ts=8 sts=2 sw=2 tw=100 et :
5             # ABSTRACT: Contains a single error from a JSON Schema evaluation
6              
7             our $VERSION = '0.632';
8              
9 45     45   749 use 5.020;
  45         154  
10 45     45   245 use Moo;
  45         113  
  45         427  
11             with 'JSON::Schema::Modern::ResultNode';
12 45     45   20654 use strictures 2;
  45         467  
  45         1992  
13 45     45   23523 use stable 0.031 'postderef';
  45         1079  
  45         410  
14 45     45   10453 use experimental 'signatures';
  45         124  
  45         276  
15 45     45   3262 no autovivification warn => qw(fetch store exists delete);
  45         86  
  45         387  
16 45     45   4234 use if "$]" >= 5.022, experimental => 're_strict';
  45         107  
  45         1406  
17 45     45   3865 no if "$]" >= 5.031009, feature => 'indirect';
  45         122  
  45         3743  
18 45     45   299 no if "$]" >= 5.033001, feature => 'multidimensional';
  45         146  
  45         3264  
19 45     45   317 no if "$]" >= 5.033006, feature => 'bareword_filehandles';
  45         89  
  45         3181  
20 45     45   293 no if "$]" >= 5.041009, feature => 'smartmatch';
  45         83  
  45         2503  
21 45     45   250 no feature 'switch';
  45         118  
  45         1724  
22 45     45   702 use MooX::TypeTiny;
  45         295  
  45         513  
23 45     45   42794 use Types::Standard qw(Str Bool Enum Tuple);
  45         130  
  45         423  
24 45     45   139713 use Types::Common::Numeric qw(PositiveInt);
  45         1493994  
  45         597  
25 45     45   47675 use builtin::compat 'refaddr';
  45         121  
  45         479  
26 45     45   33909 use Mojo::Message::Response;
  45         3169875  
  45         604  
27 45     45   2789 use Carp 'croak';
  45         113  
  45         3123  
28 45     45   368 use namespace::clean;
  45         99  
  45         497  
29              
30             use overload
31 0     0   0 '""' => sub { $_[0]->stringify },
32 45     45   22469 fallback => 1;
  45         113  
  45         477  
33              
34             has error => (
35             is => 'ro',
36             isa => Str,
37             required => 1,
38             );
39              
40             has exception => (
41             is => 'ro',
42             isa => Bool,
43             );
44              
45             has mode => (
46             is => 'ro',
47             isa => Enum[qw(traverse evaluate)],
48             required => 1,
49             );
50              
51             has recommended_response => (
52             is => 'ro',
53             isa => Tuple[PositiveInt, Str],
54             );
55              
56 7     7 0 42 sub stringify ($self) {
  7         10  
  7         11  
57 7 100       91 $self->mode eq 'traverse'
58             ? '\''.$self->keyword_location.'\': '.$self->error
59             : '\''.$self->instance_location.'\': '.$self->error;
60             }
61              
62 2     2 1 33 sub clone ($self, %overrides) {
  2         6  
  2         8  
  2         4  
63             $self->new(
64             $self->%{qw(instance_location keyword_location keyword depth)},
65             (map +(exists $self->{$_} ? $self->%{$_} : ()), qw(absolute_keyword_location _uri recommended_response)),
66 2 100       83 $self->%{qw(error exception mode)},
67             %overrides,
68             );
69             }
70              
71 18519     18519   50016 sub __thing { 'error' }
72              
73             around BUILDARGS => sub ($orig, $class, @args) {
74             my $args = $class->$orig(@args);
75              
76             $args->{recommended_response}[1] =
77             Mojo::Message::Response->default_message($args->{recommended_response}[0]) // 'Unknown Error'
78             if $args->{recommended_response} and $args->{recommended_response}->@* == 1;
79              
80             croak 'instance_location must be defined when mode=evaluate'
81             if not defined $args->{instance_location} and ($args->{mode}//'') eq 'evaluate';
82              
83             return $args;
84             };
85              
86             1;
87              
88             __END__