diff --git a/CHANGELOG.md b/CHANGELOG.md index dc1ac0c..ebd641e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,6 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [1.2.2][] -#### Changed -- Minor improvement to logic in `AbstractInputHandler::validateInput()`. Ensures that an input with a validator, but with a default value and no user suplied input, will have the default value used. - -## [1.2.1][] -#### Changed -- Updated `InputHandlerFactory` and `InputTypeFactory` to work with changes in `pointybeard/helpers-foundation-factory` 1.0.2 - ## [1.2.0][] #### Added - Added `InputTypeFilterIterator` class @@ -81,8 +73,6 @@ This project adheres to [Semantic Versioning](http://semver.org/). #### Added - Initial release -[1.2.2]: https://github.com/pointybeard/helpers-functions-cli/compare/1.2.1...1.2.2 -[1.2.1]: https://github.com/pointybeard/helpers-functions-cli/compare/1.2.0...1.2.1 [1.2.0]: https://github.com/pointybeard/helpers-functions-cli/compare/1.1.4...1.2.0 [1.1.4]: https://github.com/pointybeard/helpers-functions-cli/compare/1.1.3...1.1.4 [1.1.3]: https://github.com/pointybeard/helpers-functions-cli/compare/1.1.2...1.1.3 diff --git a/README.md b/README.md index be26831..e58ef69 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # PHP Helpers: Command-line Input and Input Type Handlers -- Version: v1.2.2 -- Date: Aug 06 2019 +- Version: v1.2.0 +- Date: June 01 2019 - [Release notes](https://github.com/pointybeard/helpers-cli-input/blob/master/CHANGELOG.md) - [GitHub repository](https://github.com/pointybeard/helpers-cli-input) diff --git a/composer.json b/composer.json index 8eea99b..094ef88 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,6 @@ { "name": "pointybeard/helpers-cli-input", + "version": "1.2.0", "description": "Collection of classes for handling argv (and other) input when calling command-line scripts. Helps with parsing, collecting and validating arguments, options, and flags.", "homepage": "https://github.com/pointybeard/helpers-cli-input", "license": "MIT", @@ -16,6 +17,12 @@ "pointybeard/helpers-foundation-factory": "~1.0", "pointybeard/helpers-functions-flags": "~1.0" }, + "require-dev": { + "phpunit/phpunit": "^8", + "pointybeard/helpers-functions-strings": "~1.1.0", + "pointybeard/helpers-cli-colour": "~1.0", + "pointybeard/helpers-functions-cli": "~1.1.0" + }, "support": { "issues": "https://github.com/pointybeard/helpers-cli-input/issues", "wiki": "https://github.com/pointybeard/helpers-cli-input/wiki" diff --git a/example/example.php b/example/example.php index 1695bf1..76b67e5 100644 --- a/example/example.php +++ b/example/example.php @@ -4,6 +4,7 @@ declare(strict_types=1); include __DIR__.'/../vendor/autoload.php'; use pointybeard\Helpers\Cli\Input; +use pointybeard\Helpers\Cli\Colour\Colour; use pointybeard\Helpers\Functions\Cli; // Define what we are expecting to get from the command line @@ -63,6 +64,34 @@ try { exit; } +// Display the manual in green text +echo Cli\manpage( + basename(__FILE__), + '1.0.2', + 'An example script for the PHP Helpers: Command-line Input and Input Type Handlers composer library (pointybeard/helpers-cli-input).', + $collection, + Colour::FG_GREEN, + Colour::FG_WHITE, + [ + 'Examples' => 'php -f example/example.php -- -vvv -d example/example.json import', + ] +).PHP_EOL.PHP_EOL; + +// example.php 1.0.2, An example script for the PHP Helpers: Command-line Input +// and Input Type Handlers composer library (pointybeard/helpers-cli-input). +// Usage: example.php [OPTIONS]... ACTION... +// +// Arguments: +// ACTION The name of the action to perform +// +// Options: +// -v verbosity level. -v (errors only), -vv +// (warnings and errors), -vvv (everything). +// -d, --data=VALUE Path to the input JSON data +// +// Examples: +// php -f example/example.php -- -vvv -d example/example.json import + var_dump($argv->find('action')); // string(6) "import" diff --git a/src/Input/AbstractInputHandler.php b/src/Input/AbstractInputHandler.php index e0c5e13..97413e0 100644 --- a/src/Input/AbstractInputHandler.php +++ b/src/Input/AbstractInputHandler.php @@ -68,17 +68,17 @@ abstract class AbstractInputHandler implements Interfaces\InputHandlerInterface if(!Flags\is_flag_set($flags, self::FLAG_VALIDATION_SKIP_REQUIRED)) { self::checkRequiredAndRequiredValue($input, $this->input); } - // There is a default value and input has not been set. Assign the - // default value to the result. + // There is a default value, input has not been set, and there + // is no validator if ( null !== $input->default() && - null === $this->find($input->name()) + null === $this->find($input->name()) && + null === $input->validator() ) { $result = $input->default(); - // Input has been set AND it has a validator. Run the validator over the - // input. Note, this will be skipped if FLAG_VALIDATION_SKIP_CUSTOM is - // set + // Input has been set and it has a validator. Skip this if + // FLAG_VALIDATION_SKIP_CUSTOM is set } elseif (null !== $this->find($input->name()) && null !== $input->validator() && !Flags\is_flag_set($flags, self::FLAG_VALIDATION_SKIP_CUSTOM)) { $validator = $input->validator(); @@ -94,8 +94,7 @@ abstract class AbstractInputHandler implements Interfaces\InputHandlerInterface throw new Exceptions\InputValidationFailedException($input, 0, $ex); } - // No default, but may or may not have been set so assign whatever value - // it might have to the result + // No default, no validator, but may or may not have been set } else { $result = $this->find($input->name()); } diff --git a/src/Input/InputHandlerFactory.php b/src/Input/InputHandlerFactory.php index 2ae425c..2b06ecf 100644 --- a/src/Input/InputHandlerFactory.php +++ b/src/Input/InputHandlerFactory.php @@ -9,34 +9,27 @@ use pointybeard\Helpers\Foundation\Factory; final class InputHandlerFactory extends Factory\AbstractFactory { - public function getTemplateNamespace(): string + public static function getTemplateNamespace(): string { return __NAMESPACE__.'\\Handlers\\%s'; } - public function getExpectedClassType(): ?string + public static function getExpectedClassType(): ?string { return __NAMESPACE__.'\\Interfaces\\InputHandlerInterface'; } - public static function build(string $name, ...$arguments): object + public static function build(string $name, InputCollection $collection = null, int $flags = null): Interfaces\InputHandlerInterface { - - // Since passing flags is optional, we can use array_pad - // to ensure there are always at least 2 elements in $arguments - [$collection, $flags] = array_pad($arguments, 2, null); - - $factory = new self; - try { - $handler = $factory->instanciate( - $factory->generateTargetClassName($name) + $handler = self::instanciate( + self::generateTargetClassName($name) ); } catch (\Exception $ex) { throw new Exceptions\UnableToLoadInputHandlerException($name, 0, $ex); } - if (null !== $collection) { + if ($collection instanceof InputCollection) { $handler->bind( $collection, $flags diff --git a/src/Input/InputTypeFactory.php b/src/Input/InputTypeFactory.php index 82b1115..dda8115 100644 --- a/src/Input/InputTypeFactory.php +++ b/src/Input/InputTypeFactory.php @@ -8,12 +8,14 @@ use pointybeard\Helpers\Foundation\Factory; final class InputTypeFactory extends Factory\AbstractFactory { - public function getTemplateNamespace(): string + use Factory\Traits\hasSimpleFactoryBuildMethodTrait; + + public static function getTemplateNamespace(): string { return __NAMESPACE__.'\\Types\\%s'; } - public function getExpectedClassType(): ?string + public static function getExpectedClassType(): ?string { return __NAMESPACE__.'\\Interfaces\\InputTypeInterface'; } diff --git a/src/Input/Types/Argument.php b/src/Input/Types/Argument.php index 4550781..52faec1 100644 --- a/src/Input/Types/Argument.php +++ b/src/Input/Types/Argument.php @@ -72,6 +72,6 @@ class Argument extends Input\AbstractInputType $second[$ii] = $secondaryLineLeadPadding.$second[$ii]; } - return $first.implode(PHP_EOL, $second); + return $first.implode($second, PHP_EOL); } } diff --git a/src/Input/Types/LongOption.php b/src/Input/Types/LongOption.php index 17d73de..5961768 100644 --- a/src/Input/Types/LongOption.php +++ b/src/Input/Types/LongOption.php @@ -84,6 +84,6 @@ class LongOption extends Input\AbstractInputType $second[$ii] = $secondaryLineLeadPadding.$second[$ii]; } - return $first.implode(PHP_EOL, $second); + return $first.implode($second, PHP_EOL); } }