Stub 'has_attribute' and make 'has' use 'add_attribute'
[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             my $caller = $CALLER;
36             return sub {
37                 my $name = shift;
38                 my @opts = @_;
39
40                 $caller->meta->add_attribute($name => \@opts);
41             }
42         },
43         with => sub {
44             return sub { }
45         },
46         requires => sub {
47             return sub { }
48         },
49         excludes => sub {
50             return sub { }
51         },
52         blessed => sub {
53             return \&Scalar::Util::blessed;
54         },
55         confess => sub {
56             return \&Carp::confess;
57         },
58     );
59
60     my $exporter = Sub::Exporter::build_exporter({
61         exports => \%exports,
62         groups  => { default => [':all'] },
63     });
64
65     sub import {
66         $CALLER = caller;
67
68         strict->import;
69         warnings->import;
70
71         goto $exporter;
72     }
73
74     sub unimport {
75     }
76 };
77
78 1;
79