Use dzil Authority plugin - remove $AUTHORITY from code
[gitmo/Moose.git] / lib / Class / MOP / MiniTrait.pm
1 package Class::MOP::MiniTrait;
2
3 use strict;
4 use warnings;
5
6 sub apply {
7     my ( $to_class, $trait ) = @_;
8
9     for ( grep { !ref } $to_class, $trait ) {
10         Class::MOP::load_class($_);
11         $_ = Class::MOP::Class->initialize($_);
12     }
13
14     for my $meth ( $trait->get_all_methods ) {
15         my $meth_name = $meth->name;
16
17         if ( $to_class->find_method_by_name($meth_name) ) {
18             $to_class->add_around_method_modifier( $meth_name, $meth->body );
19         }
20         else {
21             $to_class->add_method( $meth_name, $meth->clone );
22         }
23     }
24 }
25
26 # We can't load this with use, since it may be loaded and used from Class::MOP
27 # (via CMOP::Class, etc). However, if for some reason this module is loaded
28 # _without_ first loading Class::MOP we need to require Class::MOP so we can
29 # use it and CMOP::Class.
30 require Class::MOP;
31
32 1;
33
34 __END__
35
36 =pod
37
38 =head1 NAME 
39
40 Class::MOP::MiniTrait - Extremely limited trait application
41
42 =head1 DESCRIPTION
43
44 This package provides a single function, C<apply>, which does a half-assed job
45 of applying a trait to a class. It exists solely for use inside Class::MOP and
46 L<Moose> core classes.
47
48 =cut
49