stray closing /TABLE in the no-ticket case
[freeside.git] / FS / FS / ClientAPI.pm
index 7cbbdbf..1fea28c 100644 (file)
@@ -1,42 +1,42 @@
 package FS::ClientAPI;
 
 use strict;
-use vars qw(%handler $domain);
+use base 'Exporter';
+use vars qw( @EXPORT_OK %handler $domain $DEBUG $me );
+
+@EXPORT_OK = qw( load_clientapi_modules );
+
+$DEBUG = 0;
+$me = '[FS::ClientAPI]';
 
 %handler = ();
 
-#find modules
-foreach my $INC ( @INC ) {
-  foreach my $file ( glob("$INC/FS/ClientAPI/*.pm") ) {
-    $file =~ /\/(\w+)\.pm$/ or do {
-      warn "unrecognized ClientAPI file: $file";
-      next
-    };
-    my $mod = $1;
-    #warn "using FS::ClientAPI::$mod";
-    eval "use FS::ClientAPI::$mod;";
-    die "error using FS::ClientAPI::$mod: $@" if $@;
+sub load_clientapi_modules {
+
+  #find modules
+  foreach my $INC ( @INC ) {
+    my $glob = "$INC/FS/ClientAPI/*.pm";
+    warn "FS::ClientAPI: searching $glob" if $DEBUG;
+    foreach my $file ( glob($glob) ) {
+      $file =~ /\/(\w+)\.pm$/ or do {
+        warn "unrecognized ClientAPI file: $file";
+        next
+      };
+      my $mod = $1;
+      warn "using FS::ClientAPI::$mod" if $DEBUG;
+      eval "use FS::ClientAPI::$mod;";
+      die "error using FS::ClientAPI::$mod: $@" if $@;
+    }
   }
-}
 
-#(sub for modules)
-sub register_handlers {
-  my $self = shift;
-  my %new_handlers = @_;
-  foreach my $key ( keys %new_handlers ) {
-    warn "WARNING: redefining sub $key" if exists $handler{$key};
-    #warn "registering $key";
-    $handler{$key} = $new_handlers{$key};
-  }
 }
 
-#---
-
 sub dispatch {
   my ( $self, $name ) = ( shift, shift );
-  my $sub = $handler{$name}
-    or die "unknown FS::ClientAPI sub $name (known: ". join(" ", keys %handler );
-    #or die "unknown FS::ClientAPI sub $name";
+  $name =~ s(/)(::)g;
+  my $sub = "FS::ClientAPI::$name";
+  warn "$me dispatch: calling $sub with args @_\n" if $DEBUG;
+  no strict 'refs';
   &{$sub}(@_);
 }