Another TODO note, to go with the CAVEATS
[gitmo/MooseX-UndefTolerant.git] / lib / MooseX / UndefTolerant / Class.pm
1 package MooseX::UndefTolerant::Class;
2
3 # applied to metaclass, for Moose >= 1.9900
4
5 use strict;
6 use warnings;
7
8 use Moose::Role;
9
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
13 around _inline_init_attr_from_constructor => sub {
14     my $orig = shift;
15     my $self = shift;
16     my ($attr, $idx) = @_;
17
18     my @source = $self->$orig(@_);
19
20     my $init_arg = $attr->init_arg;
21
22     return
23         "if ( exists \$params->{$init_arg} && defined \$params->{$init_arg} ) {",
24             @source,
25         '} else {',
26             "delete \$params->{$init_arg};",
27         '}';
28 };
29
30 no Moose::Role;
31 1;