NAME

Class::MOP::Immutable - A class to transform Class::MOP::Class metaclasses

SYNOPSIS

use Class::MOP::Immutable;

my $immutable_metaclass = Class::MOP::Immutable->new($metaclass, {
    read_only   => [qw/superclasses/],
    cannot_call => [qw/
        add_method
        alias_method
        remove_method
        add_attribute
        remove_attribute
        add_package_symbol
        remove_package_symbol
    /],
    memoize     => {
        class_precedence_list             => 'ARRAY',
        compute_all_applicable_attributes => 'ARRAY',
        get_meta_instance                 => 'SCALAR',
        get_method_map                    => 'SCALAR',
    }
});

$immutable_metaclass->make_metaclass_immutable(@_)

DESCRIPTION

This is basically a module for applying a transformation on a given metaclass. Current features include making methods read-only, making methods un-callable and memoizing methods (in a type specific way too).

This module is fairly new to the MOP, and quite possibly will be expanded and further generalized as the need arises.

METHODS

new ($metaclass, \%options)

Given a $metaclass and a set of %options this module will prepare an immutable version of the $metaclass, which can then be applied to the $metaclass using the make_metaclass_immutable method.

options

Returns the options HASH set in new.

metaclass

Returns the metaclass set in new.

immutable_metaclass

Returns the immutable metaclass created within new.

create_immutable_metaclass

This will create the immutable version of the $metaclass, but will not actually change the original metaclass.

create_methods_for_immutable_metaclass

This will create all the methods for the immutable metaclass based on the %options passed into new.

make_metaclass_immutable (%options)

This will actually change the $metaclass into the immutable version.

make_metaclass_mutable (%options)

This will change the $metaclass into the mutable version by reversing the immutable process. %options should be the same options that were given to make_metaclass_immutable.

AUTHORS

Stevan Little <stevan@iinteractive.com>

COPYRIGHT AND LICENSE

Copyright 2006, 2007 by Infinity Interactive, Inc.

http://www.iinteractive.com

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.