File Coverage

blib/lib/Bot/Pluggable.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             # $Id: Pluggable.pm,v 1.5 2002/12/10 13:23:34 matt Exp $
2              
3             package Bot::Pluggable;
4 1     1   10899 use POE::Component::IRC::Object;
  0            
  0            
5             use base qw(POE::Component::IRC::Object);
6              
7             $VERSION = '0.03';
8              
9             use strict;
10             use POE;
11              
12             sub add_module {
13             my ($self, @modules) = @_;
14             my %new_modules = map { $_ => 1 } (@{$self->{Modules}}, @modules);
15             @{$self->{Modules}} = keys %new_modules;
16             }
17              
18             sub remove_module {
19             my ($self, @modules) = @_;
20             my %new_modules = map { $_ => 1 } @{$self->{Modules}};
21             foreach my $mod (@modules) { delete $new_modules{$mod} }
22             @{$self->{Modules}} = keys %new_modules;
23             }
24              
25             sub modules {
26             my ($self) = @_;
27             return @{$self->{Modules}};
28             }
29              
30             sub add_object {
31             my ($self, @objects) = @_;
32             push @{$self->{Objects}}, @objects;
33             }
34              
35             sub objects {
36             my ($self) = @_;
37             return @{$self->{Objects}};
38             }
39              
40             BEGIN {
41             sub add_event {
42             my $class = shift;
43             my $method = shift;
44             eval "sub $method {\n" .
45             ' my $self = $_[OBJECT];
46             $_[SENDER] = $self;
47             shift(@_);
48             foreach my $obj ($self->objects) {
49             my $meth = $obj->can(' . "'$method'" . ');
50             next unless $meth;
51             my $ret = $meth->($obj, @_);
52             return if $ret;
53             }
54             foreach my $class ($self->modules) {
55             my $meth = $class->can(' . "'$method'" . ');
56             next unless $meth;
57             my $ret = $meth->($class, @_);
58             return if $ret;
59             }
60             }';
61             die "Compilation of $method failed: $@" if $@;
62             }
63            
64             my @methods = qw(
65             irc_001
66             irc_public
67             irc_join
68             irc_invite
69             irc_kick
70             irc_mode
71             irc_msg
72             irc_nick
73             irc_notice
74             irc_part
75             irc_ping
76             irc_quit
77             irc_dcc_chat
78             irc_dcc_done
79             irc_dcc_error
80             irc_dcc_get
81             irc_dcc_request
82             irc_dcc_send
83             irc_dcc_start
84             irc_snotice
85              
86             irc_ctcp_finger
87             irc_ctcp_version
88             irc_ctcp_source
89             irc_ctcp_userinfo
90             irc_ctcp_clientinfo
91             irc_ctcp_errmsg
92             irc_ctcp_ping
93             irc_ctcp_time
94             irc_ctcp_action
95             irc_ctcp_dcc
96             );
97            
98             foreach my $method (@methods) {
99             __PACKAGE__->add_event($method);
100             }
101             }
102              
103             1;
104              
105             __END__