NAME
Venus::Role - Role Builder
ABSTRACT
Role Builder for Perl 5
SYNOPSIS
package Exemplar;
use Venus::Role;
sub handshake {
return true;
}
package Example;
use Venus::Class;
with 'Exemplar';
package main;
my $example = Example->new;
# $example->handshake;
DESCRIPTION
This package modifies the consuming package making it a modified Moo role, i.e. Moo::Role. All functions in Venus are automatically imported unless routines of the same name already exist.
INTEGRATES
This package integrates behaviors from:
FEATURES
This package provides the following features:
- has
-
This package supports the
has
keyword function and all of its configurations. See the Moo documentation for more details.example 1
package Example::Has; use Venus::Role; has 'data' => ( is => 'ro', isa => sub { die } ); package Example::HasData; use Venus::Class; with 'Example::Has'; has '+data' => ( is => 'ro', isa => sub { 1 } ); package main; my $example = Example::HasData->new(data => time);
- has-is
-
This package supports the
is
directive, used to denote whether the attribute is read-only or read-write. See the Moo documentation for more details.example 1
package Example::HasIs; use Venus::Class; has data => ( is => 'ro' ); package main; my $example = Example::HasIs->new(data => time);
- has-isa
-
This package supports the
isa
directive, used to define the type constraint to validate the attribute against. See the Moo documentation for more details.example 1
package Example::HasIsa; use registry; use Venus::Class; has data => ( is => 'ro', isa => 'Str' # e.g. Types::Standard::Str ); package main; my $example = Example::HasIsa->new(data => time);
- has-req
-
This package supports the
req
andrequired
directives, used to denote if an attribute is required or optional. See the Moo documentation for more details.example 1
package Example::HasReq; use Venus::Class; has data => ( is => 'ro', req => 1 # required ); package main; my $example = Example::HasReq->new(data => time);
- has-opt
-
This package supports the
opt
andoptional
directives, used to denote if an attribute is optional or required. See the Moo documentation for more details.example 1
package Example::HasOpt; use Venus::Class; has data => ( is => 'ro', opt => 1 ); package main; my $example = Example::HasOpt->new(data => time);
- has-bld
-
This package supports the
bld
andbuilder
directives, expects a1
, a method name, or coderef and builds the attribute value if it wasn't provided to the constructor. See the Moo documentation for more details.example 1
package Example::HasBld; use Venus::Class; has data => ( is => 'ro', bld => 1 ); sub _build_data { return rand; } package main; my $example = Example::HasBld->new;
- has-clr
-
This package supports the
clr
andclearer
directives expects a1
or a method name of the clearer method. See the Moo documentation for more details.example 1
package Example::HasClr; use Venus::Class; has data => ( is => 'ro', clr => 1 ); package main; my $example = Example::HasClr->new(data => time); # $example->clear_data;
- has-crc
-
This package supports the
crc
andcoerce
directives denotes whether an attribute's value should be automatically coerced. See the Moo documentation for more details.example 1
package Example::HasCrc; use Venus::Class; has data => ( is => 'ro', crc => sub {'0'} ); package main; my $example = Example::HasCrc->new(data => time);
- has-def
-
This package supports the
def
anddefault
directives expects a non-reference or a coderef to be used to build a default value if one is not provided to the constructor. See the Moo documentation for more details.example 1
package Example::HasDef; use Venus::Class; has data => ( is => 'ro', def => '0' ); package main; my $example = Example::HasDef->new;
- has-mod
-
This package supports the
mod
andmodify
directives denotes whether a pre-existing attribute's definition is being modified. This ability is not supported by the Moo object superclass.example 1
package Example::HasNomod; use Venus::Role; has data => ( is => 'rw', opt => 1 ); package Example::HasMod; use Venus::Class; with 'Example::HasNomod'; has data => ( is => 'ro', req => 1, mod => 1 ); package main; my $example = Example::HasMod->new;
- has-hnd
-
This package supports the
hnd
andhandles
directives denotes the methods created on the object which dispatch to methods available on the attribute's object. See the Moo documentation for more details.example 1
package Example::Time; use Venus::Class; sub maketime { return time; } package Example::HasHnd; use Venus::Class; has data => ( is => 'ro', hnd => ['maketime'] ); package main; my $example = Example::HasHnd->new(data => Example::Time->new);
- has-lzy
-
This package supports the
lzy
andlazy
directives denotes whether the attribute will be constructed on-demand, or on-construction. See the Moo documentation for more details.example 1
package Example::HasLzy; use Venus::Class; has data => ( is => 'ro', def => sub {time}, lzy => 1 ); package main; my $example = Example::HasLzy->new;
- has-new
-
This package supports the
new
directive, if truthy, denotes that the attribute will be constructed on-demand, i.e. is lazy, with a builder named new_{attribute}. This ability is not supported by the Moo object superclass.example 1
package Example::HasNew; use Venus::Class; has data => ( is => 'ro', new => 1 ); sub new_data { return time; } package main; my $example = Example::HasNew->new(data => time);
- has-pre
-
This package supports the
pre
andpredicate
directives expects a1
or a method name and generates a method for checking the existance of the attribute. See the Moo documentation for more details.example 1
package Example::HasPre; use Venus::Class; has data => ( is => 'ro', pre => 1 ); package main; my $example = Example::HasPre->new(data => time);
- has-rdr
-
This package supports the
rdr
andreader
directives denotes the name of the method to be used to "read" and return the attribute's value. See the Moo documentation for more details.example 1
package Example::HasRdr; use Venus::Class; has data => ( is => 'ro', rdr => 'get_data' ); package main; my $example = Example::HasRdr->new(data => time);
- has-tgr
-
This package supports the
tgr
andtrigger
directives expects a1
or a coderef and is executed whenever the attribute's value is changed. See the Moo documentation for more details.example 1
package Example::HasTgr; use Venus::Class; has data => ( is => 'ro', tgr => 1 ); sub _trigger_data { my ($self) = @_; $self->{triggered} = 1; return $self; } package main; my $example = Example::HasTgr->new(data => time);
- has-use
-
This package supports the
use
directive denotes that the attribute will be constructed on-demand, i.e. is lazy, using a custom builder meant to perform service construction. This directive exists to provide a simple dependency injection mechanism for class attributes. This ability is not supported by the Moo object superclass.example 1
package Example::HasUse; use Venus::Class; has data => ( is => 'ro', use => ['service', 'time'] ); sub service { my ($self, $type, @args) = @_; $self->{serviced} = 1; return time if $type eq 'time'; } package main; my $example = Example::HasUse->new;
- has-wkr
-
This package supports the
wkr
andweak_ref
directives is used to denote if the attribute's value should be weakened. See the Moo documentation for more details.example 1
package Example::HasWkr; use Venus::Class; has data => ( is => 'ro', wkr => 1 ); package main; my $data = do { my ($a, $b); $a = { time => time }; $b = { time => $a }; $a->{time} = $b; $a }; my $example = Example::HasWkr->new(data => $data);
- has-wrt
-
This package supports the
wrt
andwriter
directives denotes the name of the method to be used to "write" and return the attribute's value. See the Moo documentation for more details.example 1
package Example::HasWrt; use Venus::Class; has data => ( is => 'ro', wrt => 'set_data' ); package main; my $example = Example::HasWrt->new;
AUTHORS
Cpanery, cpanery@cpan.org
LICENSE
Copyright (C) 2021, Cpanery
Read the "license" file.