Acme-Has-Tiny
view release on metacpan or search on metacpan
Makefile.PL view on Meta::CPAN
"version" => 0.002,
};
my %dynamic_config;
my %WriteMakefileArgs = (
ABSTRACT => $meta->{abstract},
AUTHOR => ($EUMM >= 6.5702 ? $meta->{author} : $meta->{author}[0]),
DISTNAME => $meta->{name},
VERSION => $meta->{version},
EXE_FILES => [ map $_->{file}, values %{ $meta->{x_provides_scripts} || {} } ],
NAME => do { my $n = $meta->{name}; $n =~ s/-/::/g; $n },
test => { TESTS => "t/*.t" },
%dynamic_config,
);
$WriteMakefileArgs{LICENSE} = $meta->{license}[0] if $EUMM >= 6.3001;
sub deps
{
my %r;
Makefile.PL view on Meta::CPAN
$WriteMakefileArgs{PREREQ_PM} ||= deps('runtime', 'build', 'test');
}
else
{
$WriteMakefileArgs{PREREQ_PM} ||= deps('configure', 'build', 'test', 'runtime');
}
{
my ($minperl) = reverse sort(
grep defined && /^[0-9]+(\.[0-9]+)?$/,
map $meta->{prereqs}{$_}{requires}{perl},
qw( configure build runtime )
);
if (defined($minperl))
{
die "Installing $meta->{name} requires Perl >= $minperl"
unless $] >= $minperl;
$WriteMakefileArgs{MIN_PERL_VERSION} ||= $minperl
if $EUMM >= 6.48;
lib/Acme/Has/Tiny.pm view on Meta::CPAN
}
BEGIN { *CAN_HAZ_XS = eval 'use Class::XSAccessor 1.18; 1' ? sub(){!!1} : sub(){!!0} };
sub import
{
no strict qw(refs);
my $me = shift;
my $caller = caller;
my %want = map +($_ => 1), @_;
if ($want{has})
{
*{"$caller\::has"} = sub { unshift @_, __PACKAGE__; goto \&has };
}
if ($want{new})
{
*{"$caller\::new"} = sub {
my $new = $me->create_constructor("new", class => $_[0], replace => 1);
lib/Acme/Has/Tiny.pm view on Meta::CPAN
eval($str) or die("COMPILE ERROR: $@\nCODE:\n$str\n");
return;
}
sub assert_valid
{
my $me = shift;
my ($class, $hash) = @_;
my @validator = map {
$VALIDATORS{$_} ||= $me->_compile_validator($_, $ATTRIBUTES{$_});
} $me->_find_parents($class);
$_->($hash) for @validator;
return $hash;
}
my $default_buildargs = sub
{
my $class = shift;
lib/Acme/Has/Tiny.pm view on Meta::CPAN
my @code;
for my $a (sort keys %$attributes)
{
my $spec = $attributes->{$a};
if ($spec->{default})
{
push @code, sprintf(
'exists($self->{%s}) or $self->{%s} = $Acme::Has::Tiny::ATTRIBUTES{%s}{%s}{default}->();',
map perlstring($_), $a, $a, $class, $a,
);
}
elsif ($spec->{required})
{
push @code, sprintf(
'exists($self->{%s}) or Acme::Has::Tiny::_croak("Attribute %%s is required by %%s", %s, %s);',
map perlstring($_), $a, $a, $class,
);
}
my $isa = $spec->{isa};
if (blessed($isa) and $isa->can_be_inlined)
{
push @code, (
sprintf('if (exists($self->{%s})) {', $a),
$isa->inline_assert(sprintf '$self->{%s}', perlstring($a)),
'}',
);
}
elsif ($isa)
{
push @code, (
sprintf('if (exists($self->{%s})) {', $a),
sprintf('$Acme::Has::Tiny::ATTRIBUTES{%s}{%s}{isa}->($self->{%s});', map perlstring($_), $class, $a, $a),
'}',
);
}
}
return @code;
}
sub _find_parents
{
( run in 0.963 second using v1.01-cache-2.11-cpan-49f99fa48dc )