Overview

Namespaces

  • Net
    • Bazzline
      • Component
        • Cli
          • Readline
            • Configuration

Classes

  • Net\Bazzline\Component\Cli\Readline\Autocomplete
  • Net\Bazzline\Component\Cli\Readline\Configuration\Assembler
  • Net\Bazzline\Component\Cli\Readline\Configuration\Executable
  • Net\Bazzline\Component\Cli\Readline\Configuration\Validator
  • Net\Bazzline\Component\Cli\Readline\DebugManager
  • Net\Bazzline\Component\Cli\Readline\Manager
  • Net\Bazzline\Component\Cli\Readline\ManagerFactory
  • Net\Bazzline\Component\Cli\Readline\ReadLine
  • 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: 
<?php
/**
 * @author stev leibelt <artodeto@bazzline.net>
 * @since 2015-07-05 
 */

namespace Net\Bazzline\Component\Cli\Readline;

use Net\Bazzline\Component\Cli\Readline\Configuration\Executable;

class ReadLine
{
    /** @var array */
    private $configuration;

    /**
     * @param string $prompt
     */
    public function __invoke($prompt)
    {
        $this->readLine($prompt);
    }

    /**
     * @param array $configuration
     */
    public function setConfiguration(array $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * @param string $prompt
     */
    public function readLine($prompt)
    {
        $configuration  = $this->configuration;
        $line           = trim(readline($prompt));
        $tokens         = explode(' ', $line);

        if (!empty($tokens)) {
            $this->executeIfPossible($tokens, $configuration);
            readline_add_history($line);
        }
    }

    /**
     * @param array $tokens
     * @param $configuration
     */
    private function executeIfPossible(array $tokens, $configuration)
    {
        if ($configuration instanceof Executable) {
            $configuration->execute($tokens);
        } else {
            $token          = array_shift($tokens);
            $isValidToken   = (!is_null($token) && (strlen($token) > 0));

            if ($isValidToken) {
                if (isset($configuration[$token])) {
                    $this->executeIfPossible($tokens, $configuration[$token]);
                }
            }
        }
    }
}
PHP Cli Readline Component by bazzline.net API documentation generated by ApiGen