| MooseX-ABC documentation | Contained in the MooseX-ABC distribution. |
MooseX::ABC - abstract base classes for Moose
version 0.05
package Shape;
use Moose;
use MooseX::ABC;
requires 'draw';
package Circle;
use Moose;
extends 'Shape';
sub draw {
# stuff
}
my $shape = Shape->new; # dies
my $circle = Circle->new; # succeeds
package Square;
use Moose;
extends 'Shape'; # dies, since draw is unimplemented
This module adds basic abstract base class functionality to Moose. Doing use
MooseX::ABC turns the using class into an abstract class - it cannot be
instantiated. It also allows you to mark certain methods in the class as
required, meaning that if a class inherits from this class without
implementing that method, it will die at compile time. Abstract subclasses are
exempt from this, however - if you extend a class with another class which uses
MooseX::ABC, it will not be required to implement every required method (and
it can also add more required methods of its own). Only concrete classes
(classes which do not use MooseX::ABC) are required to implement all of
their ancestors' required methods.
Takes a list of methods that classes inheriting from this one must implement. If a class inherits from this class without implementing each method listed here, an error will be thrown when compiling the class.
No known bugs.
Please report any bugs through RT: email
bug-moosex-abc at rt.cpan.org, or browse to
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MooseX-ABC.
You can find this documentation for this module with the perldoc command.
perldoc MooseX::ABC
You can also look for information at:
Jesse Luehrs <doy at tozt dot net>
This software is copyright (c) 2010 by Jesse Luehrs.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| MooseX-ABC documentation | Contained in the MooseX-ABC distribution. |
package MooseX::ABC; BEGIN { $MooseX::ABC::VERSION = '0.05'; } use Moose (); use Moose::Exporter; # ABSTRACT: abstract base classes for Moose sub requires { shift->add_required_method(@_); } my ($import, $unimport, $init_meta) = Moose::Exporter->build_import_methods( with_meta => [qw(requires)], install => [qw(import unimport)], class_metaroles => { class => ['MooseX::ABC::Trait::Class'], }, base_class_roles => ['MooseX::ABC::Role::Object'], ); sub init_meta { my ($package, %options) = @_; Carp::confess("Can't make a role into an abstract base class") if Class::MOP::class_of($options{for_class})->isa('Moose::Meta::Role'); my $ret = $init_meta->(@_); Class::MOP::class_of($options{for_class})->is_abstract(1); return $ret; } 1; __END__