summaryrefslogtreecommitdiffstats
path: root/t/lib/AtomicMethod.pm
blob: 652159a2053ae87114e98d23cc42c1e448c7db94 (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
package AtomicMethod;
use MooseX::Exporter::Easy;

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

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

export;

1;