diff options
79 files changed, 3 insertions, 2900 deletions
@@ -1664,80 +1664,6 @@ cpan/Module-Metadata/t/lib/MBTest.pm cpan/Module-Metadata/t/lib/Tie/CPHash.pm cpan/Module-Metadata/t/metadata.t cpan/Module-Metadata/t/version.t -cpan/Module-Pluggable/lib/Devel/InnerPackage.pm Find inner packages -cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm Module::Pluggable -cpan/Module-Pluggable/lib/Module/Pluggable.pm Module::Pluggable -cpan/Module-Pluggable/Makefile.PL Module::Pluggable -cpan/Module-Pluggable/t/01use.t Module::Pluggable tests -cpan/Module-Pluggable/t/02alsoworks.t Module::Pluggable tests -cpan/Module-Pluggable/t/02works.t Module::Pluggable tests -cpan/Module-Pluggable/t/02works_taint.t Module::Pluggable tests -cpan/Module-Pluggable/t/03diffname.t Module::Pluggable tests -cpan/Module-Pluggable/t/04acmedir_single.t Module::Pluggable tests -cpan/Module-Pluggable/t/04acmedir.t Module::Pluggable tests -cpan/Module-Pluggable/t/04acmepath_single.t Module::Pluggable tests -cpan/Module-Pluggable/t/04acmepath.t Module::Pluggable tests -cpan/Module-Pluggable/t/05postpath.t Module::Pluggable tests -cpan/Module-Pluggable/t/06multipath.t Module::Pluggable tests -cpan/Module-Pluggable/t/07instantiate.t Module::Pluggable tests -cpan/Module-Pluggable/t/08nothing.t Module::Pluggable tests -cpan/Module-Pluggable/t/09require.t Module::Pluggable tests -cpan/Module-Pluggable/t/10innerpack_inner.t Module::Pluggable tests -cpan/Module-Pluggable/t/10innerpack_noinner.t Module::Pluggable tests -cpan/Module-Pluggable/t/10innerpack_onefile.t Module::Pluggable tests -cpan/Module-Pluggable/t/10innerpack_override.t Module::Pluggable tests -cpan/Module-Pluggable/t/10innerpack_super.t Module::Pluggable tests -cpan/Module-Pluggable/t/10innerpack.t Module::Pluggable tests -cpan/Module-Pluggable/t/11usetwice.t Module::Pluggable tests -cpan/Module-Pluggable/t/12onlyarray.t Module::Pluggable tests -cpan/Module-Pluggable/t/12onlyregex.t Module::Pluggable tests -cpan/Module-Pluggable/t/12onlyrequire.t Module::Pluggable tests -cpan/Module-Pluggable/t/12only.t Module::Pluggable tests -cpan/Module-Pluggable/t/13exceptarray.t Module::Pluggable tests -cpan/Module-Pluggable/t/13exceptregex.t Module::Pluggable tests -cpan/Module-Pluggable/t/13except.t Module::Pluggable tests -cpan/Module-Pluggable/t/14package.t Module::Pluggable tests -cpan/Module-Pluggable/t/15topicsafe.t Module::Pluggable tests -cpan/Module-Pluggable/t/16different_extension.t Module::Pluggable tests -cpan/Module-Pluggable/t/17devel_inner_package.t Module::Pluggable tests -cpan/Module-Pluggable/t/18skipped_package.t Module::Pluggable tests -cpan/Module-Pluggable/t/19can_ok_clobber.t Module::Pluggable tests -cpan/Module-Pluggable/t/20dodgy_files.t Module::Pluggable tests -cpan/Module-Pluggable/t/21editor_junk.t Module::Pluggable tests -cpan/Module-Pluggable/t/22trigger.t Module::Pluggable tests -cpan/Module-Pluggable/t/23depth.t Module::Pluggable tests -cpan/Module-Pluggable/t/24local_inc_object.t Module::Pluggable tests -cpan/Module-Pluggable/t/24local_inc_package.t Module::Pluggable tests -cpan/Module-Pluggable/t/acme/Acme/MyTest/Plugin/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/Acme/Foo-Bar.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/Acme/MyTest/Plugin/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm~ Module::Pluggable tests -cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm.swo Module::Pluggable tests -cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm.swp Module::Pluggable tests -cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Bar.plugin Module::Pluggable tests -cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Foo.plugin Module::Pluggable tests -cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Quux/Foo.plugin Module::Pluggable tests -cpan/Module-Pluggable/t/lib/InnerTest/Plugin/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Bar.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Quux/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Quux.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/MyTest/Extend/Plugin/Bar.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/MyTest/Plugin/Bar.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/MyTest/Plugin/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/MyTest/Plugin/Quux/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/No/Middle.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/OddTest/Plugin/Foo.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/TA/C/A/I.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/Text/Abbrev.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/After.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackAllow.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackDeny.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Deny.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Error.pm Module::Pluggable tests -cpan/Module-Pluggable/t/lib/Zot/.Zork.pm Module::Pluggable tests cpan/NEXT/lib/NEXT.pm Pseudo-class NEXT for method redispatch cpan/NEXT/t/actual.t NEXT cpan/NEXT/t/actuns.t NEXT diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index cf9065e189..107c8132c6 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -1260,15 +1260,6 @@ use File::Glob qw(:case); 'UPSTREAM' => 'cpan', }, - 'Module::Pluggable' => { - 'MAINTAINER' => 'simonw', - 'DISTRIBUTION' => 'SIMONW/Module-Pluggable-4.7.tar.gz', - 'FILES' => q[cpan/Module-Pluggable], - 'UPSTREAM' => 'cpan', - 'CUSTOMIZED' => ['Makefile.PL'], - 'DEPRECATED' => '5.017009', - }, - 'mro' => { 'MAINTAINER' => 'p5p', 'FILES' => q[ext/mro], diff --git a/cpan/Module-Pluggable/Makefile.PL b/cpan/Module-Pluggable/Makefile.PL deleted file mode 100644 index e1e9001081..0000000000 --- a/cpan/Module-Pluggable/Makefile.PL +++ /dev/null @@ -1,43 +0,0 @@ -# Note: this file was auto-generated by Module::Build::Compat version 0.03 -use ExtUtils::MakeMaker; -use FindBin; -use File::Spec::Functions qw(catfile); - -# VOS and VMS can't handle dodgy plugin names -# and VOS can't even unpack them so we create them on the -# fly and only run the tests if they're present -my %dodgy_files = ( - catfile(qw(OddTest Plugin -Dodgy.pm)) => 'OddTest::Plugin::-Dodgy', - catfile(qw(EditorJunk Plugin #Bar.pm#)) => 'EditorJunk::Bar', - catfile(qw(EditorJunk Plugin .#Bar.pm)) => 'EditorJunk::Bar', -); - -my @files; -unless (grep { lc($^O) eq $_ } qw(vms vos)) { - foreach my $test (keys %dodgy_files) { - my ($file) = (catfile($FindBin::Bin, "t", "lib", $test)=~/^(.*)$/); - if (open(FH, ">$file")) { - my $name = $dodgy_files{$test}; - print FH "package $name;\nsub new {}\n1;"; - close(FH); - push @files, $file; - } - } -} - - -WriteMakefile -( - 'NAME' => 'Module::Pluggable', - 'VERSION_FROM' => 'lib/Module/Pluggable.pm', - 'PREREQ_PM' => { - 'File::Basename' => '0', - 'File::Spec' => '3.00', - 'Test::More' => '0.62' - }, - 'EXE_FILES' => [], - 'INSTALLDIRS' => ($] >= 5.008009) ? "perl" : "site", - 'PL_FILES' => {}, - 'realclean' => {FILES=> join ' ', @files}, - ) -; diff --git a/cpan/Module-Pluggable/lib/Devel/InnerPackage.pm b/cpan/Module-Pluggable/lib/Devel/InnerPackage.pm deleted file mode 100644 index cf285693e2..0000000000 --- a/cpan/Module-Pluggable/lib/Devel/InnerPackage.pm +++ /dev/null @@ -1,129 +0,0 @@ -package Devel::InnerPackage; - -use strict; -use base qw(Exporter); -use vars qw($VERSION @EXPORT_OK); - -use if $] > 5.017, 'deprecate'; - -$VERSION = '0.4'; -@EXPORT_OK = qw(list_packages); - -=pod - -=head1 NAME - -Devel::InnerPackage - find all the inner packages of a package - -=head1 SYNOPSIS - - use Foo::Bar; - use Devel::InnerPackage qw(list_packages); - - my @inner_packages = list_packages('Foo::Bar'); - - -=head1 DESCRIPTION - - -Given a file like this - - - package Foo::Bar; - - sub foo {} - - - package Foo::Bar::Quux; - - sub quux {} - - package Foo::Bar::Quirka; - - sub quirka {} - - 1; - -then - - list_packages('Foo::Bar'); - -will return - - Foo::Bar::Quux - Foo::Bar::Quirka - -=head1 METHODS - -=head2 list_packages <package name> - -Return a list of all inner packages of that package. - -=cut - -sub list_packages { - my $pack = shift; $pack .= "::" unless $pack =~ m!::$!; - - no strict 'refs'; - my @packs; - my @stuff = grep !/^(main|)::$/, keys %{$pack}; - for my $cand (grep /::$/, @stuff) - { - $cand =~ s!::$!!; - my @children = list_packages($pack.$cand); - - push @packs, "$pack$cand" unless $cand =~ /^::/ || - !__PACKAGE__->_loaded($pack.$cand); # or @children; - push @packs, @children; - } - return grep {$_ !~ /::(::ISA::CACHE|SUPER)/} @packs; -} - -### XXX this is an inlining of the Class-Inspector->loaded() -### method, but inlined to remove the dependency. -sub _loaded { - my ($class, $name) = @_; - - no strict 'refs'; - - # Handle by far the two most common cases - # This is very fast and handles 99% of cases. - return 1 if defined ${"${name}::VERSION"}; - return 1 if @{"${name}::ISA"}; - - # Are there any symbol table entries other than other namespaces - foreach ( keys %{"${name}::"} ) { - next if substr($_, -2, 2) eq '::'; - return 1 if defined &{"${name}::$_"}; - } - - # No functions, and it doesn't have a version, and isn't anything. - # As an absolute last resort, check for an entry in %INC - my $filename = join( '/', split /(?:'|::)/, $name ) . '.pm'; - return 1 if defined $INC{$filename}; - - ''; -} - - -=head1 AUTHOR - -Simon Wistow <simon@thegestalt.org> - -=head1 COPYING - -Copyright, 2005 Simon Wistow - -Distributed under the same terms as Perl itself. - -=head1 BUGS - -None known. - -=cut - - - - - -1; diff --git a/cpan/Module-Pluggable/lib/Module/Pluggable.pm b/cpan/Module-Pluggable/lib/Module/Pluggable.pm deleted file mode 100644 index 9e7962efab..0000000000 --- a/cpan/Module-Pluggable/lib/Module/Pluggable.pm +++ /dev/null @@ -1,457 +0,0 @@ -package Module::Pluggable; - -use strict; -use vars qw($VERSION $FORCE_SEARCH_ALL_PATHS); -use Module::Pluggable::Object; - -use if $] > 5.017, 'deprecate'; - -# ObQuote: -# Bob Porter: Looks like you've been missing a lot of work lately. -# Peter Gibbons: I wouldn't say I've been missing it, Bob! - - -$VERSION = '4.7'; -$FORCE_SEARCH_ALL_PATHS = 0; - -sub import { - my $class = shift; - my %opts = @_; - - my ($pkg, $file) = caller; - # the default name for the method is 'plugins' - my $sub = $opts{'sub_name'} || 'plugins'; - # get our package - my ($package) = $opts{'package'} || $pkg; - $opts{filename} = $file; - $opts{package} = $package; - $opts{force_search_all_paths} = $FORCE_SEARCH_ALL_PATHS unless exists $opts{force_search_all_paths}; - - - my $finder = Module::Pluggable::Object->new(%opts); - my $subroutine = sub { my $self = shift; return $finder->plugins(@_) }; - - my $searchsub = sub { - my $self = shift; - my ($action,@paths) = @_; - - $finder->{'search_path'} = ["${package}::Plugin"] if ($action eq 'add' and not $finder->{'search_path'} ); - push @{$finder->{'search_path'}}, @paths if ($action eq 'add'); - $finder->{'search_path'} = \@paths if ($action eq 'new'); - return $finder->{'search_path'}; - }; - - - my $onlysub = sub { - my ($self, $only) = @_; - - if (defined $only) { - $finder->{'only'} = $only; - }; - - return $finder->{'only'}; - }; - - my $exceptsub = sub { - my ($self, $except) = @_; - - if (defined $except) { - $finder->{'except'} = $except; - }; - - return $finder->{'except'}; - }; - - - no strict 'refs'; - no warnings qw(redefine prototype); - - *{"$package\::$sub"} = $subroutine; - *{"$package\::search_path"} = $searchsub; - *{"$package\::only"} = $onlysub; - *{"$package\::except"} = $exceptsub; - -} - -1; - -=pod - -=head1 NAME - -Module::Pluggable - automatically give your module the ability to have plugins - -=head1 SYNOPSIS - - -Simple use Module::Pluggable - - - package MyClass; - use Module::Pluggable; - - -and then later ... - - use MyClass; - my $mc = MyClass->new(); - # returns the names of all plugins installed under MyClass::Plugin::* - my @plugins = $mc->plugins(); - -=head1 EXAMPLE - -Why would you want to do this? Say you have something that wants to pass an -object to a number of different plugins in turn. For example you may -want to extract meta-data from every email you get sent and do something -with it. Plugins make sense here because then you can keep adding new -meta data parsers and all the logic and docs for each one will be -self contained and new handlers are easy to add without changing the -core code. For that, you might do something like ... - - package Email::Examiner; - - use strict; - use Email::Simple; - use Module::Pluggable require => 1; - - sub handle_email { - my $self = shift; - my $email = shift; - - foreach my $plugin ($self->plugins) { - $plugin->examine($email); - } - - return 1; - } - - - -.. and all the plugins will get a chance in turn to look at it. - -This can be trivally extended so that plugins could save the email -somewhere and then no other plugin should try and do that. -Simply have it so that the C<examine> method returns C<1> if -it has saved the email somewhere. You might also wnat to be paranoid -and check to see if the plugin has an C<examine> method. - - foreach my $plugin ($self->plugins) { - next unless $plugin->can('examine'); - last if $plugin->examine($email); - } - - -And so on. The sky's the limit. - - -=head1 DESCRIPTION - -Provides a simple but, hopefully, extensible way of having 'plugins' for -your module. Obviously this isn't going to be the be all and end all of -solutions but it works for me. - -Essentially all it does is export a method into your namespace that -looks through a search path for .pm files and turn those into class names. - -Optionally it instantiates those classes for you. - -=head1 ADVANCED USAGE - -Alternatively, if you don't want to use 'plugins' as the method ... - - package MyClass; - use Module::Pluggable sub_name => 'foo'; - - -and then later ... - - my @plugins = $mc->foo(); - - -Or if you want to look in another namespace - - package MyClass; - use Module::Pluggable search_path => ['Acme::MyClass::Plugin', 'MyClass::Extend']; - -or directory - - use Module::Pluggable search_dirs => ['mylibs/Foo']; - - -Or if you want to instantiate each plugin rather than just return the name - - package MyClass; - use Module::Pluggable instantiate => 'new'; - -and then - - # whatever is passed to 'plugins' will be passed - # to 'new' for each plugin - my @plugins = $mc->plugins(@options); - - -alternatively you can just require the module without instantiating it - - package MyClass; - use Module::Pluggable require => 1; - -since requiring automatically searches inner packages, which may not be desirable, you can turn this off - - - package MyClass; - use Module::Pluggable require => 1, inner => 0; - - -You can limit the plugins loaded using the except option, either as a string, -array ref or regex - - package MyClass; - use Module::Pluggable except => 'MyClass::Plugin::Foo'; - -or - - package MyClass; - use Module::Pluggable except => ['MyClass::Plugin::Foo', 'MyClass::Plugin::Bar']; - -or - - package MyClass; - use Module::Pluggable except => qr/^MyClass::Plugin::(Foo|Bar)$/; - - -and similarly for only which will only load plugins which match. - -Remember you can use the module more than once - - package MyClass; - use Module::Pluggable search_path => 'MyClass::Filters' sub_name => 'filters'; - use Module::Pluggable search_path => 'MyClass::Plugins' sub_name => 'plugins'; - -and then later ... - - my @filters = $self->filters; - my @plugins = $self->plugins; - -=head1 PLUGIN SEARCHING - -Every time you call 'plugins' the whole search path is walked again. This allows -for dynamically loading plugins even at run time. However this can get expensive -and so if you don't expect to want to add new plugins at run time you could do - - - package Foo; - use strict; - use Module::Pluggable sub_name => '_plugins'; - - our @PLUGINS; - sub plugins { @PLUGINS ||= shift->_plugins } - 1; - -=head1 INNER PACKAGES - -If you have, for example, a file B<lib/Something/Plugin/Foo.pm> that -contains package definitions for both C<Something::Plugin::Foo> and -C<Something::Plugin::Bar> then as long as you either have either -the B<require> or B<instantiate> option set then we'll also find -C<Something::Plugin::Bar>. Nifty! - -=head1 OPTIONS - -You can pass a hash of options when importing this module. - -The options can be ... - -=head2 sub_name - -The name of the subroutine to create in your namespace. - -By default this is 'plugins' - -=head2 search_path - -An array ref of namespaces to look in. - -=head2 search_dirs - -An array ref of directorys to look in before @INC. - -=head2 instantiate - -Call this method on the class. In general this will probably be 'new' -but it can be whatever you want. Whatever arguments are passed to 'plugins' -will be passed to the method. - -The default is 'undef' i.e just return the class name. - -=head2 require - -Just require the class, don't instantiate (overrides 'instantiate'); - -=head2 inner - -If set to 0 will B<not> search inner packages. -If set to 1 will override C<require>. - -=head2 only - -Takes a string, array ref or regex describing the names of the only plugins to -return. Whilst this may seem perverse ... well, it is. But it also -makes sense. Trust me. - -=head2 except - -Similar to C<only> it takes a description of plugins to exclude -from returning. This is slightly less perverse. - -=head2 package - -This is for use by extension modules which build on C<Module::Pluggable>: -passing a C<package> option allows you to place the plugin method in a -different package other than your own. - -=head2 file_regex - -By default C<Module::Pluggable> only looks for I<.pm> files. - -By supplying a new C<file_regex> then you can change this behaviour e.g - - file_regex => qr/\.plugin$/ - -=head2 include_editor_junk - -By default C<Module::Pluggable> ignores files that look like they were -left behind by editors. Currently this means files ending in F<~> (~), -the extensions F<.swp> or F<.swo>, or files beginning with F<.#>. - -Setting C<include_editor_junk> changes C<Module::Pluggable> so it does -not ignore any files it finds. - -=head2 follow_symlinks - -Whether, when searching directories, to follow symlinks. - -Defaults to 1 i.e do follow symlinks. - -=head2 min_depth, max_depth - -This will allow you to set what 'depth' of plugin will be allowed. - -So, for example, C<MyClass::Plugin::Foo> will have a depth of 3 and -C<MyClass::Plugin::Foo::Bar> will have a depth of 4 so to only get the former -(i.e C<MyClass::Plugin::Foo>) do - - package MyClass; - use Module::Pluggable max_depth => 3; - -and to only get the latter (i.e C<MyClass::Plugin::Foo::Bar>) - - package MyClass; - use Module::Pluggable min_depth => 4; - - -=head1 TRIGGERS - -Various triggers can also be passed in to the options. - -If any of these triggers return 0 then the plugin will not be returned. - -=head2 before_require <plugin> - -Gets passed the plugin name. - -If 0 is returned then this plugin will not be required either. - -=head2 on_require_error <plugin> <err> - -Gets called when there's an error on requiring the plugin. - -Gets passed the plugin name and the error. - -The default on_require_error handler is to C<carp> the error and return 0. - -=head2 on_instantiate_error <plugin> <err> - -Gets called when there's an error on instantiating the plugin. - -Gets passed the plugin name and the error. - -The default on_instantiate_error handler is to C<carp> the error and return 0. - -=head2 after_require <plugin> - -Gets passed the plugin name. - -If 0 is returned then this plugin will be required but not returned as a plugin. - -=head1 METHODs - -=head2 search_path - -The method C<search_path> is exported into you namespace as well. -You can call that at any time to change or replace the -search_path. - - $self->search_path( add => "New::Path" ); # add - $self->search_path( new => "New::Path" ); # replace - -=head1 BEHAVIOUR UNDER TEST ENVIRONMENT - -In order to make testing reliable we exclude anything not from blib if blib.pm is -in %INC. - -However if the module being tested used another module that itself used C<Module::Pluggable> -then the second module would fail. This was fixed by checking to see if the caller -had (^|/)blib/ in their filename. - -There's an argument that this is the wrong behaviour and that modules should explicitly -trigger this behaviour but that particular code has been around for 7 years now and I'm -reluctant to change the default behaviour. - -You can now (as of version 4.1) force Module::Pluggable to look outside blib in a test environment by doing either - - require Module::Pluggable; - $Module::Pluggable::FORCE_SEARCH_ALL_PATHS = 1; - import Module::Pluggable; - -or - - use Module::Pluggable force_search_all_paths => 1; - - -=head1 FUTURE PLANS - -This does everything I need and I can't really think of any other -features I want to add. Famous last words of course - -Recently tried fixed to find inner packages and to make it -'just work' with PAR but there are still some issues. - - -However suggestions (and patches) are welcome. - -=head1 DEVELOPMENT - -The master repo for this module is at - -https://github.com/simonwistow/Module-Pluggable - -=head1 AUTHOR - -Simon Wistow <simon@thegestalt.org> - -=head1 COPYING - -Copyright, 2006 Simon Wistow - -Distributed under the same terms as Perl itself. - -=head1 BUGS - -None known. - -=head1 SEE ALSO - -L<File::Spec>, L<File::Find>, L<File::Basename>, L<Class::Factory::Util>, L<Module::Pluggable::Ordered> - -=cut - - diff --git a/cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm b/cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm deleted file mode 100644 index 6b1d265456..0000000000 --- a/cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm +++ /dev/null @@ -1,405 +0,0 @@ -package Module::Pluggable::Object; - -use strict; -use File::Find (); -use File::Basename; -use File::Spec::Functions qw(splitdir catdir curdir catfile abs2rel); -use Carp qw(croak carp confess); -use Devel::InnerPackage; -use vars qw($VERSION); - -use if $] > 5.017, 'deprecate'; - -$VERSION = '4.6'; - - -sub new { - my $class = shift; - my %opts = @_; - - return bless \%opts, $class; - -} - -### Eugggh, this code smells -### This is what happens when you keep adding patches -### *sigh* - - -sub plugins { - my $self = shift; - my @args = @_; - - # override 'require' - $self->{'require'} = 1 if $self->{'inner'}; - - my $filename = $self->{'filename'}; - my $pkg = $self->{'package'}; - - # Get the exception params instantiated - $self->_setup_exceptions; - - # automatically turn a scalar search path or namespace into a arrayref - for (qw(search_path search_dirs)) { - $self->{$_} = [ $self->{$_} ] if exists $self->{$_} && !ref($self->{$_}); - } - - # default search path is '<Module>::<Name>::Plugin' - $self->{'search_path'} ||= ["${pkg}::Plugin"]; - - # default error handler - $self->{'on_require_error'} ||= sub { my ($plugin, $err) = @_; carp "Couldn't require $plugin : $err"; return 0 }; - $self->{'on_instantiate_error'} ||= sub { my ($plugin, $err) = @_; carp "Couldn't instantiate $plugin: $err"; return 0 }; - - # default whether to follow symlinks - $self->{'follow_symlinks'} = 1 unless exists $self->{'follow_symlinks'}; - - # check to see if we're running under test - my @SEARCHDIR = exists $INC{"blib.pm"} && defined $filename && $filename =~ m!(^|/)blib/! && !$self->{'force_search_all_paths'} ? grep {/blib/} @INC : @INC; - - # add any search_dir params - unshift @SEARCHDIR, @{$self->{'search_dirs'}} if defined $self->{'search_dirs'}; - - # set our @INC up to include and prefer our search_dirs if necessary - my @tmp = @INC; - unshift @tmp, @{$self->{'search_dirs'} || []}; - local @INC = @tmp if defined $self->{'search_dirs'}; - - my @plugins = $self->search_directories(@SEARCHDIR); - push(@plugins, $self->handle_innerpackages($_)) for @{$self->{'search_path'}}; - - # return blank unless we've found anything - return () unless @plugins; - - # remove duplicates - # probably not necessary but hey ho - my %plugins; - for(@plugins) { - next unless $self->_is_legit($_); - $plugins{$_} = 1; - } - - # are we instantiating or requring? - if (defined $self->{'instantiate'}) { - my $method = $self->{'instantiate'}; - my @objs = (); - foreach my $package (sort keys %plugins) { - next unless $package->can($method); - my $obj = eval { $package->$method(@_) }; - $self->{'on_instantiate_error'}->($package, $@) if $@; - push @objs, $obj if $obj; - } - return @objs; - } else { - # no? just return the names - my @objs= sort keys %plugins; - return @objs; - } -} - -sub _setup_exceptions { - my $self = shift; - - my %only; - my %except; - my $only; - my $except; - - if (defined $self->{'only'}) { - if (ref($self->{'only'}) eq 'ARRAY') { - %only = map { $_ => 1 } @{$self->{'only'}}; - } elsif (ref($self->{'only'}) eq 'Regexp') { - $only = $self->{'only'} - } elsif (ref($self->{'only'}) eq '') { - $only{$self->{'only'}} = 1; - } - } - - - if (defined $self->{'except'}) { - if (ref($self->{'except'}) eq 'ARRAY') { - %except = map { $_ => 1 } @{$self->{'except'}}; - } elsif (ref($self->{'except'}) eq 'Regexp') { - $except = $self->{'except'} - } elsif (ref($self->{'except'}) eq '') { - $except{$self->{'except'}} = 1; - } - } - $self->{_exceptions}->{only_hash} = \%only; - $self->{_exceptions}->{only} = $only; - $self->{_exceptions}->{except_hash} = \%except; - $self->{_exceptions}->{except} = $except; - -} - -sub _is_legit { - my $self = shift; - my $plugin = shift; - my %only = %{$self->{_exceptions}->{only_hash}||{}}; - my %except = %{$self->{_exceptions}->{except_hash}||{}}; - my $only = $self->{_exceptions}->{only}; - my $except = $self->{_exceptions}->{except}; - my $depth = () = split '::', $plugin, -1; - - return 0 if (keys %only && !$only{$plugin} ); - return 0 unless (!defined $only || $plugin =~ m!$only! ); - - return 0 if (keys %except && $except{$plugin} ); - return 0 if (defined $except && $plugin =~ m!$except! ); - - return 0 if defined $self->{max_depth} && $depth>$self->{max_depth}; - return 0 if defined $self->{min_depth} && $depth<$self->{min_depth}; - - return 1; -} - -sub search_directories { - my $self = shift; - my @SEARCHDIR = @_; - - my @plugins; - # go through our @INC - foreach my $dir (@SEARCHDIR) { - push @plugins, $self->search_paths($dir); - } - return @plugins; -} - - -sub search_paths { - my $self = shift; - my $dir = shift; - my @plugins; - - my $file_regex = $self->{'file_regex'} || qr/\.pm$/; - - - # and each directory in our search path - foreach my $searchpath (@{$self->{'search_path'}}) { - # create the search directory in a cross platform goodness way - my $sp = catdir($dir, (split /::/, $searchpath)); - - # if it doesn't exist or it's not a dir then skip it - next unless ( -e $sp && -d _ ); # Use the cached stat the second time - - my @files = $self->find_files($sp); - - # foreach one we've found - foreach my $file (@files) { - # untaint the file; accept .pm only - next unless ($file) = ($file =~ /(.*$file_regex)$/); - # parse the file to get the name - my ($name, $directory, $suffix) = fileparse($file, $file_regex); - - next if (!$self->{include_editor_junk} && $self->_is_editor_junk($name)); - - $directory = abs2rel($directory, $sp); - - # If we have a mixed-case package name, assume case has been preserved - # correctly. Otherwise, root through the file to locate the case-preserved - # version of the package name. - my @pkg_dirs = (); - if ( $name eq lc($name) || $name eq uc($name) ) { - my $pkg_file = catfile($sp, $directory, "$name$suffix"); - open PKGFILE, "<$pkg_file" or die "search_paths: Can't open $pkg_file: $!"; - my $in_pod = 0; - while ( my $line = <PKGFILE> ) { - $in_pod = 1 if $line =~ m/^=\w/; - $in_pod = 0 if $line =~ /^=cut/; - next if ($in_pod || $line =~ /^=cut/); # skip pod text - next if $line =~ /^\s*#/; # and comments - if ( $line =~ m/^\s*package\s+(.*::)?($name)\s*;/i ) { - @pkg_dirs = split /::/, $1 if defined $1;; - $name = $2; - last; - } - } - close PKGFILE; - } - - # then create the class name in a cross platform way - $directory =~ s/^[a-z]://i if($^O =~ /MSWin32|dos/); # remove volume - my @dirs = (); - if ($directory) { - ($directory) = ($directory =~ /(.*)/); - @dirs = grep(length($_), splitdir($directory)) - unless $directory eq curdir(); - for my $d (reverse @dirs) { - my $pkg_dir = pop @pkg_dirs; - last unless defined $pkg_dir; - $d =~ s/\Q$pkg_dir\E/$pkg_dir/i; # Correct case - } - } else { - $directory = ""; - } - my $plugin = join '::', $searchpath, @dirs, $name; - - next unless $plugin =~ m!(?:[a-z\d]+)[a-z\d]!i; - - $self->handle_finding_plugin($plugin, \@plugins) - } - - # now add stuff that may have been in package - # NOTE we should probably use all the stuff we've been given already - # but then we can't unload it :( - push @plugins, $self->handle_innerpackages($searchpath); - } # foreach $searchpath - - return @plugins; -} - -sub _is_editor_junk { - my $self = shift; - my $name = shift; - - # Emacs (and other Unix-y editors) leave temp files ending in a - # tilde as a backup. - return 1 if $name =~ /~$/; - # Emacs makes these files while a buffer is edited but not yet - # saved. - return 1 if $name =~ /^\.#/; - # Vim can leave these files behind if it crashes. - return 1 if $name =~ /\.sw[po]$/; - - return 0; -} - -sub handle_finding_plugin { - my $self = shift; - my $plugin = shift; - my $plugins = shift; - my $no_req = shift || 0; - - return unless $self->_is_legit($plugin); - unless (defined $self->{'instantiate'} || $self->{'require'}) { - push @$plugins, $plugin; - return; - } - - $self->{before_require}->($plugin) || return if defined $self->{before_require}; - unless ($no_req) { - my $tmp = $@; - my $res = eval { $self->_require($plugin) }; - my $err = $@; - $@ = $tmp; - if ($err) { - if (defined $self->{on_require_error}) { - $self->{on_require_error}->($plugin, $err) || return; - } else { - return; - } - } - } - $self->{after_require}->($plugin) || return if defined $self->{after_require}; - push @$plugins, $plugin; -} - -sub find_files { - my $self = shift; - my $search_path = shift; - my $file_regex = $self->{'file_regex'} || qr/\.pm$/; - - - # find all the .pm files in it - # this isn't perfect and won't find multiple plugins per file - #my $cwd = Cwd::getcwd; - my @files = (); - { # for the benefit of perl 5.6.1's Find, localize topic - local $_; - File::Find::find( { no_chdir => 1, - follow => $self->{'follow_symlinks'}, - wanted => sub { - # Inlined from File::Find::Rule C< name => '*.pm' > - return unless $File::Find::name =~ /$file_regex/; - (my $path = $File::Find::name) =~ s#^\\./##; - push @files, $path; - } - }, $search_path ); - } - #chdir $cwd; - return @files; - -} - -sub handle_innerpackages { - my $self = shift; - return () if (exists $self->{inner} && !$self->{inner}); - - my $path = shift; - my @plugins; - - foreach my $plugin (Devel::InnerPackage::list_packages($path)) { - $self->handle_finding_plugin($plugin, \@plugins, 1); - } - return @plugins; - -} - - -sub _require { - my $self = shift; - my $pack = shift; - eval "CORE::require $pack"; - die ($@) if $@; - return 1; -} - - -1; - -=pod - -=head1 NAME - -Module::Pluggable::Object - automatically give your module the ability to have plugins - -=head1 SYNOPSIS - - -Simple use Module::Pluggable - - - package MyClass; - use Module::Pluggable::Object; - - my $finder = Module::Pluggable::Object->new(%opts); - print "My plugins are: ".join(", ", $finder->plugins)."\n"; - -=head1 DESCRIPTION - -Provides a simple but, hopefully, extensible way of having 'plugins' for -your module. Obviously this isn't going to be the be all and end all of -solutions but it works for me. - -Essentially all it does is export a method into your namespace that -looks through a search path for .pm files and turn those into class names. - -Optionally it instantiates those classes for you. - -This object is wrapped by C<Module::Pluggable>. If you want to do something -odd or add non-general special features you're probably best to wrap this -and produce your own subclass. - -=head1 OPTIONS - -See the C<Module::Pluggable> docs. - -=head1 AUTHOR - -Simon Wistow <simon@thegestalt.org> - -=head1 COPYING - -Copyright, 2006 Simon Wistow - -Distributed under the same terms as Perl itself. - -=head1 BUGS - -None known. - -=head1 SEE ALSO - -L<Module::Pluggable> - -=cut - diff --git a/cpan/Module-Pluggable/t/01use.t b/cpan/Module-Pluggable/t/01use.t deleted file mode 100644 index be0b8481ac..0000000000 --- a/cpan/Module-Pluggable/t/01use.t +++ /dev/null @@ -1,9 +0,0 @@ -#!perl -w - -use strict; -use Test::More tests => 3; - -use_ok('Module::Pluggable'); -use_ok('Module::Pluggable::Object'); -use_ok('Devel::InnerPackage'); - diff --git a/cpan/Module-Pluggable/t/02alsoworks.t b/cpan/Module-Pluggable/t/02alsoworks.t deleted file mode 100644 index 131df29da0..0000000000 --- a/cpan/Module-Pluggable/t/02alsoworks.t +++ /dev/null @@ -1,42 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 5; - -my $foo; -ok($foo = MyOtherTest->new()); - -my @plugins; -my @expected = qw(MyOtherTest::Plugin::Bar MyOtherTest::Plugin::Foo MyOtherTest::Plugin::Quux MyOtherTest::Plugin::Quux::Foo); -ok(@plugins = sort $foo->plugins); - - - -is_deeply(\@plugins, \@expected, "is deeply"); - -@plugins = (); - -ok(@plugins = sort MyOtherTest->plugins); - - - - -is_deeply(\@plugins, \@expected, "is deeply class"); - - - -package MyOtherTest; - -use strict; -use Module::Pluggable; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/02works.t b/cpan/Module-Pluggable/t/02works.t deleted file mode 100644 index f748344a7a..0000000000 --- a/cpan/Module-Pluggable/t/02works.t +++ /dev/null @@ -1,42 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 5; - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Foo MyTest::Plugin::Quux::Foo); -ok(@plugins = sort $foo->plugins); - - - -is_deeply(\@plugins, \@expected, "is deeply"); - -@plugins = (); - -ok(@plugins = sort MyTest->plugins); - - - - -is_deeply(\@plugins, \@expected, "is deeply class"); - - - -package MyTest; - -use strict; -use Module::Pluggable; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/02works_taint.t b/cpan/Module-Pluggable/t/02works_taint.t deleted file mode 100644 index 0e1baa3dc0..0000000000 --- a/cpan/Module-Pluggable/t/02works_taint.t +++ /dev/null @@ -1,41 +0,0 @@ -#!perl -wT - -# NOTE: Module::Pluggable is going into core -# and CORE tests can't modify @INC under taint -# so this is a work around to make sure it -# still works under taint checking. - -use strict; -use Test::More tests => 5; - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(Module::Pluggable::Object); -ok(@plugins = sort $foo->plugins); - - -ok(grep {/Module::Pluggable::Object/} @plugins, "Contains Module::Pluggable::Object"); - -@plugins = (); - -ok(@plugins = sort MyTest->plugins); - -ok(grep {/Module::Pluggable::Object/} @plugins, "Contains Module::Pluggable::Object under class method"); - - - -package MyTest; - -use strict; -use Module::Pluggable search_path => 'Module::Pluggable'; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/03diffname.t b/cpan/Module-Pluggable/t/03diffname.t deleted file mode 100644 index d449fd0e04..0000000000 --- a/cpan/Module-Pluggable/t/03diffname.t +++ /dev/null @@ -1,30 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Foo MyTest::Plugin::Quux::Foo); -ok(@plugins = sort $foo->foo); -is_deeply(\@plugins, \@expected); - - - -package MyTest; - -use strict; -use Module::Pluggable ( sub_name => 'foo'); - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/04acmedir.t b/cpan/Module-Pluggable/t/04acmedir.t deleted file mode 100644 index e2572feb48..0000000000 --- a/cpan/Module-Pluggable/t/04acmedir.t +++ /dev/null @@ -1,30 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(Acme::MyTest::Plugin::Foo); -ok(@plugins = sort $foo->plugins); -is_deeply(\@plugins, \@expected); - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use Module::Pluggable search_path => ["Acme::MyTest::Plugin"], search_dirs => [ "t/acme" ]; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/04acmedir_single.t b/cpan/Module-Pluggable/t/04acmedir_single.t deleted file mode 100644 index adc5304b69..0000000000 --- a/cpan/Module-Pluggable/t/04acmedir_single.t +++ /dev/null @@ -1,30 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(Acme::MyTest::Plugin::Foo); -ok(@plugins = sort $foo->plugins); -is_deeply(\@plugins, \@expected); - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use Module::Pluggable search_path => "Acme::MyTest::Plugin", search_dirs => "t/acme" ; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/04acmepath.t b/cpan/Module-Pluggable/t/04acmepath.t deleted file mode 100644 index 540158c496..0000000000 --- a/cpan/Module-Pluggable/t/04acmepath.t +++ /dev/null @@ -1,30 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(Acme::MyTest::Plugin::Foo); -ok(@plugins = sort $foo->plugins); -is_deeply(\@plugins, \@expected); - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use Module::Pluggable (search_path => ["Acme::MyTest::Plugin"]); - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/04acmepath_single.t b/cpan/Module-Pluggable/t/04acmepath_single.t deleted file mode 100644 index 976e77ec26..0000000000 --- a/cpan/Module-Pluggable/t/04acmepath_single.t +++ /dev/null @@ -1,30 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(Acme::MyTest::Plugin::Foo); -ok(@plugins = sort $foo->plugins); -is_deeply(\@plugins, \@expected); - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use Module::Pluggable search_path => "Acme::MyTest::Plugin"; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/05postpath.t b/cpan/Module-Pluggable/t/05postpath.t deleted file mode 100644 index 08c4052d26..0000000000 --- a/cpan/Module-Pluggable/t/05postpath.t +++ /dev/null @@ -1,31 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(MyTest::Extend::Plugin::Bar); -ok(@plugins = sort $foo->plugins); -is_deeply(\@plugins, \@expected); - - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use Module::Pluggable (search_path => ["MyTest::Extend::Plugin"]); - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/06multipath.t b/cpan/Module-Pluggable/t/06multipath.t deleted file mode 100644 index 6f74591289..0000000000 --- a/cpan/Module-Pluggable/t/06multipath.t +++ /dev/null @@ -1,33 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(Acme::MyTest::Plugin::Foo MyTest::Extend::Plugin::Bar); -ok(@plugins = sort $foo->plugins); - -is_deeply(\@plugins, \@expected); - - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use File::Spec::Functions qw(catdir); -use Module::Pluggable (search_path => ["MyTest::Extend::Plugin", "Acme::MyTest::Plugin"]); - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/07instantiate.t b/cpan/Module-Pluggable/t/07instantiate.t deleted file mode 100644 index 352d4d0926..0000000000 --- a/cpan/Module-Pluggable/t/07instantiate.t +++ /dev/null @@ -1,40 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 6; - -my $foo; -ok($foo = MyTest->new()); - - - -my @plugins; -ok(@plugins = sort $foo->booga(nork => 'fark')); -is(ref $plugins[0],'MyTest::Extend::Plugin::Bar'); -is($plugins[0]->nork,'fark'); - - -@plugins = (); -eval { @plugins = $foo->wooga( nork => 'fark') }; -is($@, ''); -is(scalar(@plugins),0); - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Module::Pluggable (search_path => ["MyTest::Extend::Plugin"], sub_name => 'booga', instantiate => 'new'); -use Module::Pluggable (search_path => ["MyTest::Extend::Plugin"], sub_name => 'wooga', instantiate => 'nosomuchmethod'); - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/08nothing.t b/cpan/Module-Pluggable/t/08nothing.t deleted file mode 100644 index f5c6487189..0000000000 --- a/cpan/Module-Pluggable/t/08nothing.t +++ /dev/null @@ -1,30 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 2; - - -my $foo; -ok($foo = MyTest->new()); - -my @expected = (); -my @plugins = sort $foo->plugins; -is_deeply(\@plugins, \@expected); - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use Module::Pluggable (search_path => ["No::Such::Modules"]); -use base qw(Module::Pluggable); - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/09require.t b/cpan/Module-Pluggable/t/09require.t deleted file mode 100644 index af5de5fd92..0000000000 --- a/cpan/Module-Pluggable/t/09require.t +++ /dev/null @@ -1,29 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 2; - -my $t = MyTest->new(); - - -ok($t->plugins()); - -ok(keys %{MyTest::Plugin::Foo::}); - - -package MyTest; -use File::Spec::Functions qw(catdir); -use strict; -use Module::Pluggable (require => 1); -use base qw(Module::Pluggable); - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/10innerpack.t b/cpan/Module-Pluggable/t/10innerpack.t deleted file mode 100644 index 0653fc84f1..0000000000 --- a/cpan/Module-Pluggable/t/10innerpack.t +++ /dev/null @@ -1,35 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 4; - - - -my $t = InnerTest->new(); - -my %plugins = map { $_ => 1 } $t->plugins; - -ok(keys %plugins, "Got some plugins"); -ok($plugins{'InnerTest::Plugin::Foo'}, "Got Foo"); -ok($plugins{'InnerTest::Plugin::Bar'}, "Got Bar - the inner package"); -ok($plugins{'InnerTest::Plugin::Quux'}, "Got Quux - the other inner package"); - - - -package InnerTest; -use strict; -use Module::Pluggable require => 1; -use base qw(Module::Pluggable); - - -sub new { - my $class = shift; - return bless {}, $class; - -} - - -1; - diff --git a/cpan/Module-Pluggable/t/10innerpack_inner.t b/cpan/Module-Pluggable/t/10innerpack_inner.t deleted file mode 100644 index 054d9b67d7..0000000000 --- a/cpan/Module-Pluggable/t/10innerpack_inner.t +++ /dev/null @@ -1,34 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - - -my $t = InnerTest->new(); - -my %plugins = map { $_ => 1 } $t->plugins; - -ok(keys %plugins, "Got some plugins"); -ok($plugins{'InnerTest::Plugin::Foo'}, "Got Foo"); -ok($plugins{'InnerTest::Plugin::Bar'}, "Got Bar - the inner package"); - - - -package InnerTest; -use strict; -use Module::Pluggable inner => 1; -use base qw(Module::Pluggable); - - -sub new { - my $class = shift; - return bless {}, $class; - -} - - -1; - diff --git a/cpan/Module-Pluggable/t/10innerpack_noinner.t b/cpan/Module-Pluggable/t/10innerpack_noinner.t deleted file mode 100644 index 1d670b02c3..0000000000 --- a/cpan/Module-Pluggable/t/10innerpack_noinner.t +++ /dev/null @@ -1,34 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - - -my $t = InnerTest->new(); - -my %plugins = map { $_ => 1 } $t->plugins; - -ok(keys %plugins, "Got some plugins"); -ok($plugins{'InnerTest::Plugin::Foo'}, "Got Foo"); -ok(!$plugins{'InnerTest::Plugin::Bar'}, "Didn't get Bar - the inner package"); - - - -package InnerTest; -use strict; -use Module::Pluggable require => 1, inner => 0; -use base qw(Module::Pluggable); - - -sub new { - my $class = shift; - return bless {}, $class; - -} - - -1; - diff --git a/cpan/Module-Pluggable/t/10innerpack_onefile.t b/cpan/Module-Pluggable/t/10innerpack_onefile.t deleted file mode 100644 index 01caf3738e..0000000000 --- a/cpan/Module-Pluggable/t/10innerpack_onefile.t +++ /dev/null @@ -1,27 +0,0 @@ -#!perl -wT - -use strict; -use Test::More tests => 2; -use Data::Dumper; - -my $mc = MyClass->new(); -my $mc2 = MyClass2->new(); - - -is_deeply([$mc->plugins], [qw(MyClass::Plugin::MyPlugin)], "Got inner plugin"); -is_deeply([$mc2->plugins], [], "Didn't get plugin"); - -package MyClass::Plugin::MyPlugin; -sub pretty { print "I am pretty" }; - -package MyClass; -use Module::Pluggable inner => 1; - -sub new { return bless {}, $_[0] } - -package MyClass2; -use Module::Pluggable search_path => "MyClass::Plugin", inner => 0; - -sub new { return bless {}, $_[0] } -1; - diff --git a/cpan/Module-Pluggable/t/10innerpack_override.t b/cpan/Module-Pluggable/t/10innerpack_override.t deleted file mode 100644 index f9e863e930..0000000000 --- a/cpan/Module-Pluggable/t/10innerpack_override.t +++ /dev/null @@ -1,34 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - - - -my $t = InnerTest->new(); - -my %plugins = map { $_ => 1 } $t->plugins; - -ok(keys %plugins, "Got some plugins"); -ok($plugins{'InnerTest::Plugin::Foo'}, "Got Foo"); -ok($plugins{'InnerTest::Plugin::Bar'}, "Got Bar - the inner package"); - - - -package InnerTest; -use strict; -use Module::Pluggable require => 0, inner => 1; -use base qw(Module::Pluggable); - - -sub new { - my $class = shift; - return bless {}, $class; - -} - - -1; - diff --git a/cpan/Module-Pluggable/t/10innerpack_super.t b/cpan/Module-Pluggable/t/10innerpack_super.t deleted file mode 100644 index e9a58bd8fa..0000000000 --- a/cpan/Module-Pluggable/t/10innerpack_super.t +++ /dev/null @@ -1,29 +0,0 @@ -#!perl -wT - -use Test::More tests => 3; -use strict; -use_ok('Devel::InnerPackage'); -Bar->whee; -is_deeply([Devel::InnerPackage::list_packages("Bar")],[], "Don't pick up ::SUPER pseudo stash"); -is_deeply([Devel::InnerPackage::list_packages("Foo")],['Foo::Bar'], "Still pick up other inner package"); - -package Foo; - -sub whee { - 1; -} - -package Foo::Bar; - -sub whee {} - -package Bar; -use base 'Foo'; - -sub whee { - shift->SUPER::whee; - 2; -} - - -1; diff --git a/cpan/Module-Pluggable/t/11usetwice.t b/cpan/Module-Pluggable/t/11usetwice.t deleted file mode 100644 index 8240318a4a..0000000000 --- a/cpan/Module-Pluggable/t/11usetwice.t +++ /dev/null @@ -1,44 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 3; - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(MyTest::Extend::Plugin::Bar MyTest::Plugin::Bar MyTest::Plugin::Foo MyTest::Plugin::Quux::Foo); - -push @plugins, $foo->plugins; -push @plugins, $foo->foo; - -@plugins = sort @plugins; -is_deeply(\@plugins, \@expected); - -@plugins = (); - -push @plugins, MyTest->plugins; -push @plugins, MyTest->foo; -@plugins = sort @plugins; -is_deeply(\@plugins, \@expected); - - - -package MyTest; - -use strict; -use Module::Pluggable; -use Module::Pluggable ( search_path => [ "MyTest::Extend::Plugin" ] , sub_name => 'foo' ); - - -sub new { - my $class = shift; - return bless {}, $class; - -} - - -1; - diff --git a/cpan/Module-Pluggable/t/12only.t b/cpan/Module-Pluggable/t/12only.t deleted file mode 100644 index 1150b60793..0000000000 --- a/cpan/Module-Pluggable/t/12only.t +++ /dev/null @@ -1,64 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 10; - -{ - my $foo; - ok($foo = MyTest->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Foo); - ok(@plugins = sort $foo->plugins); - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTest->plugins); - is_deeply(\@plugins, \@expected); -} - -{ - my $foo; - ok($foo = MyTestSub->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Foo); - ok(@plugins = sort $foo->plugins); - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTestSub->plugins); - is_deeply(\@plugins, \@expected); -} - -package MyTest; - -use strict; -use Module::Pluggable only => "MyTest::Plugin::Foo"; - - -sub new { - my $class = shift; - return bless {}, $class; - -} - -package MyTestSub; - -use strict; -use Module::Pluggable search_path => "MyTest::Plugin"; - - -sub new { - my $class = shift; - my $self = bless {}, $class; - - $self->only("MyTest::Plugin::Foo"); - - return $self; -} -1; diff --git a/cpan/Module-Pluggable/t/12onlyarray.t b/cpan/Module-Pluggable/t/12onlyarray.t deleted file mode 100644 index a37e7771d2..0000000000 --- a/cpan/Module-Pluggable/t/12onlyarray.t +++ /dev/null @@ -1,65 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 10; - -{ - my $foo; - ok($foo = MyTest->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Foo); - ok(@plugins = sort $foo->plugins); - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTest->plugins); - is_deeply(\@plugins, \@expected); -} - -{ - my $foo; - ok($foo = MyTestSub->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Foo); - ok(@plugins = sort $foo->plugins); - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTestSub->plugins); - is_deeply(\@plugins, \@expected); -} - -package MyTest; - -use strict; -use Module::Pluggable only => [ "MyTest::Plugin::Foo" ]; - - -sub new { - my $class = shift; - return bless {}, $class; - -} - -package MyTestSub; - -use strict; -use Module::Pluggable search_path => "MyTest::Plugin"; - - -sub new { - my $class = shift; - my $self = bless {}, $class; - - $self->only(["MyTest::Plugin::Foo"]); - - return $self; -} -1; - diff --git a/cpan/Module-Pluggable/t/12onlyregex.t b/cpan/Module-Pluggable/t/12onlyregex.t deleted file mode 100644 index 78a9bd554f..0000000000 --- a/cpan/Module-Pluggable/t/12onlyregex.t +++ /dev/null @@ -1,65 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 10; - -{ - my $foo; - ok($foo = MyTest->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Foo); - ok(@plugins = sort $foo->plugins); - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTest->plugins); - is_deeply(\@plugins, \@expected); -} - -{ - my $foo; - ok($foo = MyTestSub->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Foo); - ok(@plugins = sort $foo->plugins); - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTestSub->plugins); - is_deeply(\@plugins, \@expected); -} - -package MyTest; - -use strict; -use Module::Pluggable only => qr/MyTest::Plugin::Foo$/; - - -sub new { - my $class = shift; - return bless {}, $class; - -} - -package MyTestSub; - -use strict; -use Module::Pluggable search_path => "MyTest::Plugin"; - - -sub new { - my $class = shift; - my $self = bless {}, $class; - - $self->only(qr/MyTest::Plugin::Foo$/); - - return $self; -} -1; - diff --git a/cpan/Module-Pluggable/t/12onlyrequire.t b/cpan/Module-Pluggable/t/12onlyrequire.t deleted file mode 100644 index cf76b4dd03..0000000000 --- a/cpan/Module-Pluggable/t/12onlyrequire.t +++ /dev/null @@ -1,21 +0,0 @@ -#!perl -w -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 2; - -my @packages = eval { Zot->_dist_types }; -is($@, '', "No warnings"); -is(scalar(@packages), 0, "Correctly only got 1 package"); - - -package Zot; -use strict; -use Module::Pluggable ( - sub_name => '_dist_types', - search_path => __PACKAGE__, - only => qr/Zot::\w+$/, - require => 1, - ); - -1; diff --git a/cpan/Module-Pluggable/t/13except.t b/cpan/Module-Pluggable/t/13except.t deleted file mode 100644 index e08ffa905f..0000000000 --- a/cpan/Module-Pluggable/t/13except.t +++ /dev/null @@ -1,68 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 10; - -{ - my $foo; - ok($foo = MyTest->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Quux::Foo); - ok(@plugins = sort $foo->plugins); - - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTest->plugins); - is_deeply(\@plugins, \@expected); -} - -{ - my $foo; - ok($foo = MyTestSub->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Quux::Foo); - ok(@plugins = sort $foo->plugins); - - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTestSub->plugins); - is_deeply(\@plugins, \@expected); -} - -package MyTest; - -use strict; -use Module::Pluggable except => "MyTest::Plugin::Foo"; - - - -sub new { - my $class = shift; - return bless {}, $class; - -} - -package MyTestSub; - -use strict; -use Module::Pluggable search_path => "MyTest::Plugin"; - - -sub new { - my $class = shift; - my $self = bless {}, $class; - - $self->except("MyTest::Plugin::Foo"); - - return $self; -} -1; - diff --git a/cpan/Module-Pluggable/t/13exceptarray.t b/cpan/Module-Pluggable/t/13exceptarray.t deleted file mode 100644 index ec61ff4dae..0000000000 --- a/cpan/Module-Pluggable/t/13exceptarray.t +++ /dev/null @@ -1,68 +0,0 @@ -#!perl -wT - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 10; - -{ - my $foo; - ok($foo = MyTest->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Quux::Foo); - ok(@plugins = sort $foo->plugins); - - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTest->plugins); - is_deeply(\@plugins, \@expected); -} - -{ - my $foo; - ok($foo = MyTestSub->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Quux::Foo); - ok(@plugins = sort $foo->plugins); - - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTestSub->plugins); - is_deeply(\@plugins, \@expected); -} - -package MyTest; - -use strict; -use Module::Pluggable except => [ "MyTest::Plugin::Foo" ]; - - - -sub new { - my $class = shift; - return bless {}, $class; - -} - -package MyTestSub; - -use strict; -use Module::Pluggable search_path => "MyTest::Plugin"; - - -sub new { - my $class = shift; - my $self = bless {}, $class; - - $self->except(["MyTest::Plugin::Foo"]); - - return $self; -} -1; - diff --git a/cpan/Module-Pluggable/t/13exceptregex.t b/cpan/Module-Pluggable/t/13exceptregex.t deleted file mode 100644 index 2d842b387f..0000000000 --- a/cpan/Module-Pluggable/t/13exceptregex.t +++ /dev/null @@ -1,68 +0,0 @@ -#!perl -wT - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 10; - -{ - my $foo; - ok($foo = MyTest->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Quux::Foo); - ok(@plugins = sort $foo->plugins); - - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTest->plugins); - is_deeply(\@plugins, \@expected); -} - -{ - my $foo; - ok($foo = MyTestSub->new()); - - my @plugins; - my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Quux::Foo); - ok(@plugins = sort $foo->plugins); - - is_deeply(\@plugins, \@expected); - - @plugins = (); - - ok(@plugins = sort MyTestSub->plugins); - is_deeply(\@plugins, \@expected); -} - -package MyTest; - -use strict; -use Module::Pluggable except => qr/MyTest::Plugin::Foo/; - - - -sub new { - my $class = shift; - return bless {}, $class; - -} - -package MyTestSub; - -use strict; -use Module::Pluggable search_path => "MyTest::Plugin"; - - -sub new { - my $class = shift; - my $self = bless {}, $class; - - $self->except(qr/MyTest::Plugin::Foo/); - - return $self; -} -1; - diff --git a/cpan/Module-Pluggable/t/14package.t b/cpan/Module-Pluggable/t/14package.t deleted file mode 100644 index aaca94ceab..0000000000 --- a/cpan/Module-Pluggable/t/14package.t +++ /dev/null @@ -1,34 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 5; - -my $foo; -ok($foo = MyTest->new()); - -my @plugins; -my @expected = qw(MyTest::Plugin::Bar MyTest::Plugin::Foo MyTest::Plugin::Quux::Foo); -ok(@plugins = sort $foo->plugins); -is_deeply(\@plugins, \@expected); - -@plugins = (); - -ok(@plugins = sort MyTest->plugins); -is_deeply(\@plugins, \@expected); - - - -package MyTest; -use strict; -sub new { return bless {}, $_[0] } - -package MyOtherTest; -use strict; -use Module::Pluggable ( package => "MyTest" ); -sub new { return bless {}, $_[0] } - - -1; - diff --git a/cpan/Module-Pluggable/t/15topicsafe.t b/cpan/Module-Pluggable/t/15topicsafe.t deleted file mode 100644 index 49305f2884..0000000000 --- a/cpan/Module-Pluggable/t/15topicsafe.t +++ /dev/null @@ -1,16 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More 'no_plan'; - -use Module::Pluggable search_path => 'Acme::MyTest'; - -my $topic = "topic"; - -for ($topic) { - main->plugins; -} - -is($topic, 'topic', "we've got the right topic"); diff --git a/cpan/Module-Pluggable/t/16different_extension.t b/cpan/Module-Pluggable/t/16different_extension.t deleted file mode 100644 index f628a7cd67..0000000000 --- a/cpan/Module-Pluggable/t/16different_extension.t +++ /dev/null @@ -1,42 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 5; - -my $foo; -ok($foo = ExtTest->new()); - -my @plugins; -my @expected = qw(ExtTest::Plugin::Bar ExtTest::Plugin::Foo ExtTest::Plugin::Quux::Foo); -ok(@plugins = sort $foo->plugins); - - - -is_deeply(\@plugins, \@expected, "is deeply"); - -@plugins = (); - -ok(@plugins = sort ExtTest->plugins); - - - - -is_deeply(\@plugins, \@expected, "is deeply class"); - - - -package ExtTest; - -use strict; -use Module::Pluggable file_regex => qr/\.plugin$/; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - diff --git a/cpan/Module-Pluggable/t/17devel_inner_package.t b/cpan/Module-Pluggable/t/17devel_inner_package.t deleted file mode 100644 index 30f32560d8..0000000000 --- a/cpan/Module-Pluggable/t/17devel_inner_package.t +++ /dev/null @@ -1,15 +0,0 @@ -#!perl -w -use Test::More tests => 3; - -use Devel::InnerPackage qw(list_packages); -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); - -my @packages; - -use_ok("TA::C::A::I"); -ok(@packages = list_packages("TA::C::A::I")); - -is_deeply([sort @packages], [qw(TA::C::A::I::A TA::C::A::I::A::B)]); - - diff --git a/cpan/Module-Pluggable/t/18skipped_package.t b/cpan/Module-Pluggable/t/18skipped_package.t deleted file mode 100644 index c580d68cbb..0000000000 --- a/cpan/Module-Pluggable/t/18skipped_package.t +++ /dev/null @@ -1,11 +0,0 @@ -#!perl -w - -use Test::More tests => 1; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); - -use Devel::InnerPackage qw(list_packages); -use No::Middle; - -my @p = list_packages("No::Middle"); -is_deeply([ sort @p ], [ qw(No::Middle::Package::A No::Middle::Package::B) ]); diff --git a/cpan/Module-Pluggable/t/19can_ok_clobber.t b/cpan/Module-Pluggable/t/19can_ok_clobber.t deleted file mode 100644 index 60616f6a30..0000000000 --- a/cpan/Module-Pluggable/t/19can_ok_clobber.t +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; -use Data::Dumper; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); - -use Test::More tests=>5; - -#use_ok( 'MyTest' ); -#diag "Module::Pluggable::VERSION $Module::Pluggable::VERSION"; - -my @plugins = sort MyTest->plugins; -my @plugins_after; - -use_ok( 'MyTest::Plugin::Foo' ); -ok( my $foo = MyTest::Plugin::Foo->new() ); - -@plugins_after = MyTest->plugins; -is_deeply( - \@plugins_after, - \@plugins, - "plugins haven't been clobbered", -) or diag Dumper(\@plugins_after,\@plugins); - -can_ok ($foo, 'frobnitz'); - -@plugins_after = sort MyTest->plugins; -is_deeply( - \@plugins_after, - \@plugins, - "plugins haven't been clobbered", -) or diag Dumper(\@plugins_after,\@plugins); - - - -package MyTest; - -use strict; -use Module::Pluggable; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - - diff --git a/cpan/Module-Pluggable/t/20dodgy_files.t b/cpan/Module-Pluggable/t/20dodgy_files.t deleted file mode 100644 index 8c0eb8e76e..0000000000 --- a/cpan/Module-Pluggable/t/20dodgy_files.t +++ /dev/null @@ -1,84 +0,0 @@ -#!perl -w - -BEGIN { - if ($^O eq 'VMS' || $^O eq 'VOS') { - print "1..0 # Skip: can't handle misspelled plugin names\n"; - exit; - } -} - -use strict; -use FindBin; -use Test::More; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use File::Spec::Functions qw(catfile); - - -my ($dodgy_file) = (catfile($FindBin::Bin, "lib", "OddTest", "Plugin", "-Dodgy.pm")=~/^(.*)$/); -unless (-f $dodgy_file) { - plan skip_all => "Can't handle misspelled plugin names\n"; -} else { - plan tests => 5; -} - - -my $foo; -ok($foo = OddTest->new()); - -my @plugins; -my @expected = ('OddTest::Plugin::-Dodgy', 'OddTest::Plugin::Foo'); -ok(@plugins = sort $foo->plugins); -is_deeply(\@plugins, \@expected, "is deeply"); - -my @odd_plugins; -my @odd_expected = qw(OddTest::Plugin::Foo); -ok(@odd_plugins = sort $foo->odd_plugins); -is_deeply(\@odd_plugins, \@odd_expected, "is deeply"); - - -package OddTest::Pluggable; - -use Data::Dumper; -use base qw(Module::Pluggable::Object); - - -sub find_files { - my $self = shift; - my @files = $self->SUPER::find_files(@_); - return grep { !/(^|\/)-/ } $self->SUPER::find_files(@_) ; -} - -package OddTest; - -use strict; -use Module::Pluggable; - - -sub new { - my $class = shift; - return bless {}, $class; - -} - -sub odd_plugins { - my $self = shift; - my %opts; - my ($pkg, $file) = caller; - # the default name for the method is 'plugins' - my $sub = $opts{'sub_name'} || 'plugins'; - # get our package - my ($package) = $opts{'package'} || "OddTest"; - $opts{filename} = $file; - $opts{package} = $package; - - - - my $op = OddTest::Pluggable->new( package => ref($self) ); - return $op->plugins(@_); - - -} - - -1; - diff --git a/cpan/Module-Pluggable/t/21editor_junk.t b/cpan/Module-Pluggable/t/21editor_junk.t deleted file mode 100644 index 5f4b52b32e..0000000000 --- a/cpan/Module-Pluggable/t/21editor_junk.t +++ /dev/null @@ -1,53 +0,0 @@ -#!perl -w - -use Test::More; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Module::Pluggable::Object; -use File::Spec::Functions qw(catfile); - -my ($dodgy_file) = (catfile($FindBin::Bin,"lib", "EditorJunk", "Plugin", "#Bar.pm#")=~/^(.*)$/); -unless (-f $dodgy_file) { - plan skip_all => "Can't handle plugin names with octothorpes\n"; -} else { - plan tests => 4; -} - - - -my $foo; -ok($foo = EditorJunk->new()); - -my @plugins; -my @expected = qw(EditorJunk::Plugin::Bar EditorJunk::Plugin::Foo); -ok(@plugins = sort $foo->plugins); - -is_deeply(\@plugins, \@expected, "is deeply"); - - -my $mpo = Module::Pluggable::Object->new( - package => 'EditorJunk', - filename => __FILE__, - include_editor_junk => 1, -); - -@expected = ('EditorJunk::Plugin::.#Bar', 'EditorJunk::Plugin::Bar', 'EditorJunk::Plugin::Foo'); -@plugins = sort $mpo->plugins(); -is_deeply(\@plugins, \@expected, "is deeply"); - - - -package EditorJunk; - -use strict; -use Module::Pluggable; - - -sub new { - my $class = shift; - return bless {}, $class; - -} -1; - - diff --git a/cpan/Module-Pluggable/t/22trigger.t b/cpan/Module-Pluggable/t/22trigger.t deleted file mode 100644 index 819e9ef20f..0000000000 --- a/cpan/Module-Pluggable/t/22trigger.t +++ /dev/null @@ -1,54 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 7; - -my $foo; -my @plugins; -my @errors; -ok($foo = TriggerTest->new(), "Created new TriggerTest"); -ok(@plugins = $foo->plugins, "Ran plugins"); -ok(@errors = $foo->errors, "Got errors"); -is_deeply([sort @plugins], ['TriggerTest::Plugin::After', 'TriggerTest::Plugin::CallbackAllow'], "Got the correct plugins"); -is_deeply([@errors], ['TriggerTest::Plugin::Error'], "Got the correct errors"); -ok(_is_loaded('TriggerTest::Plugin::CallbackDeny'), "CallbackDeny has been required"); -ok(!_is_loaded('TriggerTest::Plugin::Deny'), "Deny has not been required"); - - -# Stolen from Module::Loaded by Chris Williams (bingOs) -sub _is_loaded { - my $pm = shift; - my $file = __PACKAGE__->_pm_to_file( $pm ) or return; - return $INC{$file} if exists $INC{$file}; - return; -} - -sub _pm_to_file { - my $pkg = shift; - my $pm = shift or return; - my $file = join '/', split '::', $pm; - $file .= '.pm'; - return $file; -} - -package TriggerTest; - -our @ERRORS; -use strict; -use Module::Pluggable require => 1, - on_require_error => sub { my $p = shift; push @ERRORS, $p; return 0 }, - before_require => sub { my $p = shift; return !($p eq "TriggerTest::Plugin::Deny") }, - after_require => sub { my $p = shift; return !($p->can('exclude') && $p->exclude) }; - -sub new { - my $class = shift; - return bless {}, $class; -} - -sub errors { - @ERRORS; -} -1; - diff --git a/cpan/Module-Pluggable/t/23depth.t b/cpan/Module-Pluggable/t/23depth.t deleted file mode 100644 index ef3fb31f49..0000000000 --- a/cpan/Module-Pluggable/t/23depth.t +++ /dev/null @@ -1,38 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use lib (($FindBin::Bin."/lib")=~/^(.*)$/); -use Test::More tests => 2; - - -my $min = MinTest->new(); -my $max = MaxTest->new(); -is_deeply([sort qw(MyOtherTest::Plugin::Bar MyOtherTest::Plugin::Foo MyOtherTest::Plugin::Quux)], [sort $max->plugins], "min depth"); -is_deeply([qw(MyOtherTest::Plugin::Quux::Foo)], [sort $min->plugins], "max depth"); - - -package MinTest; -use File::Spec::Functions qw(catdir); -use strict; -use File::Spec::Functions qw(catdir); -use Module::Pluggable search_path => "MyOtherTest::Plugin", min_depth => 4; - - -sub new { - my $class = shift; - return bless {}, $class; -} - -package MaxTest; -use File::Spec::Functions qw(catdir); -use strict; -use File::Spec::Functions qw(catdir); -use Module::Pluggable search_path => "MyOtherTest::Plugin", max_depth => 3; - - -sub new { - my $class = shift; - return bless {}, $class; -} -1;
\ No newline at end of file diff --git a/cpan/Module-Pluggable/t/24local_inc_object.t b/cpan/Module-Pluggable/t/24local_inc_object.t deleted file mode 100644 index c8e00facfc..0000000000 --- a/cpan/Module-Pluggable/t/24local_inc_object.t +++ /dev/null @@ -1,23 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use Test::More tests => 2; - -my $inc = IncTest->new(); -my ($ta) = grep { ref($_) eq 'Text::Abbrev'} eval { local ($^W) = 0; $inc->plugins }; -ok($ta); -is($ta->MPCHECK, "HELLO"); - -package IncTest; -use Module::Pluggable search_path => "Text", - search_dirs => "t/lib", - instantiate => 'module_pluggable', - on_require_error => sub { }, - on_instantiate_error => sub { }; - -sub new { - my $class = shift; - return bless {}, $class; -} -1; diff --git a/cpan/Module-Pluggable/t/24local_inc_package.t b/cpan/Module-Pluggable/t/24local_inc_package.t deleted file mode 100644 index ef0f330f1d..0000000000 --- a/cpan/Module-Pluggable/t/24local_inc_package.t +++ /dev/null @@ -1,17 +0,0 @@ -#!perl -w - -use strict; -use FindBin; -use Test::More tests => 1; - -IncTest->new()->plugins; -is(Text::Abbrev->MPCHECK, "HELLO"); - -package IncTest; -use Module::Pluggable search_path => "Text", search_dirs => "t/lib", require => 1; - -sub new { - my $class = shift; - return bless {}, $class; -} -1;
\ No newline at end of file diff --git a/cpan/Module-Pluggable/t/acme/Acme/MyTest/Plugin/Foo.pm b/cpan/Module-Pluggable/t/acme/Acme/MyTest/Plugin/Foo.pm deleted file mode 100644 index 29c888baf7..0000000000 --- a/cpan/Module-Pluggable/t/acme/Acme/MyTest/Plugin/Foo.pm +++ /dev/null @@ -1,9 +0,0 @@ -package Acme::MyTest::Plugin::Foo; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/Acme/Foo-Bar.pm b/cpan/Module-Pluggable/t/lib/Acme/Foo-Bar.pm deleted file mode 100644 index 4fc48c6a18..0000000000 --- a/cpan/Module-Pluggable/t/lib/Acme/Foo-Bar.pm +++ /dev/null @@ -1,6 +0,0 @@ -package Acme::FooBar; - -our $quux = "hello"; - -1; - diff --git a/cpan/Module-Pluggable/t/lib/Acme/MyTest/Plugin/Foo.pm b/cpan/Module-Pluggable/t/lib/Acme/MyTest/Plugin/Foo.pm deleted file mode 100644 index 29c888baf7..0000000000 --- a/cpan/Module-Pluggable/t/lib/Acme/MyTest/Plugin/Foo.pm +++ /dev/null @@ -1,9 +0,0 @@ -package Acme::MyTest::Plugin::Foo; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm b/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm deleted file mode 100644 index dcc870c4e5..0000000000 --- a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm +++ /dev/null @@ -1,9 +0,0 @@ -package EditorJunk::Bar; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm.swo b/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm.swo deleted file mode 100644 index dcc870c4e5..0000000000 --- a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm.swo +++ /dev/null @@ -1,9 +0,0 @@ -package EditorJunk::Bar; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm.swp b/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm.swp deleted file mode 100644 index dcc870c4e5..0000000000 --- a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm.swp +++ /dev/null @@ -1,9 +0,0 @@ -package EditorJunk::Bar; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm~ b/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm~ deleted file mode 100644 index dcc870c4e5..0000000000 --- a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Bar.pm~ +++ /dev/null @@ -1,9 +0,0 @@ -package EditorJunk::Bar; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Foo.pm b/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Foo.pm deleted file mode 100644 index 64b8bf4c7b..0000000000 --- a/cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/Foo.pm +++ /dev/null @@ -1,9 +0,0 @@ -package EditorJunk::Foo; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Bar.plugin b/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Bar.plugin deleted file mode 100644 index 2f9b6db0b0..0000000000 --- a/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Bar.plugin +++ /dev/null @@ -1,9 +0,0 @@ -package MyTest::Plugin::Bar; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Foo.plugin b/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Foo.plugin deleted file mode 100644 index 5386ba5b80..0000000000 --- a/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Foo.plugin +++ /dev/null @@ -1,9 +0,0 @@ -package MyTest::Plugin::Foo; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Quux/Foo.plugin b/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Quux/Foo.plugin deleted file mode 100644 index bb6e08667b..0000000000 --- a/cpan/Module-Pluggable/t/lib/ExtTest/Plugin/Quux/Foo.plugin +++ /dev/null @@ -1,9 +0,0 @@ -package MyTest::Plugin::Quux::Foo; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/InnerTest/Plugin/Foo.pm b/cpan/Module-Pluggable/t/lib/InnerTest/Plugin/Foo.pm deleted file mode 100644 index 4f5825ea65..0000000000 --- a/cpan/Module-Pluggable/t/lib/InnerTest/Plugin/Foo.pm +++ /dev/null @@ -1,17 +0,0 @@ -package InnerTest::Plugin::Foo; -use strict; - -our $FOO = 1; - -package InnerTest::Plugin::Bar; -use strict; - -sub bar {} - -package InnerTest::Plugin::Quux; -use strict; -use base qw(InnerTest::Plugin::Bar); - - - -1; diff --git a/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Bar.pm b/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Bar.pm deleted file mode 100644 index 3c5d79dc9b..0000000000 --- a/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Bar.pm +++ /dev/null @@ -1,5 +0,0 @@ -package MyOtherTest::Plugin::Bar; -use strict; -1; - - diff --git a/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Foo.pm b/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Foo.pm deleted file mode 100644 index 14825724b3..0000000000 --- a/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Foo.pm +++ /dev/null @@ -1,5 +0,0 @@ -package MyOtherTest::Plugin::Foo; -use strict; -1; - - diff --git a/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Quux.pm b/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Quux.pm deleted file mode 100644 index 22fd55d3b9..0000000000 --- a/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Quux.pm +++ /dev/null @@ -1,5 +0,0 @@ -package MyOtherTest::Plugin::Quux; -use strict; -1; - - diff --git a/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Quux/Foo.pm b/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Quux/Foo.pm deleted file mode 100644 index a8ecd69f11..0000000000 --- a/cpan/Module-Pluggable/t/lib/MyOtherTest/Plugin/Quux/Foo.pm +++ /dev/null @@ -1,5 +0,0 @@ -package MyOtherTest::Plugin::Quux::Foo; -use strict; -1; - - diff --git a/cpan/Module-Pluggable/t/lib/MyTest/Extend/Plugin/Bar.pm b/cpan/Module-Pluggable/t/lib/MyTest/Extend/Plugin/Bar.pm deleted file mode 100644 index 6d112cf39f..0000000000 --- a/cpan/Module-Pluggable/t/lib/MyTest/Extend/Plugin/Bar.pm +++ /dev/null @@ -1,17 +0,0 @@ -package MyTest::Extend::Plugin::Bar; -use strict; - -sub new { - my $class = shift; - my %self = @_; - - return bless \%self, $class; -} - - -sub nork { - return $_[0]->{'nork'}; -} -1; - - diff --git a/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Bar.pm b/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Bar.pm deleted file mode 100644 index 2f9b6db0b0..0000000000 --- a/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Bar.pm +++ /dev/null @@ -1,9 +0,0 @@ -package MyTest::Plugin::Bar; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Foo.pm b/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Foo.pm deleted file mode 100644 index 6ca8317507..0000000000 --- a/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Foo.pm +++ /dev/null @@ -1,10 +0,0 @@ -package MyTest::Plugin::Foo; - - -use strict; - -sub new { return bless {}, $_[0]; } -sub frobnitz {} -1; - - diff --git a/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Quux/Foo.pm b/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Quux/Foo.pm deleted file mode 100644 index bb6e08667b..0000000000 --- a/cpan/Module-Pluggable/t/lib/MyTest/Plugin/Quux/Foo.pm +++ /dev/null @@ -1,9 +0,0 @@ -package MyTest::Plugin::Quux::Foo; - - -use strict; - - -1; - - diff --git a/cpan/Module-Pluggable/t/lib/No/Middle.pm b/cpan/Module-Pluggable/t/lib/No/Middle.pm deleted file mode 100644 index 9d0e31ac12..0000000000 --- a/cpan/Module-Pluggable/t/lib/No/Middle.pm +++ /dev/null @@ -1,14 +0,0 @@ -package No::Middle; - -sub foo {} - -package No::Middle::Package::A; - -sub foo {} - - -package No::Middle::Package::B; - -sub foo {} - -1; diff --git a/cpan/Module-Pluggable/t/lib/OddTest/Plugin/Foo.pm b/cpan/Module-Pluggable/t/lib/OddTest/Plugin/Foo.pm deleted file mode 100644 index bcf37e34bf..0000000000 --- a/cpan/Module-Pluggable/t/lib/OddTest/Plugin/Foo.pm +++ /dev/null @@ -1,5 +0,0 @@ -package OddFiles/Plugin/Foo.pm - -sub new {} - -1; diff --git a/cpan/Module-Pluggable/t/lib/TA/C/A/I.pm b/cpan/Module-Pluggable/t/lib/TA/C/A/I.pm deleted file mode 100644 index 35575dfdde..0000000000 --- a/cpan/Module-Pluggable/t/lib/TA/C/A/I.pm +++ /dev/null @@ -1,13 +0,0 @@ -package TA::C::A::I; - -sub foo { } - -package TA::C::A::I::A; - -sub foo { } - -package TA::C::A::I::A::B; - -sub foo { } - -1; diff --git a/cpan/Module-Pluggable/t/lib/Text/Abbrev.pm b/cpan/Module-Pluggable/t/lib/Text/Abbrev.pm deleted file mode 100644 index 8417072f3e..0000000000 --- a/cpan/Module-Pluggable/t/lib/Text/Abbrev.pm +++ /dev/null @@ -1,10 +0,0 @@ -package Text::Abbrev; -use strict; - -sub module_pluggable { - return bless {}, shift; -} - -sub MPCHECK { "HELLO" } - -1;
\ No newline at end of file diff --git a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/After.pm b/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/After.pm deleted file mode 100644 index b5f6901557..0000000000 --- a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/After.pm +++ /dev/null @@ -1,3 +0,0 @@ -package TriggerTest::Plugin::After; - -1;
\ No newline at end of file diff --git a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackAllow.pm b/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackAllow.pm deleted file mode 100644 index 589b154ca4..0000000000 --- a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackAllow.pm +++ /dev/null @@ -1,6 +0,0 @@ -package TriggerTest::Plugin::CallbackAllow; - -sub exclude { - return 0; -} -1;
\ No newline at end of file diff --git a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackDeny.pm b/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackDeny.pm deleted file mode 100644 index e63227f59c..0000000000 --- a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackDeny.pm +++ /dev/null @@ -1,6 +0,0 @@ -package TriggerTest::Plugin::CallbackDeny; - -sub exclude { - return 1; -} -1;
\ No newline at end of file diff --git a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Deny.pm b/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Deny.pm deleted file mode 100644 index 311e2a07a0..0000000000 --- a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Deny.pm +++ /dev/null @@ -1,3 +0,0 @@ -package TriggerTest::Plugin::Deny; - -1;
\ No newline at end of file diff --git a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Error.pm b/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Error.pm deleted file mode 100644 index 620465a942..0000000000 --- a/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Error.pm +++ /dev/null @@ -1,2 +0,0 @@ -package TriggerTest::Plugin::Error; - diff --git a/cpan/Module-Pluggable/t/lib/Zot/.Zork.pm b/cpan/Module-Pluggable/t/lib/Zot/.Zork.pm deleted file mode 100644 index e69de29bb2..0000000000 --- a/cpan/Module-Pluggable/t/lib/Zot/.Zork.pm +++ /dev/null diff --git a/lib/.gitignore b/lib/.gitignore index 01689c0815..b7cd9739ce 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -231,8 +231,6 @@ /Module/Load/Conditional.pm /Module/Loaded.pm /Module/Metadata.pm -/Module/Pluggable -/Module/Pluggable.pm /NDBM_File.pm /NEXT.pm /Net/Cmd.pm diff --git a/t/porting/customized.dat b/t/porting/customized.dat index 910b432829..4b1490518a 100644 --- a/t/porting/customized.dat +++ b/t/porting/customized.dat @@ -12,4 +12,3 @@ Test::Harness cpan/Test-Harness/t/source.t 884890970fb850874213159df263ba483bac6 libnet cpan/libnet/Makefile.PL 5554b71464b45f5cc002e55f2464f7ff4abd05b6 podlators cpan/podlators/scripts/pod2man.PL f81acf53f3ff46cdcc5ebdd661c5d13eb35d20d6 podlators cpan/podlators/scripts/pod2text.PL b4693fcfe4a0a1b38a215cfb8985a65d5d025d69 -Module::Pluggable cpan/Module-Pluggable/Makefile.PL 72062c1a01ed7c62d16c55122c163b2d89f0d739 diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 83766f670a..3a7d146ca2 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -49,6 +49,7 @@ DBIx::Profile Devel::Callsite Devel::DProf Devel::DTrace::Provider +Devel::InnerPackage Devel::NYTProf Devel::PPPort Devel::SawAmpersand @@ -88,6 +89,8 @@ md5sum(1) Module::CPANTS::Analyse Module::Find Module::Info +Module::Pluggable +Module::Pluggable::Object Module::Starter Moo Moose |