package Ark::Plugin;
use Mouse::Role;
use Mouse::Exporter;
do {
my %EXPORTS;
sub import {
my ($class, $context) = @_;
require utf8; utf8->import;
my $caller = caller;
Mouse::Meta::Role->initialize($caller);
my ($import, $unimport) = Mouse::Exporter->build_import_methods(
exporting_package => $caller,
also => "Mouse::Role",
);
$EXPORTS{$caller} = $unimport;
$caller->$import({ into => $caller });
no strict 'refs';
*{ $caller . '::plugin_context' } = sub { $context };
*{ $caller . '::method' } = sub {
my ($self, $method) = @_;
my $caller = caller;
my $sub = $caller->can($method) or die qq/No such method "$method" on $caller/;
return sub { $sub->($self, @_) };
};
}
sub unimport {
goto \&{ $EXPORTS{ scalar caller } };
}
};
1;