Overview

Namespaces

  • NetBazzlineZfCliGenerator
    • Controller
      • Console
    • Service
      • ProcessPipe
        • Filter
        • Transformer

Classes

  • NetBazzlineZfCliGenerator\Controller\Console\IndexController
  • NetBazzlineZfCliGenerator\Controller\Console\IndexControllerFactory
  • NetBazzlineZfCliGenerator\Service\GenerateCliContentFactory
  • NetBazzlineZfCliGenerator\Service\GenerateConfigurationContentFactory
  • NetBazzlineZfCliGenerator\Service\ProcessPipe\Filter\RemoveColorsAndModuleHeadlines
  • NetBazzlineZfCliGenerator\Service\ProcessPipe\Filter\RemoveFirstLinesAndLastLine
  • NetBazzlineZfCliGenerator\Service\ProcessPipe\Filter\RemoveIndexDotPhpFromLines
  • NetBazzlineZfCliGenerator\Service\ProcessPipe\Transformer\DumpCliContent
  • NetBazzlineZfCliGenerator\Service\ProcessPipe\Transformer\DumpConfigurationContent
  • NetBazzlineZfCliGenerator\Service\ProcessPipe\Transformer\FetchApplicationOutput
  • NetBazzlineZfCliGenerator\Service\ProcessPipe\Transformer\ParseToConfiguration
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 
<?php
/**
 * @author stev leibelt <artodeto@bazzline.net>
 * @since 2015-07-11 
 */

namespace NetBazzlineZfCliGenerator\Service\ProcessPipe\Transformer;

use Net\Bazzline\Component\ProcessPipe\ExecutableException;
use Net\Bazzline\Component\ProcessPipe\ExecutableInterface;

class ParseToConfiguration implements ExecutableInterface
{
    /**
     * @param mixed $input
     * @return mixed
     * @throws ExecutableException
     */
    public function execute($input = null)
    {
        if (!is_array($input)) {
            throw new ExecutableException(
                'input must be an array'
            );
        }

        if (empty($input)) {
            throw new ExecutableException(
                'empty input provided'
            );
        }

        $output = array();

        foreach ($input as $line) {
            //remove description
            $breadcrumb                     = array();
            $positionOfMultipleWhitespaces  = strpos($line, '  ');

            if (is_numeric($positionOfMultipleWhitespaces)) {
                $line = substr($line, 0, $positionOfMultipleWhitespaces);
            }

            $tokens = explode(' ', $line);

            foreach ($tokens as $token) {
                $isValid = true;
                //we don't care of "--foo", "-f", <foo>, [<foo>] nor [foo]
                //  @see:
                //      http://framework.zend.com/manual/current/en/modules/zend.console.routes.html
                //      http://framework.zend.com/manual/current/en/modules/zend.console.routes.html#console-routes-cheat-sheet
                foreach (array('-', '<', '[') as $needle) {
                    if ($this->startsWith($token, $needle)) {
                        $isValid = false;
                        break;
                    }
                }

                if ($isValid) {
                    $breadcrumb[] = $token;
                }
            }
            $output = $this->addToArray($output, $breadcrumb);
        }

        return $output;
    }

    /**
     * @param array $array
     * @param array $path
     * @return array
     * @todo replace with external dependency
     */
    private function addToArray(array $array, array $path)
    {
        $section = array_shift($path);

        if (!isset($array[$section])) {
            $array[$section]= array();
        }

        if (!empty($path)) {
            $array[$section] = $this->addToArray($array[$section], $path);
        }

        return $array;
    }

    /**
     * @param string $haystack
     * @param string $needle
     * @return bool
     * @todo replace with external dependency
     */
    private function startsWith($haystack, $needle)
    {
        return (strncmp($haystack, $needle, strlen($needle)) === 0);
    }
}
PHP Command Line Generator Module for Zend Framework 2 by bazzline.net API documentation generated by ApiGen