Commit | Line | Data |
b1eebd55 |
1 | package Moo::Object; |
6c74d087 |
2 | |
3 | use strictures 1; |
4 | |
098a367b |
5 | our %NO_BUILD; |
6 | our $BUILD_MAKER; |
7 | |
6c74d087 |
8 | sub new { |
9 | my $class = shift; |
098a367b |
10 | $NO_BUILD{$class} and |
11 | return bless({ ref($_[0]) eq 'HASH' ? %{$_[0]} : @_ }, $class); |
12 | $NO_BUILD{$class} = !$class->can('BUILD') unless exists $NO_BUILD{$class}; |
13 | $NO_BUILD{$class} |
14 | ? bless({ ref($_[0]) eq 'HASH' ? %{$_[0]} : @_ }, $class) |
077bd026 |
15 | : do { |
5d349892 |
16 | my $proto = ref($_[0]) eq 'HASH' ? $_[0] : { @_ }; |
17 | bless({ %$proto }, $class)->BUILDALL($proto); |
077bd026 |
18 | }; |
098a367b |
19 | } |
20 | |
21 | sub BUILDALL { |
22 | my $self = shift; |
23 | $self->${\(($BUILD_MAKER ||= do { |
24 | require Method::Generate::BuildAll; |
25 | Method::Generate::BuildAll->new |
26 | })->generate_method(ref($self)))}(@_); |
6c74d087 |
27 | } |
28 | |
29 | sub does { |
30 | require Role::Tiny; |
31 | { no warnings 'redefine'; *does = \&Role::Tiny::does_role } |
32 | goto &Role::Tiny::does_role; |
33 | } |
34 | |
35 | 1; |