Begin adding a Mouse::Meta::Role which is accessible through Role->meta
[gitmo/Mouse.git] / lib / Mouse / Role.pm
1 #!/usr/bin/env perl
2 package Mouse::Role;
3 use strict;
4 use warnings;
5
6 use Sub::Exporter;
7 use Carp 'confess';
8 use Scalar::Util;
9
10 use Mouse::Meta::Role;
11
12 do {
13     my $CALLER;
14
15     my %exports = (
16         meta => sub {
17             my $meta = Mouse::Meta::Role->initialize($CALLER);
18             return sub { $meta };
19         },
20         extends => sub {
21             return sub {
22                 confess "Role does not currently support 'extends'";
23             }
24         },
25         before => sub {
26             return sub { }
27         },
28         after => sub {
29             return sub { }
30         },
31         around => sub {
32             return sub { }
33         },
34         has => sub {
35             return sub { }
36         },
37         with => sub {
38             return sub { }
39         },
40         requires => sub {
41             return sub { }
42         },
43         excludes => sub {
44             return sub { }
45         },
46         blessed => sub {
47             return \&Scalar::Util::blessed;
48         },
49         confess => sub {
50             return \&Carp::confess;
51         },
52     );
53
54     my $exporter = Sub::Exporter::build_exporter({
55         exports => \%exports,
56         groups  => { default => [':all'] },
57     });
58
59     sub import {
60         $CALLER = caller;
61
62         strict->import;
63         warnings->import;
64
65         goto $exporter;
66     }
67
68     sub unimport {
69     }
70 };
71
72 1;
73