From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

Venus::Role::Buildable - Buildable Role

ABSTRACT

Buildable Role for Perl 5

SYNOPSIS

package Example;
attr 'test';
package main;
my $example = Example->new;
# $example->test;

DESCRIPTION

This package modifies the consuming package and provides methods for hooking into object construction of the consuming class, e.g. handling single-arg object construction.

METHODS

This package provides the following methods:

build_arg

build_arg(any $data) (hashref)

The build_arg method, if defined, is only called during object construction when a single non-hashref is provided.

Since 0.01

build_arg example 1
package Example1;
attr 'x';
attr 'y';
sub build_arg {
my ($self, $data) = @_;
$data = { x => $data, y => $data };
return $data;
}
package main;
my $example = Example1->new(10);
# $example->x;
# $example->y;

build_args

build_args(hashref $data) (hashref)

The build_args method, if defined, is only called during object construction to hook into the handling of the arguments provided.

Since 0.01

build_args example 1
package Example2;
attr 'x';
attr 'y';
sub build_args {
my ($self, $data) = @_;
$data->{x} ||= int($data->{x} || 100);
$data->{y} ||= int($data->{y} || 100);
return $data;
}
package main;
my $example = Example2->new(x => 10, y => 10);
# $example->x;
# $example->y;

build_nil

build_nil(hashref $data) (any)

The build_nil method, if defined, is only called during object construction when a single empty hashref is provided.

Since 0.01

build_nil example 1
package Example4;
attr 'x';
attr 'y';
sub build_nil {
my ($self, $data) = @_;
$data = { x => 10, y => 10 };
return $data;
}
package main;
my $example = Example4->new({});
# $example->x;
# $example->y;

build_self

build_self(hashref $data) (object)

The build_self method, if defined, is only called during object construction after all arguments have been handled and set.

Since 0.01

build_self example 1
package Example3;
attr 'x';
attr 'y';
sub build_self {
my ($self, $data) = @_;
die if !$self->x;
die if !$self->y;
return $self;
}
package main;
my $example = Example3->new(x => 10, y => 10);
# $example->x;
# $example->y;

AUTHORS

Awncorp, awncorp@cpan.org

LICENSE

Copyright (C) 2022, Awncorp, awncorp@cpan.org.

This program is free software, you can redistribute it and/or modify it under the terms of the Apache license version 2.0.