NAME
Mars::Class - Class Declaration
ABSTRACT
Class Declaration for Perl 5
SYNOPSIS
package Person;
use Mars::Class;
attr 'fname';
attr 'lname';
package Identity;
use Mars::Role;
attr 'id';
attr 'login';
attr 'password';
sub EXPORT {
return ['id', 'login', 'password'];
}
package Authenticable;
use Mars::Role;
sub authenticate {
return true;
}
sub AUDIT {
my ($self, $from) = @_;
die "${from} missing Identity role" if !$from->does('Identity');
}
sub EXPORT {
return ['authenticate'];
}
package User;
use Mars::Class;
base 'Person';
with 'Identity';
attr 'email';
test 'Authenticable';
sub valid {
my ($self) = @_;
return $self->login && $self->password ? true : false;
}
package main;
my $user = User->new(
fname => 'Elliot',
lname => 'Alderson',
);
# bless({fname => 'Elliot', lname => 'Alderson'}, 'User')
DESCRIPTION
This package provides a class builder. When this package is used the consumer becomes Mars::Kind::Class derived, which provides object construction and lifecycle hooks.
FUNCTIONS
This package provides the following functions:
attr
attr(Str $name) (Str)
The attr function creates attribute accessors for the calling package. This function is always exported unless a routine of the same name already exists.
Since 0.01
base
base(Str $name) (Str)
The base function registers one or more base classes for the calling package. This function is always exported unless a routine of the same name already exists.
Since 0.01
- base example 1
-
package Entity; use Mars::Class; sub output { return; } package Example; use Mars::Class; base 'Entity'; # "Example"
false
false() (Bool)
The false function returns a falsy boolean value which is designed to be practically indistinguishable from the conventional numerical 0
value. This function is always exported unless a routine of the same name already exists.
Since 0.01
role
role(Str $name) (Str)
The role function registers and consumes roles for the calling package. This function is always exported unless a routine of the same name already exists.
Since 0.01
- role example 1
-
package Ability; use Mars::Role; sub action { return; } package Example; use Mars::Class; role 'Ability'; # "Example"
- role example 2
-
package Ability; use Mars::Role; sub action { return; } sub EXPORT { return ['action']; } package Example; use Mars::Class; role 'Ability'; # "Example"
test
test(Str $name) (Str)
The test function registers and consumes roles for the calling package and performs an "audit", effectively allowing a role to act as an interface. This function is always exported unless a routine of the same name already exists.
Since 0.01
- test example 1
-
package Actual; use Mars::Role; package Example; use Mars::Class; test 'Actual'; # "Example"
- test example 2
-
package Actual; use Mars::Role; sub AUDIT { die "Example is not an 'actual' thing" if $_[1]->isa('Example'); } package Example; use Mars::Class; test 'Actual'; # "Example"
true
true() (Bool)
The true function returns a truthy boolean value which is designed to be practically indistinguishable from the conventional numerical 1
value. This function is always exported unless a routine of the same name already exists.
Since 0.01
with
with(Str $name) (Str)
The with function registers and consumes roles for the calling package. This function is an alias of the "role" function. This function is always exported unless a routine of the same name already exists.
Since 0.01
- with example 1
-
package Understanding; use Mars::Role; sub knowledge { return; } package Example; use Mars::Class; with 'Understanding'; # "Example"
- with example 2
-
package Understanding; use Mars::Role; sub knowledge { return; } sub EXPORT { return ['knowledge']; } package Example; use Mars::Class; with 'Understanding'; # "Example"
AUTHORS
Awncorp, awncorp@cpan.org