From f4339edbbe92a1c4c104f6a58e9cfb4b2a93966e Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Wed, 5 Feb 2014 20:16:30 +0100 Subject: [PATCH] use console_commandline for parameter parsing --- src/bdrem/Cli.php | 30 ++--------- src/bdrem/Renderer.php | 18 +++++++ src/bdrem/Renderer/Console.php | 12 ++++- src/bdrem/Renderer/Html.php | 4 +- src/bdrem/Renderer/HtmlTable.php | 4 +- src/bdrem/Renderer/Mail.php | 2 +- src/bdrem/UserInterface.php | 93 +++++++++++++++++++++++++++++++- src/bdrem/Web.php | 18 +++---- src/bdrem/WebText.php | 10 ++-- 9 files changed, 145 insertions(+), 46 deletions(-) create mode 100644 src/bdrem/Renderer.php diff --git a/src/bdrem/Cli.php b/src/bdrem/Cli.php index 2199161..ec849f4 100644 --- a/src/bdrem/Cli.php +++ b/src/bdrem/Cli.php @@ -5,33 +5,11 @@ class Cli extends UserInterface { protected function loadParameters() { - $params = $GLOBALS['argv']; - array_shift($params); - $storeInto = null; - foreach ($params as $param) { - if ($storeInto !== null) { - $this->config->$storeInto = (int)$param; - $storeInto = null; - continue; - } + $parser = parent::loadParameters(); + //set default renderer to console + $parser->options['renderer']->default = 'console'; - if ($param == '--days-after' || $param == '-a') { - $storeInto = 'daysAfter'; - continue; - } else if ($param == '--days-before' || $param == '-b') { - $storeInto = 'daysBefore'; - continue; - } - $storeInto = null; - } - } - - protected function render($arEvents) - { - $r = new Renderer_Mail(); - $r->config = $this->config; - $r->ansi = true; - echo $r->render($arEvents); + return $parser; } } ?> diff --git a/src/bdrem/Renderer.php b/src/bdrem/Renderer.php new file mode 100644 index 0000000..a8da7a1 --- /dev/null +++ b/src/bdrem/Renderer.php @@ -0,0 +1,18 @@ +httpContentType !== null) { + header('Content-type: ' . $this->httpContentType); + } + echo $this->render($arEvents); + } + + abstract public function render($arEvents); +} +?> diff --git a/src/bdrem/Renderer/Console.php b/src/bdrem/Renderer/Console.php index fc2174f..b4ef8a8 100644 --- a/src/bdrem/Renderer/Console.php +++ b/src/bdrem/Renderer/Console.php @@ -1,8 +1,10 @@ loadConfig(); if ($this->ansi) { $this->cc = new \Console_Color2(); } @@ -80,5 +83,12 @@ class Renderer_Console } return $data; } + + protected function loadConfig() + { + if (isset($this->config->ansi)) { + $this->ansi = $this->config->ansi; + } + } } ?> diff --git a/src/bdrem/Renderer/Html.php b/src/bdrem/Renderer/Html.php index bb027d2..af48e0e 100644 --- a/src/bdrem/Renderer/Html.php +++ b/src/bdrem/Renderer/Html.php @@ -1,8 +1,10 @@ config->locale); $source = $this->config->loadSource(); - $this->loadParameters($this->config); + $parser = $this->loadParameters(); + $this->parseParameters($parser); + $arEvents = $source->getEvents( $this->config->date, $this->config->daysBefore, $this->config->daysAfter @@ -24,8 +26,95 @@ abstract class UserInterface protected function loadParameters() { + $parser = new \Console_CommandLine(); + $parser->description = 'Birthday reminder'; + $parser->version = '0.1.0'; + + $parser->addOption( + 'daysAfter', + array( + 'short_name' => '-a', + 'long_name' => '--days-after', + 'description' => 'Show NUM days after date', + 'help_name' => 'NUM', + 'action' => 'StoreInt', + 'default' => $this->config->daysAfter, + ) + ); + $parser->addOption( + 'daysBefore', + array( + 'short_name' => '-b', + 'long_name' => '--days-before', + 'description' => 'Show NUM days before date', + 'help_name' => 'NUM', + 'action' => 'StoreInt', + 'default' => $this->config->daysBefore, + ) + ); + $parser->addOption( + 'renderer', + array( + 'short_name' => '-r', + 'long_name' => '--renderer', + 'description' => 'Output mode', + 'action' => 'StoreString', + 'choices' => array( + 'console', + 'html', + 'htmltable', + 'mail', + ), + 'default' => 'console', + 'add_list_option' => true, + ) + ); + $parser->addOption( + 'quiet', + array( + 'short_name' => '-q', + 'long_name' => '--quiet', + 'description' => "Don't print status messages to stdout", + 'action' => 'StoreTrue' + ) + ); + return $parser; + } + + protected function parseParameters($parser) + { + try { + $result = $parser->parse(); + // do something with the result object + $this->config->daysAfter = $result->options['daysAfter']; + $this->config->daysBefore = $result->options['daysBefore']; + $this->config->renderer = $result->options['renderer']; + $this->config->quiet = $result->options['quiet']; + } catch (\Exception $exc) { + $this->preRenderParameterError(); + $parser->displayError($exc->getMessage()); + } } - abstract protected function render($arEvents); + protected function render($arEvents) + { + $r = $this->getRenderer(); + $r->config = $this->config; + $r->renderAndOutput($arEvents); + } + + protected function getRenderer() + { + $renderer = ucfirst($this->config->renderer); + if ($renderer == 'Htmltable') { + $renderer = 'HtmlTable'; + } + $class = '\\bdrem\\Renderer_' . $renderer; + return new $class(); + } + + protected function preRenderParameterError() + { + } } ?> \ No newline at end of file diff --git a/src/bdrem/Web.php b/src/bdrem/Web.php index b076520..10120ec 100644 --- a/src/bdrem/Web.php +++ b/src/bdrem/Web.php @@ -3,20 +3,18 @@ namespace bdrem; class Web extends UserInterface { - protected function render($arEvents) + protected function loadParameters() { - $r = new Renderer_Html(); - echo $r->render($arEvents); + $parser = parent::loadParameters(); + //set default renderer to html + $parser->options['renderer']->default = 'html'; + + return $parser; } - protected function loadParameters() + protected function preRenderParameterError() { - if (isset($_GET['daysBefore'])) { - $this->config->daysBefore = (int) $_GET['daysBefore']; - } - if (isset($_GET['daysAfter'])) { - $this->config->daysAfter = (int) $_GET['daysAfter']; - } + header('Content-type: text/plain; charset=utf-8'); } } ?> diff --git a/src/bdrem/WebText.php b/src/bdrem/WebText.php index aaace51..3587f70 100644 --- a/src/bdrem/WebText.php +++ b/src/bdrem/WebText.php @@ -3,11 +3,13 @@ namespace bdrem; class WebText extends Web { - protected function render($arEvents) + protected function loadParameters() { - header('Content-type: text/plain; charset=utf-8'); - $r = new Renderer_Console(); - echo $r->render($arEvents); + $parser = parent::loadParameters(); + //set default renderer to console + $parser->options['renderer']->default = 'console'; + + return $parser; } } ?> -- 2.30.2