package Venus::Role::Defaultable;
use 5.018;
use strict;
use warnings;
use Venus::Role 'with';
# BUILDERS
sub BUILD {
my ($self) = @_;
return $self if !$self->can('defaults');
my $defaults = $self->defaults;
return $self if !$defaults;
for my $name (@{$self->META->attrs}) {
if (exists $defaults->{$name} && !exists $self->{$name}) {
$self->{$name} = $defaults->{$name};
}
}
return $self;
}
1;
=head1 NAME
Venus::Role::Defaultable - Defaultable Role
=cut
=head1 ABSTRACT
Defaultable Role for Perl 5
=cut
=head1 SYNOPSIS
package Example;
use Venus::Class 'attr', 'with';
with 'Venus::Role::Defaultable';
attr 'name';
sub defaults {
{
name => 'example',
}
}
package main;
my $example = Example->new;
# bless({name => 'example'}, "Example")
=cut
=head1 DESCRIPTION
This package provides a mechanism for setting default values for missing
constructor arguments.
=cut