Initial Commit
This commit is contained in:
77
database/perl/vendor/lib/Moo/Object.pm
vendored
Normal file
77
database/perl/vendor/lib/Moo/Object.pm
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
package Moo::Object;
|
||||
|
||||
use Moo::_strictures;
|
||||
use Carp ();
|
||||
|
||||
our %NO_BUILD;
|
||||
our %NO_DEMOLISH;
|
||||
our $BUILD_MAKER;
|
||||
our $DEMOLISH_MAKER;
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
unless (exists $NO_DEMOLISH{$class}) {
|
||||
unless ($NO_DEMOLISH{$class} = !$class->can('DEMOLISH')) {
|
||||
($DEMOLISH_MAKER ||= do {
|
||||
require Method::Generate::DemolishAll;
|
||||
Method::Generate::DemolishAll->new
|
||||
})->generate_method($class);
|
||||
}
|
||||
}
|
||||
my $proto = $class->BUILDARGS(@_);
|
||||
$NO_BUILD{$class} and
|
||||
return bless({}, $class);
|
||||
$NO_BUILD{$class} = !$class->can('BUILD') unless exists $NO_BUILD{$class};
|
||||
$NO_BUILD{$class}
|
||||
? bless({}, $class)
|
||||
: bless({}, $class)->BUILDALL($proto);
|
||||
}
|
||||
|
||||
# Inlined into Method::Generate::Constructor::_generate_args() - keep in sync
|
||||
sub BUILDARGS {
|
||||
my $class = shift;
|
||||
scalar @_ == 1
|
||||
? ref $_[0] eq 'HASH'
|
||||
? { %{ $_[0] } }
|
||||
: Carp::croak("Single parameters to new() must be a HASH ref"
|
||||
. " data => ". $_[0])
|
||||
: @_ % 2
|
||||
? Carp::croak("The new() method for $class expects a hash reference or a"
|
||||
. " key/value list. You passed an odd number of arguments")
|
||||
: {@_}
|
||||
;
|
||||
}
|
||||
|
||||
sub BUILDALL {
|
||||
my $self = shift;
|
||||
$self->${\(($BUILD_MAKER ||= do {
|
||||
require Method::Generate::BuildAll;
|
||||
Method::Generate::BuildAll->new
|
||||
})->generate_method(ref($self)))}(@_);
|
||||
}
|
||||
|
||||
sub DEMOLISHALL {
|
||||
my $self = shift;
|
||||
$self->${\(($DEMOLISH_MAKER ||= do {
|
||||
require Method::Generate::DemolishAll;
|
||||
Method::Generate::DemolishAll->new
|
||||
})->generate_method(ref($self)))}(@_);
|
||||
}
|
||||
|
||||
sub does {
|
||||
return !!0
|
||||
unless ($INC{'Moose/Role.pm'} || $INC{'Role/Tiny.pm'});
|
||||
require Moo::Role;
|
||||
my $does = Moo::Role->can("does_role");
|
||||
{ no warnings 'redefine'; *does = $does }
|
||||
goto &$does;
|
||||
}
|
||||
|
||||
# duplicated in Moo::Role
|
||||
sub meta {
|
||||
require Moo::HandleMoose::FakeMetaClass;
|
||||
my $class = ref($_[0])||$_[0];
|
||||
bless({ name => $class }, 'Moo::HandleMoose::FakeMetaClass');
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user