Document BUILDARGS
[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;
69ac1dcf 38 my %opts = @_;
0fc8adbc 39
69ac1dcf 40 $caller->meta->add_attribute($name => \%opts);
0fc8adbc 41 }
26482d3f 42 },
00c0e9c2 43 with => sub {
78400480 44 return sub {
45 confess "Role does not currently support 'with'";
46 }
00c0e9c2 47 },
eb812bde 48 requires => sub {
49 return sub { }
50 },
51 excludes => sub {
52 return sub { }
53 },
4377514b 54 blessed => sub {
55 return \&Scalar::Util::blessed;
56 },
57 confess => sub {
58 return \&Carp::confess;
59 },
f9e68395 60 );
61
62 my $exporter = Sub::Exporter::build_exporter({
63 exports => \%exports,
64 groups => { default => [':all'] },
65 });
66
67 sub import {
68 $CALLER = caller;
69
70 strict->import;
71 warnings->import;
72
73 goto $exporter;
74 }
75
76 sub unimport {
e71d8033 77 my $caller = caller;
78
79 no strict 'refs';
80 for my $keyword (keys %exports) {
81 next if $keyword eq 'meta'; # we don't delete this one
82 delete ${ $caller . '::' }{$keyword};
83 }
f9e68395 84 }
85};
86
871;
88