Version 0.40_01
[gitmo/Mouse.git] / lib / Mouse / Meta / Class.pm
index a33083a..3827636 100644 (file)
@@ -38,11 +38,16 @@ sub create_anon_class{
     return $self->create(undef, @_);
 }
 
-sub is_anon_class{
-    return exists $_[0]->{anon_serial_id};
-}
+sub is_anon_class;
+
+sub roles;
 
-sub roles { $_[0]->{roles} }
+sub calculate_all_roles {
+    my $self = shift;
+    my %seen;
+    return grep { !$seen{ $_->name }++ }
+           map  { $_->calculate_all_roles } @{ $self->roles };
+}
 
 sub superclasses {
     my $self = shift;
@@ -65,6 +70,7 @@ sub find_method_by_name{
     my($self, $method_name) = @_;
     defined($method_name)
         or $self->throw_error('You must define a method name to find');
+
     foreach my $class( $self->linearized_isa ){
         my $method = $self->initialize($class)->get_method($method_name);
         return $method if defined $method;
@@ -143,7 +149,8 @@ sub add_attribute {
 }
 
 sub compute_all_applicable_attributes {
-    Carp::cluck('compute_all_applicable_attributes() has been deprecated');
+    Carp::cluck('compute_all_applicable_attributes() has been deprecated')
+        if _MOUSE_VERBOSE;
     return shift->get_all_attributes(@_)
 }
 
@@ -164,7 +171,7 @@ sub get_all_attributes {
     return @attr;
 }
 
-sub linearized_isa { @{ get_linear_isa($_[0]->name) } }
+sub linearized_isa;
 
 sub new_object {
     my $self = shift;
@@ -186,7 +193,7 @@ sub _initialize_object{
         my $key  = $attribute->name;
 
         if (defined($from) && exists($args->{$from})) {
-            $object->{$key} = $attribute->_coerce_and_verify($args->{$from});
+            $object->{$key} = $attribute->_coerce_and_verify($args->{$from}, $object);
 
             weaken($object->{$key})
                 if ref($object->{$key}) && $attribute->is_weak_ref;
@@ -204,7 +211,7 @@ sub _initialize_object{
                                 : ref($default) eq 'CODE' ? $object->$default()
                                 :                           $default;
 
-                    $object->{$key} = $attribute->_coerce_and_verify($value, $object);;
+                    $object->{$key} = $attribute->_coerce_and_verify($value, $object);
 
                     weaken($object->{$key})
                         if ref($object->{$key}) && $attribute->is_weak_ref;
@@ -470,6 +477,10 @@ __END__
 
 Mouse::Meta::Class - The Mouse class metaclass
 
+=head1 VERSION
+
+This document describes Mouse version 0.40_01
+
 =head1 METHODS
 
 =head2 C<< initialize(ClassName) -> Mouse::Meta::Class >>