recommend HTML::Mason
[freeside.git] / FS / FS / ClientAPI.pm
1 package FS::ClientAPI;
2
3 use strict;
4 use vars qw(%handler $domain);
5
6 %handler = ();
7
8 #find modules
9 foreach my $INC ( @INC ) {
10   foreach my $file ( glob("$INC/FS/ClientAPI/*.pm") ) {
11     $file =~ /\/(\w+)\.pm$/ or do {
12       warn "unrecognized ClientAPI file: $file";
13       next
14     };
15     my $mod = $1;
16     #warn "using FS::ClientAPI::$mod";
17     eval "use FS::ClientAPI::$mod;";
18     die "error using FS::ClientAPI::$mod: $@" if $@;
19   }
20 }
21
22 #(sub for modules)
23 sub register_handlers {
24   my $self = shift;
25   my %new_handlers = @_;
26   foreach my $key ( keys %new_handlers ) {
27     warn "WARNING: redefining sub $key" if exists $handler{$key};
28     #warn "registering $key";
29     $handler{$key} = $new_handlers{$key};
30   }
31 }
32
33 #---
34
35 sub dispatch {
36   my ( $self, $name ) = ( shift, shift );
37   my $sub = $handler{$name}
38     or die "unknown FS::ClientAPI sub $name (known: ". join(" ", keys %handler );
39     #or die "unknown FS::ClientAPI sub $name";
40   &{$sub}(@_);
41 }
42
43 1;
44