+++ /dev/null
-#!/usr/bin/env perl
-use warnings;
-use strict;
-
-use inc::Module::Install;
-
-name q{namespace-clean};
-license q{perl};
-author q{Robert 'phaylon' Sedlacek <rs@474.at>};
-all_from q{lib/namespace/clean.pm};
-
-build_requires q{Test::More}, '0.88';
-build_requires q{FindBin}, 0;
-
-requires q{B::Hooks::EndOfScope}, '0.07';
-requires q{Package::Stash}, '0.03';
-requires q{Sub::Name}, '0.04';
-requires q{Sub::Identify}, '0.04';
-
-auto_provides;
-
-if (-e 'MANIFEST.SKIP') {
-
- print "Creating README file\n";
- system 'pod2text lib/namespace/clean.pm > README';
-
- print "Adding author tests to 'make test' run\n";
- tests 't/*.t t_author/*.t';
-}
-
-WriteAll;
package namespace::clean;
-
-=head1 NAME
-
-namespace::clean - Keep imports and functions out of your namespace
-
-=cut
+# ABSTRACT: Keep imports and functions out of your namespace
use warnings;
use strict;
-use vars qw( $VERSION $STORAGE_VAR $SCOPE_HOOK_KEY $SCOPE_EXPLICIT );
-use B::Hooks::EndOfScope;
-use Package::Stash;
-use Sub::Identify qw(sub_fullname);
-use Sub::Name qw(subname);
-
-=head1 VERSION
-
-0.13
-
-=cut
+use vars qw( $STORAGE_VAR $SCOPE_HOOK_KEY $SCOPE_EXPLICIT );
+use Sub::Name 0.04 qw(subname);
+use Sub::Identify 0.04 qw(sub_fullname);
+use Package::Stash 0.03;
+use B::Hooks::EndOfScope 0.07;
-$VERSION = '0.15';
$STORAGE_VAR = '__NAMESPACE_CLEAN_STORAGE';
=head1 SYNOPSIS
When you define a function, or import one, into a Perl package, it will
naturally also be available as a method. This does not per se cause
problems, but it can complicate subclassing and, for example, plugin
-classes that are included via multiple inheritance by loading them as
+classes that are included via multiple inheritance by loading them as
base classes.
The C<namespace::clean> pragma will remove all previously declared or
If you don't care about C<namespace::clean>s discover-and-C<-except> logic, and
just want to remove subroutines, try L</clean_subroutines>.
-=head1 METHODS
-
-You shouldn't need to call any of these. Just C<use> the package at the
-appropriate place.
-
-=cut
-
-=head2 clean_subroutines
+=method clean_subroutines
This exposes the actual subroutine-removal logic.
$RemoveSubs->($cleanee, {}, @subs);
}
-=head2 import
+=method import
Makes a snapshot of the current defined functions and installs a
L<B::Hooks::EndOfScope> hook in the current scope to invoke the cleanups.
}
}
-=head2 unimport
+=method unimport
This method will be called when you do a
return 1;
}
-=head2 get_class_store
+=method get_class_store
-This returns a reference to a hash in a passed package containing
+This returns a reference to a hash in a passed package containing
information about function names included and excluded from removal.
=cut
return $stash->get_package_symbol("%$STORAGE_VAR");
}
-=head2 get_functions
+=method get_functions
Takes a class as argument and returns all currently defined functions
in it as a hash reference with the function name as key and a typeglob
};
}
-=head1 BUGS
-
-C<namespace::clean> will clobber any formats that have the same name as
-a deleted sub. This is due to a bug in perl that makes it impossible to
-re-assign the FORMAT ref into a new glob.
-
=head1 IMPLEMENTATION DETAILS
-This module works through the effect that a
+This module works through the effect that a
delete $SomePackage::{foo};
L<B::Hooks::EndOfScope>
-=head1 AUTHOR AND COPYRIGHT
-
-Robert 'phaylon' Sedlacek C<E<lt>rs@474.atE<gt>>, with many thanks to
-Matt S Trout for the inspiration on the whole idea.
-
-=head1 LICENSE
+=head1 THANKS
-This program is free software; you can redistribute it and/or modify
-it under the same terms as perl itself.
+Many thanks to Matt S Trout for the inspiration on the whole idea.
=cut
'parent function not available in subclass' );
ok( Inheritance->can('bar'),
'parent method available in subclass' );
-is( Inheritance->bar, 23,
+is( Inheritance->bar, 23,
'parent method works in subclass' );
is( Inheritance->qux, 23,
'subclass method calls to parent work' );