Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/grinnz/class-tiny-immutable

Class::Tiny::Immutable - Minimalist class construction, with read-only attributes
https://github.com/grinnz/class-tiny-immutable

Last synced: 5 days ago
JSON representation

Class::Tiny::Immutable - Minimalist class construction, with read-only attributes

Awesome Lists containing this project

README

        

=pod

=head1 NAME

Class::Tiny::Immutable - Minimalist class construction, with read-only
attributes

=head1 SYNOPSIS

In I:

package Person;

use Class::Tiny::Immutable qw( name );

1;

In I:

package Employee;
use parent 'Person';

use Class::Tiny::Immutable qw( ssn ), {
timestamp => sub { time } # lazy attribute with default
};

1;

In I:

use Employee;

my $obj = Employee->new; # dies, name and ssn attributes are required
my $obj = Employee->new( name => "Larry", ssn => "111-22-3333" );

my $name = $obj->name;
my $timestamp = $obj->timestamp;

# no attributes can be set
$obj->ssn("222-33-4444"); # dies
$obj->timestamp(time); # dies

=head1 DESCRIPTION

L is a wrapper around L which makes the
generated attributes read-only, and required to be set in the object
constructor if they do not have a lazy default defined. In other words,
attributes are either "lazy" or "required".

=head1 METHODS

In addition to methods inherited from L, Class::Tiny::Immutable
defines the following additional introspection method:

=head2 get_all_required_attributes_for

my @required = Class::Tiny::Immutable->get_all_required_attributes_for($class);

Returns an unsorted list of required attributes known to Class::Tiny::Immutable
for a class and its superclasses.

=head1 BUGS

Report any issues on the public bugtracker.

=head1 AUTHOR

Dan Book

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2017 by Dan Book.

This is free software, licensed under:

The Artistic License 2.0 (GPL Compatible)

=head1 SEE ALSO

L, L

=cut