summaryrefslogtreecommitdiffstats
path: root/t/lib/Command.pm
blob: b39b8b5a8d234ad720d46887ed960b10a6026ceb (plain) (blame)
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
package Command;
use MooseX::Exporter::Easy;

class_metaroles {
    class => ['Command::Role::Class'],
};

sub _command_method_meta {
    my ($meta) = @_;
    Moose::Meta::Class->create_anon_class(
        superclasses => [$meta->method_metaclass],
        roles        => ['Command::Role::Method'],
        cache        => 1,
    )->name;
}

with_meta command => sub {
    my ($meta, $name, $code) = @_;
    $meta->add_method(
        $name => _command_method_meta($meta)->wrap(
            $code,
            name                 => $name,
            package_name         => $meta->name,
            associated_metaclass => $meta
        ),
    );
};

export;

1;