Import namespace-clean-0.05.tar.gz.
[p5sagit/namespace-clean.git] / inc / Module / Install / Base.pm
1 #line 1
2 package Module::Install::Base;
3
4 $VERSION = '0.67';
5
6 # Suspend handler for "redefined" warnings
7 BEGIN {
8         my $w = $SIG{__WARN__};
9         $SIG{__WARN__} = sub { $w };
10 }
11
12 ### This is the ONLY module that shouldn't have strict on
13 # use strict;
14
15 #line 41
16
17 sub new {
18     my ($class, %args) = @_;
19
20     foreach my $method ( qw(call load) ) {
21         *{"$class\::$method"} = sub {
22             shift()->_top->$method(@_);
23         } unless defined &{"$class\::$method"};
24     }
25
26     bless( \%args, $class );
27 }
28
29 #line 61
30
31 sub AUTOLOAD {
32     my $self = shift;
33     local $@;
34     my $autoload = eval { $self->_top->autoload } or return;
35     goto &$autoload;
36 }
37
38 #line 76
39
40 sub _top { $_[0]->{_top} }
41
42 #line 89
43
44 sub admin {
45     $_[0]->_top->{admin} or Module::Install::Base::FakeAdmin->new;
46 }
47
48 sub is_admin {
49     $_[0]->admin->VERSION;
50 }
51
52 sub DESTROY {}
53
54 package Module::Install::Base::FakeAdmin;
55
56 my $Fake;
57 sub new { $Fake ||= bless(\@_, $_[0]) }
58
59 sub AUTOLOAD {}
60
61 sub DESTROY {}
62
63 # Restore warning handler
64 BEGIN {
65         $SIG{__WARN__} = $SIG{__WARN__}->();
66 }
67
68 1;
69
70 #line 138