bf19053708fc9b397dca484393f7a90a95782b1e
[gitmo/Moo.git] / lib / Class / Tiny / Object.pm
1 package Class::Tiny::Object;
2
3 use strictures 1;
4
5 our %NO_BUILD;
6 our $BUILD_MAKER;
7
8 sub new {
9   my $class = shift;
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)
15     : bless({ ref($_[0]) eq 'HASH' ? %{$_[0]} : @_ }, $class)->BUILDALL;
16 }
17
18 sub BUILDALL {
19   my $self = shift;
20   $self->${\(($BUILD_MAKER ||= do {
21     require Method::Generate::BuildAll;
22     Method::Generate::BuildAll->new
23   })->generate_method(ref($self)))}(@_);
24 }
25
26 sub does {
27   require Role::Tiny;
28   { no warnings 'redefine'; *does = \&Role::Tiny::does_role }
29   goto &Role::Tiny::does_role;
30 }
31
32 1;