| 67 | | next if exists $args->{$name}; |
| 68 | | next unless exists $has->{default} && $has->{default}; |
| 69 | | next if exists $has->{lazy} && $has->{lazy}; |
| 70 | | next if exists $has->{lazy_build} && $has->{lazy_build}; |
| 71 | | my $code = $has->{default}; |
| 72 | | $args->{$name} = ref($code) eq 'CODE' ? $code->() : $code; |
| 73 | | } |
| 74 | | # process coerce |
| 75 | | while (my ($name, $has) = each %has_map) { |
| 76 | | next unless exists $args->{$name}; |
| 77 | | next unless exists $has->{coerce} && $has->{coerce}; |
| 78 | | Carp::confess "does not pass the type constraint because: Validation failed for '$has->{isa}' failed $name" |
| 79 | | unless Shika::Util::TypeConstraints::check_valid($class, $has, undef, $args->{$name}); |
| 80 | | } |
| 81 | | # process 'required' |
| 82 | | while (my ($name, $has) = each %has_map) { |
| 83 | | next if exists $args->{$name}; |
| 84 | | next unless $has->{required}; |
| 85 | | Carp::croak "missing parameter $name for $class"; |
| | 66 | # set default values |
| | 67 | if ( |
| | 68 | (! (exists $args->{$name})) && |
| | 69 | (exists $has->{default} && $has->{default} ) && |
| | 70 | (! (exists $has->{lazy} && $has->{lazy} )) && |
| | 71 | (! (exists $has->{lazy_build} && $has->{lazy_build})) |
| | 72 | ) { |
| | 73 | my $code = $has->{default}; |
| | 74 | $args->{$name} = ref($code) eq 'CODE' ? $code->() : $code; |
| | 75 | } |
| | 76 | |
| | 77 | # process coerce |
| | 78 | if ( $args->{$name} && exists $has->{coerce} && $has->{coerce} ) { |
| | 79 | Carp::confess "does not pass the type constraint because: Validation failed for '$has->{isa}' failed $name" |
| | 80 | unless Shika::Util::TypeConstraints::check_valid($class, $has, undef, $args->{$name}); |
| | 81 | } |
| | 82 | |
| | 83 | # process 'required' |
| | 84 | if (!$args->{$name} && $has->{required}) { |
| | 85 | Carp::croak "missing parameter $name for $class"; |
| | 86 | } |