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_data
build_data(hashref $args, hashref $xargs) (hashref)
The build_data method, if defined, is only called during object construction to hook into the handling of the arguments provided. This method is passed two hashrefs, the first containing expected arguments provided to the constructor (e.g. attributes), and the second containing all unexpected arguments. The hashref or key/value pairs returned from this method will be used in subsequent automation.
Since 4.15
- build_data example 1
-
package Example5; use Venus::Class; attr 'x'; attr 'y'; with 'Venus::Role::Buildable'; sub build_data { my ($self, $args, $xargs) = @_; $args->{z} = delete $xargs->{z} if !exists $args->{z} && exists $xargs->{z}; return $args; } package main; my $example = Example5->new(x => 10, y => 10, z => 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) (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; 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;
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.