Add support for immutable classes, by adjusting the generated constructor.
[gitmo/MooseX-UndefTolerant.git] / lib / MooseX / UndefTolerant / Constructor.pm
diff --git a/lib/MooseX/UndefTolerant/Constructor.pm b/lib/MooseX/UndefTolerant/Constructor.pm
new file mode 100644 (file)
index 0000000..e89b609
--- /dev/null
@@ -0,0 +1,18 @@
+package MooseX::UndefTolerant::Constructor;
+use Moose::Role;
+
+around('_generate_slot_initializer', sub {
+        my $orig = shift;
+        my $self = shift;
+        my $attr = $self->_attributes->[$_[0]]->init_arg;
+
+        my $tolerant_code = 
+             qq# delete \$params->{'$attr'} unless # . 
+             qq# exists \$params->{'$attr'} && defined \$params->{'$attr'};\n#;
+
+        return $tolerant_code . $self->$orig(@_);
+});
+
+no Moose::Role;
+
+1;