NAME
Venus::Class - Class Builder
ABSTRACT
Class Builder for Perl 5
SYNOPSIS
package Example;
use Venus::Class;
sub handshake {
return true;
}
package main;
my $example = Example->new;
# $example->handshake;
DESCRIPTION
This package modifies the consuming package making it a modified Moo class. 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
haskeyword function and all of its configurations. See the Moo documentation for more details.example 1
package Example::Has; use Venus::Class; has 'data' => ( is => 'ro', isa => sub { die } ); package Example::HasData; use Venus::Class; extends 'Example::Has'; has '+data' => ( is => 'ro', isa => sub { 1 } ); package main; my $example = Example::HasData->new(data => time);
- has-is
-
This package supports the
isdirective, 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
isadirective, 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
reqandrequireddirectives, 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
optandoptionaldirectives, 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
bldandbuilderdirectives, 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
clrandclearerdirectives expects a1or 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
crcandcoercedirectives 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
defanddefaultdirectives 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
modandmodifydirectives 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::Class; has data => ( is => 'rw', opt => 1 ); package Example::HasMod; use Venus::Class; extends 'Example::HasNomod'; has data => ( is => 'ro', req => 1, mod => 1 ); package main; my $example = Example::HasMod->new;
- has-hnd
-
This package supports the
hndandhandlesdirectives 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
lzyandlazydirectives 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
newdirective, 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
preandpredicatedirectives expects a1or 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
rdrandreaderdirectives 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
tgrandtriggerdirectives expects a1or 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
usedirective 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
wkrandweak_refdirectives 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
wrtandwriterdirectives 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.