better sorting and nesting
[OpenSRF.git] / doc / dokuwiki-doc-stubber.pl
index 3121f14..19ac244 100755 (executable)
 #!/usr/bin/perl -w
 use OpenSRF::System qw(/pines/conf/bootstrap.conf);
 #!/usr/bin/perl -w
 use OpenSRF::System qw(/pines/conf/bootstrap.conf);
-use Data::Dumper;
+use Getopt::Long
 
 $| = 1;
 
 
 $| = 1;
 
-# ----------------------------------------------------------------------------------------
-# This is a quick and dirty script to perform benchmarking against the math server.
-# Note: 1 request performs a batch of 4 queries, one for each supported method: add, sub,
-# mult, div.
-# Usage: $ perl math_bench.pl <num_requests>
-# ----------------------------------------------------------------------------------------
-
-
 my $count = $ARGV[0];
 my $count = $ARGV[0];
-
-unless( $count ) {
-       print "usage: $0 <service name> [<cvs repo base URL>]\n";
+my $cvs_base = 'http://open-ils.org/cgi-bin/viewcvs.cgi/ILS/Open-ILS/src/perlmods/';
+my $nest = 0;
+my $service;
+my $sort_ignore;
+
+GetOptions(    'cvs_base=s'    => \$cvs_base,
+               'nest'          => \$nest,
+               'service=s'     => \$service,
+               'ignore=s'      => \$sort_ignore,
+);
+
+unless( $service ) {
+       print "usage: $0 -s <service name> [-c <cvs repo base URL> -n]\n";
        exit;
 }
 
        exit;
 }
 
-my $cvs_base = $ARGV[1] || 'http://open-ils.org/cgi-bin/viewcvs.cgi/ILS/Open-ILS/src/perlmods/';
-
 OpenSRF::System->bootstrap_client();
 OpenSRF::System->bootstrap_client();
-my $session = OpenSRF::AppSession->create( $ARGV[0] );
+my $session = OpenSRF::AppSession->create( $service );
 
 my $req = $session->request('opensrf.system.method.all');
 
 
 my $req = $session->request('opensrf.system.method.all');
 
+my $count = 1;
+my %m;
 while( my $meth = $req->recv(60) ) {
        $meth = $meth->content;
 while( my $meth = $req->recv(60) ) {
        $meth = $meth->content;
-       my $api_name = $meth->{api_name};
-       my $api_level = int $meth->{api_level};
-       my $server_class = $meth->{server_class} || '**ALL**';
-       my $stream = int($meth->{stream} || 0);
-       my $cachable = int($meth->{cachable} || 0);
-       my $note = $meth->{note} || 'what I do';
-       my $package = $meth->{package};
-       (my $cvs = $package) =~ s/::/\//go;
-       my $method = $meth->{method};
-
-       $stream = $stream?'Yes':'No';
-       $cachable = $cachable?'Yes':'No';
+
+       $api_name = $meth->{api_name};
+
+       $m{$api_name}{api_name} = $meth->{api_name};
+
+       $m{$api_name}{package} = $meth->{package};
+       $m{$api_name}{method} = $meth->{method};
+
+       $m{$api_name}{api_level} = int $meth->{api_level};
+       $m{$api_name}{server_class} = $meth->{server_class} || '**ALL**';
+       $m{$api_name}{stream} = int($meth->{stream} || 0);
+       $m{$api_name}{cachable} = int($meth->{cachable} || 0);
+
+       $m{$api_name}{note} = $meth->{note} || 'what I do';
+       ($m{$api_name}{cvs} = $m{$api_name}{package}) =~ s/::/\//go;
+
+       $m{$api_name}{stream} = $m{$api_name}{stream}?'Yes':'No';
+       $m{$api_name}{cachable} = $m{$api_name}{cachable}?'Yes':'No';
+
+       print STDERR "." unless ($count % 10);
+
+       $count++;
+}
+
+warn "\nThere are ".scalar(keys %m)." methods published by $service\n";
+
+my @m_list;
+if (!$sort_ignore) {
+       @m_list = sort keys %m;
+} else {
+       @m_list =
+               map { ($$_[0]) }
+               sort {
+                       $$a[1] cmp $$b[1]
+                               ||
+                       length($$b[0]) <=> length($$a[0])
+               } map {
+                       [$_ =>
+                       do {
+                               (my $x = $_) =~ s/^$sort_ignore//go;
+                               $x;
+                       } ]
+               } keys %m;
+}
+
+for my $meth ( @m_list ) {
+
+       my $pad = 0;
+       my $header = '=====';
+       if ($nest) {
+               no warnings;
+               (my $x = $meth) =~ s/\./$pad++;$1/eg;
+       }
+       $pad = ' 'x$pad;
 
        print <<"       METHOD";
 
        print <<"       METHOD";
-===== $api_name =====
+$pad$header $meth $header
 
 
-$note
+$m{$meth}{note}
 
 
-  * [[osrf-devel:terms#opensrf_api-level|API Level]]: $api_level
-  * [[osrf-devel:terms#opensrf_server_class|Server Class]]: $server_class
-  * Implementation Method: [[$cvs_base/$cvs.pm|$package\::$method]]
-  * Streaming [[osrf-devel:terms#opensrf_method|Method]]: $stream
-  * Cachable [[osrf-devel:terms#opensrf_method|Method]]: $cachable
+  * [[osrf-devel:terms#opensrf_api-level|API Level]]: $m{$meth}{api_level}
+  * [[osrf-devel:terms#opensrf_server_class|Server Class]]: $m{$meth}{server_class}
+  * Implementation Method: [[$cvs_base/$m{$meth}{cvs}.pm|$m{$meth}{package}\::$m{$meth}{method}]]
+  * Streaming [[osrf-devel:terms#opensrf_method|Method]]: $m{$meth}{stream}
+  * Cachable [[osrf-devel:terms#opensrf_method|Method]]: $m{$meth}{cachable}
 
   * **Parameters:**
     * //param1//\\\\ what it is...
 
   * **Parameters:**
     * //param1//\\\\ what it is...