package Test2::Harness::Util::Deprecated;
use strict;
use warnings;
our $VERSION = '2.000006'; # TRIAL
use Carp qw/confess cluck carp/;
use vars qw/$IGNORE_IMPORT/;
sub import {
my $class = shift;
my %params = @_;
my ($mod, $file, $line) = caller();
my $append = delete($params{append});
my $delegate = delete($params{delegate});
my $replaced = delete($params{replaced}) // $delegate;
my $fatal = delete($params{fatal}) // ($delegate ? 0 : 1);
my $inject = delete($params{inject}) // ($delegate ? 0 : 1);
my $core = delete($params{core}) // 0;
my $replaced_is_list = 0;
if ($replaced) {
if (ref($replaced) eq 'ARRAY') {
$replaced_is_list = @$replaced > 1 ? 1 : 0;
$replaced = join(", " => map { "'$_'" } @$replaced);
}
else {
$replaced = "'$replaced'";
}
}
$inject = 0 if delete $params{no_inject};
my $out = "Module '$mod' has been deprecated";
$out .= ", it has been replaced by: $replaced" if $replaced;
$out .= "\n";
if ($delegate) {
$out .= "Currently '$mod' module will automatically delegate to '$delegate' (via inheritence), but this could change in the future.\n";
no strict 'refs';
push @{"$mod\::ISA"} => $delegate;
}
if ($replaced) {
my $alt = " or another alternative";
$alt = ",$alt" if $replaced_is_list;
$out .= "You " . ($delegate ? 'should' : 'must') . " switch to using ${replaced}${alt} if you wish to maintain this functionality.\n";
}
if ($append) {
chomp($append);
$out .= "$append\n";
}
$out .= "Deprecated module '$mod' was loaded";
my $action = sub {
local $Carp::CarpInternal{$class} = 1;
local $Carp::CarpInternal{$mod} = 1;
$fatal ? confess($out) : cluck($out);
};
if ($inject) {
no strict 'refs';
*{"$mod\::$_"} = $action for qw/new init does can DOES meta options isa/;
*{"$mod\::import"} = sub { return if $IGNORE_IMPORT; goto &$action };
my $deprecated = 1;
*{"$mod\::deprecated"} = sub { $deprecated };
*{"$mod\::DEPRECATED"} = \$deprecated;
*{"$mod\::deprecated_core"} = sub { $core };
*{"$mod\::DEPRECATED_CORE"} = \$core;
}
if (my @bad = sort keys %params) {
carp("Invalid options to '$class': " . join(', ' => @bad));
}
$action->() unless $IGNORE_IMPORT;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Test2::Harness::Util::Deprecated - FIXME
=head1 DESCRIPTION
=head1 SYNOPSIS
=head1 EXPORTS
=over 4
=back
=head1 SOURCE
The source code repository for Test2-Harness can be found at
L.
=head1 MAINTAINERS
=over 4
=item Chad Granum Eexodist@cpan.orgE
=back
=head1 AUTHORS
=over 4
=item Chad Granum Eexodist@cpan.orgE
=back
=head1 COPYRIGHT
Copyright Chad Granum Eexodist7@gmail.comE.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
See L
=cut
=pod
=cut POD NEEDS AUDIT