my %args = @_;
my $instance = bless {}, $class;
- for my $attribute ($class->meta->attributes) {
+ for my $attribute (values %{ $class->meta->get_attribute_map }) {
my $key = $attribute->init_arg;
my $default;
if (!exists($args{$key})) {
if ($attribute->has_default || $attribute->has_builder) {
- my $default = $attribute->default;
-
unless ($attribute->is_lazy) {
+ my $default = $attribute->default;
my $builder = $attribute->builder;
my $value = $attribute->has_builder
? $instance->$builder
$instance->{$key} = $value;
weaken($instance->{$key})
- if $attribute->weak_ref;
+ if ref($instance->{$key}) && $attribute->is_weak_ref;
}
}
else {
if ($attribute->is_required) {
- confess "Attribute '".$attribute->name."' is required";
+ confess "Attribute (".$attribute->name.") is required";
}
}
}
$instance->{$key} = $args{$key};
weaken($instance->{$key})
- if $attribute->weak_ref;
+ if ref($instance->{$key}) && $attribute->is_weak_ref;
if ($attribute->has_trigger) {
$attribute->trigger->($instance, $args{$key}, $attribute);