NAME

Venus::Role::Buildable - Buildable Role

ABSTRACT

Buildable Role for Perl 5

SYNOPSIS

package Example;

use Venus::Class;

with 'Venus::Role::Buildable';

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;

use Venus::Class;

attr 'x';
attr 'y';

with 'Venus::Role::Buildable';

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;

use Venus::Class;

attr 'x';
attr 'y';

with 'Venus::Role::Buildable';

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;

use Venus::Class;

attr 'x';
attr 'y';

with 'Venus::Role::Buildable';

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) (Self)

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;

use Venus::Class;

attr 'x';
attr 'y';

with 'Venus::Role::Buildable';

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;