1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
use strict;
use warnings;
use Test::More;
use Test::Fatal;
{
package ApplicationMetaRole;
use Moose::Role;
use Moose::Util::MetaRole;
after apply => sub {
my ($self, $role_source, $role_dest, $args) = @_;
Moose::Util::MetaRole::apply_metaroles
(
for => $role_dest,
role_metaroles =>
{
application_to_role => ['ApplicationMetaRole'],
}
);
};
}
{
package MyMetaRole;
use Moose::Role;
use Moose::Util::MetaRole;
use Moose::Exporter;
Moose::Exporter->setup_import_methods(also => q<Moose::Role>);
sub init_meta {
my ($class, %opts) = @_;
Moose::Role->init_meta(%opts);
Moose::Util::MetaRole::apply_metaroles
(
for => $opts{for_class},
role_metaroles =>
{
application_to_role => ['ApplicationMetaRole'],
}
);
return $opts{for_class}->meta();
};
}
{
package MyRole;
use Moose::Role;
MyMetaRole->import;
use Moose::Util::TypeConstraints;
has schema => (
is => 'ro',
coerce => 1,
);
}
{
package MyTargetRole;
use Moose::Role;
::is(::exception { with "MyRole" }, undef,
"apply a meta role to a role, which is then applied to yet another role");
}
done_testing;
|