Revision history for Perl extension Moose
-0.61 ???
+
+0.61
* Moose::Meta::Attribute
- When passing a role to handles, it will be loaded if necessary
(perigrin)
+ * Moose::Meta::Class
+ - Method objects returned by get_method (and other methods)
+ Could end up being returned without an associated_metaclass
+ attribute. Removing get_method_map, which is provided by
+ Class::MOP::Class, fixed this. The Moose version did nothing
+ different from its parent except introduce a bug. (Dave ROlsky
+ - added tests for this (jdv79)
+
0.60 Fri October 24, 2008
* Moose::Exporter
- Passing "-traits" when loading Moose caused the Moose.pm
t/010_basics/015_buildargs.t
t/010_basics/016_load_into_main.t
t/010_basics/017_error_handling.t
+t/010_basics/018_methods.t
t/020_attributes/001_attribute_reader_generation.t
t/020_attributes/002_attribute_writer_generation.t
t/020_attributes/003_attribute_accessor_generation.t
return $instance;
}
-# FIXME:
-# This is ugly
-sub get_method_map {
- my $self = shift;
-
- my $current = Class::MOP::check_package_cache_flag($self->name);
-
- if (defined $self->{'_package_cache_flag'} && $self->{'_package_cache_flag'} == $current) {
- return $self->{'methods'};
- }
-
- $self->{_package_cache_flag} = $current;
-
- my $map = $self->{'methods'};
-
- my $class_name = $self->name;
- my $method_metaclass = $self->method_metaclass;
-
- my %all_code = $self->get_all_package_symbols('CODE');
-
- foreach my $symbol (keys %all_code) {
- my $code = $all_code{$symbol};
-
- next if exists $map->{$symbol} &&
- defined $map->{$symbol} &&
- $map->{$symbol}->body == $code;
-
- my ($pkg, $name) = Class::MOP::get_code_info($code);
-
- # NOTE:
- # in 5.10 constant.pm the constants show up
- # as being in the right package, but in pre-5.10
- # they show up as constant::__ANON__ so we
- # make an exception here to be sure that things
- # work as expected in both.
- # - SL
- unless ( $pkg eq 'constant' && $name eq '__ANON__' ) {
- next
- if ( $pkg || '' ) ne $class_name
- || ( ( $name || '' ) ne '__ANON__'
- && ( $pkg || '' ) ne $class_name
- );
- }
-
- $map->{$symbol} = $method_metaclass->wrap(
- $code,
- package_name => $class_name,
- name => $symbol
- );
- }
-
- return $map;
-}
-
### ---------------------------------------------
sub add_attribute {
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+
+
+my $test1 = Moose::Meta::Class->create_anon_class;
+$test1->add_method( 'foo1', sub { } );
+
+my $t1 = $test1->new_object;
+my $t1_am = $t1->meta->get_method('foo1')->associated_metaclass;
+ok( $t1_am, 'associated_metaclass is defined' );
+isa_ok(
+ $t1_am, 'Moose::Meta::Class',
+ 'associated_metaclass is correct class'
+);
+
+{
+
+ package Test2;
+
+ use Moose;
+
+ sub foo2 { }
+}
+
+my $t2 = Test2->new;
+my $t2_am = $t2->meta->get_method('foo2')->associated_metaclass;
+ok( $t2_am, 'associated_metaclass is defined' );
+
+isa_ok(
+ $t2_am, 'Moose::Meta::Class',
+ 'associated_metaclass is correct class'
+);