Update Changes
[gitmo/Mouse.git] / lib / Mouse / Role.pm
CommitLineData
f9e68395 1#!/usr/bin/env perl
2package Mouse::Role;
3use strict;
4use warnings;
5
6use Sub::Exporter;
8da998d9 7use Carp 'confess';
4377514b 8use Scalar::Util;
f9e68395 9
a2227e71 10use Mouse::Meta::Role;
11
f9e68395 12do {
13 my $CALLER;
14
15 my %exports = (
a2227e71 16 meta => sub {
17 my $meta = Mouse::Meta::Role->initialize($CALLER);
18 return sub { $meta };
19 },
8da998d9 20 extends => sub {
21 return sub {
964eaf79 22 confess "Role does not currently support 'extends'";
8da998d9 23 }
24 },
72381201 25 before => sub {
26 return sub { }
27 },
28 after => sub {
29 return sub { }
30 },
31 around => sub {
32 return sub { }
33 },
26482d3f 34 has => sub {
0fc8adbc 35 my $caller = $CALLER;
36 return sub {
37 my $name = shift;
38 my @opts = @_;
39
40 $caller->meta->add_attribute($name => \@opts);
41 }
26482d3f 42 },
00c0e9c2 43 with => sub {
44 return sub { }
45 },
eb812bde 46 requires => sub {
47 return sub { }
48 },
49 excludes => sub {
50 return sub { }
51 },
4377514b 52 blessed => sub {
53 return \&Scalar::Util::blessed;
54 },
55 confess => sub {
56 return \&Carp::confess;
57 },
f9e68395 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
781;
79