use Carp 'confess';
use Scalar::Util 'blessed', 'weaken', 'looks_like_number';
-our $VERSION = '0.02';
+our $VERSION = '0.04';
our $AUTHORITY = 'cpan:STEVAN';
use base 'Class::MOP::Method::Generated';
}
sub generate_constructor_method {
- return sub { (shift)->meta->new_object(@_) }
+ return sub { Class::MOP::Class->initialize(shift)->new_object(@_) }
}
sub generate_constructor_method_inline {
my $source = 'sub {';
$source .= "\n" . 'my ($class, %params) = @_;';
- $source .= "\n" . 'return $class->meta->new_object(%params)';
+ $source .= "\n" . 'return Class::MOP::Class->initialize($class)->new_object(%params)';
$source .= "\n" . ' if $class ne \'' . $self->associated_metaclass->name . '\';';
$source .= "\n" . 'my $instance = ' . $self->meta_instance->inline_create_instance('$class');
$default = '$instance->'.$attr->builder;
}
- 'if(exists $params{\'' . $attr->init_arg . '\'}){' . "\n" .
- $self->meta_instance->inline_set_slot_value(
- '$instance',
- ("'" . $attr->name . "'"),
- '$params{\'' . $attr->init_arg . '\'}' ) . "\n" .
- '} ' . (!defined $default ? '' : 'else {' . "\n" .
- $self->meta_instance->inline_set_slot_value(
- '$instance',
- ("'" . $attr->name . "'"),
- $default ) . "\n" .
- '}');
+ if ( defined $attr->init_arg ) {
+ return (
+ 'if(exists $params{\'' . $attr->init_arg . '\'}){' . "\n" .
+ $self->meta_instance->inline_set_slot_value(
+ '$instance',
+ ("'" . $attr->name . "'"),
+ '$params{\'' . $attr->init_arg . '\'}' ) . "\n" .
+ '} ' . (!defined $default ? '' : 'else {' . "\n" .
+ $self->meta_instance->inline_set_slot_value(
+ '$instance',
+ ("'" . $attr->name . "'"),
+ $default ) . "\n" .
+ '}')
+ );
+ } elsif ( defined $default ) {
+ return (
+ $self->meta_instance->inline_set_slot_value(
+ '$instance',
+ ("'" . $attr->name . "'"),
+ $default ) . "\n"
+ );
+ } else { return '' }
}
1;