Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
CliCommands
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 3
182
0.00% covered (danger)
0.00%
0 / 1
 add
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 current
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
 matchCurrent
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
110
1<?php
2
3namespace Dynart\Micro;
4
5class CliCommands {
6
7    /** @var array */
8    protected $commands = [];
9
10    public function add(string $name, $callable, array $paramNames = [], array $flagNames = []) {
11        $this->commands[$name] = [$callable, $paramNames, $flagNames];
12    }
13
14    public function current() {
15        return isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : null;
16    }
17
18    public function matchCurrent() {
19        if (!isset($this->commands[$this->current()])) {
20            return null;
21        }
22        list($callable, $paramNames, $flagNames) = $this->commands[$this->current()];
23
24        // reset parameters
25        $params = [];
26        foreach ($paramNames as $name) {
27            $params[$name] = '';
28        }
29        foreach ($flagNames as $name) {
30            $params[$name] = false;
31        }
32
33        // get parameters
34        $currentName = '';
35        $currentIndex = 0;
36        for ($i = 2; $i < $_SERVER['argc']; $i++) {
37            $argument = $_SERVER['argv'][$i];
38            if ($argument[0] == '-' && !$currentName) {
39                $name = substr($argument, 1);
40                if (in_array($name, $paramNames)) {
41                    $currentName = $name;
42                } else if (in_array($name, $flagNames)) {
43                    $params[$name] = true;
44                }
45            } else if ($currentName) {
46                $params[$currentName] = $argument;
47                $currentName = '';
48            } else {
49                $params[$currentIndex] = $argument;
50                $currentIndex++;
51            }
52        }
53
54        return [$callable, $params];
55    }
56
57}