X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FClass.pm;h=4761e5d86ebdcf6eb08370b9193d57e78eea1b6e;hb=e578d610be7812bb5fc5c861aeee01fe9270aa2f;hp=9e6ef57e91c086b14eeca36c9a1efaf0222e4fd5;hpb=f7fec86c35df4b35035580134d634cfc3095d164;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Class.pm b/lib/Mouse/Meta/Class.pm index 9e6ef57..4761e5d 100644 --- a/lib/Mouse/Meta/Class.pm +++ b/lib/Mouse/Meta/Class.pm @@ -4,7 +4,7 @@ use warnings; use Mouse::Meta::Method::Constructor; use Mouse::Meta::Method::Destructor; -use Scalar::Util qw/blessed/; +use Scalar::Util qw/blessed weaken/; use Mouse::Util qw/get_linear_isa version authority identifier/; use Carp 'confess'; @@ -27,6 +27,17 @@ do { if !exists($METACLASS_CACHE{$name}); return $METACLASS_CACHE{$name}; } + + # Means of accessing all the metaclasses that have + # been initialized thus far + sub get_all_metaclasses { %METACLASS_CACHE } + sub get_all_metaclass_instances { values %METACLASS_CACHE } + sub get_all_metaclass_names { keys %METACLASS_CACHE } + sub get_metaclass_by_name { $METACLASS_CACHE{$_[0]} } + sub store_metaclass_by_name { $METACLASS_CACHE{$_[0]} = $_[1] } + sub weaken_metaclass { weaken($METACLASS_CACHE{$_[0]}) } + sub does_metaclass_exist { exists $METACLASS_CACHE{$_[0]} && defined $METACLASS_CACHE{$_[0]} } + sub remove_metaclass_by_name { $METACLASS_CACHE{$_[0]} = undef } }; sub new { @@ -136,7 +147,8 @@ sub add_attribute { } } -sub compute_all_applicable_attributes { +sub compute_all_applicable_attributes { shift->get_all_attributes(@_) } +sub get_all_attributes { my $self = shift; my (@attr, %seen); @@ -181,7 +193,7 @@ sub clone_instance { my $clone = bless { %$instance }, ref $instance; - foreach my $attr ($class->compute_all_applicable_attributes()) { + foreach my $attr ($class->get_all_attributes()) { if ( defined( my $init_arg = $attr->init_arg ) ) { if (exists $params{$init_arg}) { $clone->{ $attr->name } = $params{$init_arg}; @@ -197,6 +209,7 @@ sub make_immutable { my $self = shift; my %args = ( inline_constructor => 1, + inline_destructor => 1, @_, ); @@ -297,7 +310,7 @@ sub does_role { for my $class ($self->linearized_isa) { next unless $class->can('meta') and $class->meta->can('roles'); - for my $role (@{ $self->roles }) { + for my $role (@{ $class->meta->roles }) { return 1 if $role->name eq $role_name; } } @@ -412,7 +425,7 @@ Gets (or sets) the list of superclasses of the owner class. Begins keeping track of the existing L for the owner class. -=head2 compute_all_applicable_attributes -> (Mouse::Meta::Attribute) +=head2 get_all_attributes -> (Mouse::Meta::Attribute) Returns the list of all L instances associated with this class and its superclasses. @@ -426,7 +439,7 @@ L objects. This returns a list of attribute names which are defined in the local class. If you want a list of all applicable attributes for a class, -use the C method. +use the C method. =head2 has_attribute Name -> Bool @@ -447,7 +460,8 @@ metaclass. =head2 clone_instance Instance, Parameters -> Instance -Clones the given C and sets any additional parameters. +The clone_instance method has been made private. +The public version is deprecated. =cut