add BUILDALL support
[gitmo/Role-Tiny.git] / lib / Method / Generate / BuildAll.pm
1 package Method::Generate::BuildAll;
2
3 use strictures 1;
4 use base qw(Class::Tiny::Object);
5 use Sub::Quote;
6 use Class::Tiny::_mro;
7 use Class::Tiny::_Utils;
8
9 sub generate_method {
10   my ($self, $into) = @_;
11   my @builds =
12     grep *{_getglob($_)}{CODE},
13     map "${_}::BUILD",
14     reverse @{mro::get_linear_isa($into)};
15   quote_sub "${into}::BUILDALL", join '',
16     qq{    my \$self = shift;\n},
17     (map qq{    \$self->${_}(\@_);\n}, @builds),
18     qq{    return \$self\n};
19 }
20
21 1;