From: Gunnar Wrobel
Date: Wed, 15 Dec 2010 15:42:39 +0000 (+0100)
Subject: Allow collecting usage descriptions from each module.
X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=1f486bb49892611459efd692fe6a7c02983b33dc;p=horde.git
Allow collecting usage descriptions from each module.
---
diff --git a/framework/Cli_Modular/lib/Horde/Cli/Modular.php b/framework/Cli_Modular/lib/Horde/Cli/Modular.php
index aafc0cd61..ad81c3175 100644
--- a/framework/Cli_Modular/lib/Horde/Cli/Modular.php
+++ b/framework/Cli_Modular/lib/Horde/Cli/Modular.php
@@ -35,6 +35,13 @@ class Horde_Cli_Modular
private $_parameters;
/**
+ * Handler for the list of modules.
+ *
+ * @var Horde_Cli_Modular_Modules
+ */
+ private $_modules;
+
+ /**
* Constructor.
*
* @param array $parameters Options for this instance.
@@ -43,6 +50,7 @@ class Horde_Cli_Modular
* - parser
* - class: Class name of the parser that should be used to parse
* command line arguments.
+ * - usage: The usage decription shown in the help output of the CLI
* - modules: Determines the handler for modules. Can be one of:
* (array) A parameter array.
* See Horde_Cli_Modular_Modules::__construct()
@@ -70,6 +78,24 @@ class Horde_Cli_Modular
}
/**
+ * Return the usage description for the help output of the parser.
+ *
+ * @return string The usage description.
+ */
+ public function getUsage()
+ {
+ if (empty($this->_parameters['cli']['parser']['usage'])) {
+ $usage = '[options]';
+ } else {
+ $usage = $this->_parameters['cli']['parser']['usage'];
+ }
+ foreach ($this->getModules() as $module) {
+ $usage .= '';
+ }
+ return $usage;
+ }
+
+ /**
* Create the parser for command line arguments.
*
* @return Horde_Argv_Parser The parser.
@@ -79,7 +105,7 @@ class Horde_Cli_Modular
$parser_class = $this->getParserClass();
return new $parser_class(
array(
- 'usage' => '%prog ' . _("[options] PACKAGE_PATH")
+ 'usage' => '%prog ' . $this->getUsage()
)
);
}
@@ -89,7 +115,20 @@ class Horde_Cli_Modular
*
* @return Horde_Cli_Modular_Modules The module handler.
*/
- public function createModules()
+ public function getModules()
+ {
+ if ($this->_modules === null) {
+ $this->_modules = $this->_createModules();
+ }
+ return $this->_modules;
+ }
+
+ /**
+ * Create the module handler.
+ *
+ * @return Horde_Cli_Modular_Modules The module handler.
+ */
+ private function _createModules()
{
if (is_array($this->_parameters['modules'])) {
return new Horde_Cli_Modular_Modules(
diff --git a/framework/Cli_Modular/lib/Horde/Cli/Modular/Module.php b/framework/Cli_Modular/lib/Horde/Cli/Modular/Module.php
new file mode 100644
index 000000000..1b4837a65
--- /dev/null
+++ b/framework/Cli_Modular/lib/Horde/Cli/Modular/Module.php
@@ -0,0 +1,36 @@
+
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Cli_Modular
+ */
+
+/**
+ * The Horde_Cli_Modular_Module:: interface characterizes a single CLI module.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Horde
+ * @package Cli_Modular
+ * @author Gunnar Wrobel
+ * -
+ *
+ */
+ public function __construct(array $parameters = null)
+ {
+ if (!isset($parameters['prefix'])) {
+ throw new Horde_Cli_Modular_Exception(
+ 'Missing "prefix" parameter!'
+ );
+ }
+ $this->_prefix = $parameters['prefix'];
+ }
+
+ /**
+ * Get the usage string for the specified module.
+ *
+ * @param string $module The desired module.
+ *
+ * @return string The usage description for this module.
+ *
+ * @throws Horde_Cli_Modular_Exception In case the specified module does not
+ * exist.
+ */
+ public function getUsage($module)
+ {
+ if (!class_exists($this->_prefix . $module)) {
+ throw new Horde_Cli_Modular_Exception(
+ sprintf(
+ 'Invalid module %s!', $this->_prefix . $module
+ )
+ );
+ }
+ return call_user_func_array(
+ array($this->_prefix . $module, 'getUsage'), array()
+ );
+ }
+}
\ No newline at end of file
diff --git a/framework/Cli_Modular/lib/Horde/Cli/Modular/Modules.php b/framework/Cli_Modular/lib/Horde/Cli/Modular/Modules.php
index 8d4129431..5566551ea 100644
--- a/framework/Cli_Modular/lib/Horde/Cli/Modular/Modules.php
+++ b/framework/Cli_Modular/lib/Horde/Cli/Modular/Modules.php
@@ -54,7 +54,8 @@ implements Iterator, Countable
*
* @param array $parameters Options for this instance.
*
- * -
+ * - directory: (string) The path to the directory that holds the modules.
+ * - exclude: (array) Exclude these modules from the list.
*
*/
public function __construct(array $parameters = null)
diff --git a/framework/Cli_Modular/package.xml b/framework/Cli_Modular/package.xml
index a330a48a1..ea46cb3a9 100644
--- a/framework/Cli_Modular/package.xml
+++ b/framework/Cli_Modular/package.xml
@@ -17,7 +17,7 @@