MooseX::ABC - abstract base classes for Moose


MooseX-ABC documentation Contained in the MooseX-ABC distribution.

Index


Code Index:

NAME

Top

MooseX::ABC - abstract base classes for Moose

VERSION

Top

version 0.05

SYNOPSIS

Top

  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

DESCRIPTION

Top

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.

FUNCTIONS

Top

requires METHOD_NAMES

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.

BUGS

Top

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.

SEE ALSO

Top

SUPPORT

Top

You can find this documentation for this module with the perldoc command.

    perldoc MooseX::ABC

You can also look for information at:

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/MooseX-ABC

* CPAN Ratings

http://cpanratings.perl.org/d/MooseX-ABC

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=MooseX-ABC

* Search CPAN

http://search.cpan.org/dist/MooseX-ABC

AUTHOR

Top

Jesse Luehrs <doy at tozt dot net>

COPYRIGHT AND LICENSE

Top


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__