Commit | Line | Data |
d6ce838b |
1 | package MooseX::UndefTolerant::Class; |
02e25b00 |
2 | |
3 | # applied to metaclass, for Moose >= 1.9900 |
4 | |
5 | use strict; |
6 | use warnings; |
7 | |
d6ce838b |
8 | use Moose::Role; |
9 | |
dc3621bc |
10 | # TODO: this code should be in the attribute trait, in the inlined version of |
11 | # initialize_instance_slot, but this does not yet exist! |
12 | |
e5d1b642 |
13 | around _inline_init_attr_from_constructor => sub { |
14 | my $orig = shift; |
15 | my $self = shift; |
16 | my ($attr, $idx) = @_; |
d6ce838b |
17 | |
e5d1b642 |
18 | my @source = $self->$orig(@_); |
d6ce838b |
19 | |
e5d1b642 |
20 | my $init_arg = $attr->init_arg; |
d6ce838b |
21 | |
e5d1b642 |
22 | return |
23 | "if ( exists \$params->{$init_arg} && defined \$params->{$init_arg} ) {", |
24 | @source, |
25 | '} else {', |
26 | "delete \$params->{$init_arg};", |
27 | '}'; |
28 | }; |
d6ce838b |
29 | |
30 | no Moose::Role; |
d6ce838b |
31 | 1; |