diff --git a/CHANGELOG.md b/CHANGELOG.md index 28f03b1..f836e5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -6.0.0 (201?-??-??) +6.0.0 (2016-??-??) ------------------ ### BC breaks @@ -13,6 +13,8 @@ * `stubbles\console\Executor::execute()` now takes a callable as optional second argument which receives each single line * all methods now have an optional parameter `$redirect` with which output redirection can be influenced * added `stubbles\console\Executor::outputOf()` + * moved `stubbles\input\console\ConsoleRequest` from stubbles/input to `stubbles\console\input\ConsoleRequest` + * moved `stubbles\input\console\BaseConsoleRequest` from stubbles/input to `stubbles\console\input\BaseConsoleRequest` 5.1.0 (2015-08-03) diff --git a/src/main/php/input/BaseConsoleRequest.php b/src/main/php/input/BaseConsoleRequest.php new file mode 100644 index 0000000..01fdccc --- /dev/null +++ b/src/main/php/input/BaseConsoleRequest.php @@ -0,0 +1,120 @@ +env = new Params($env); + } + + /** + * creates an instance from raw data + * + * Will use $_SERVER['argv'] for params and $_SERVER for env. + * + * @api + * @return \stubbles\input\console\ConsoleRequest + */ + public static function fromRawSource() + { + return new self($_SERVER['argv'], $_SERVER); + } + + /** + * returns the request method + * + * @return string + */ + public function method() + { + return 'cli'; + } + + /** + * return a list of all environment names registered in this request + * + * @return string[] + */ + public function envNames() + { + return $this->env->names(); + } + + /** + * returns list of errors for environment parameters + * + * @return \stubbles\input\ParamErrors + */ + public function envErrors() + { + return $this->env->errors(); + } + + /** + * checks whether a request param is set + * + * @param string $envName + * @return bool + */ + public function hasEnv($envName) + { + return $this->env->contain($envName); + } + + /** + * checks whether a request value from parameters is valid or not + * + * @param string $envName name of environment value + * @return \stubbles\input\ValueValidator + */ + public function validateEnv($envName) + { + return new ValueValidator($this->env->value($envName)); + } + + /** + * returns request value from params for validation + * + * @param string $envName name of environment value + * @return \stubbles\input\ValueReader + */ + public function readEnv($envName) + { + return new ValueReader( + $this->env->errors(), + $this->env->get($envName) + ); + } +} diff --git a/src/main/php/input/ConsoleRequest.php b/src/main/php/input/ConsoleRequest.php new file mode 100644 index 0000000..3a3c23d --- /dev/null +++ b/src/main/php/input/ConsoleRequest.php @@ -0,0 +1,57 @@ +serverBackup = $_SERVER; + $this->baseConsoleRequest = new BaseConsoleRequest( + ['foo' => 'bar', 'roland' => 'TB-303'], + ['SCRIPT_NAME' => 'example.php', + 'PHP_SELF' => 'example.php' + ] + ); + } + + /** + * clean up test environment + */ + public function tearDown() + { + $_SERVER = $this->serverBackup; + } + + /** + * @test + */ + public function requestMethodIsAlwaysCli() + { + assert($this->baseConsoleRequest->method(), equals('cli')); + } + + /** + * @test + */ + public function returnsListOfParamNames() + { + assert($this->baseConsoleRequest->paramNames(), equals(['foo', 'roland'])); + } + + /** + * @test + */ + public function createFromRawSourceUsesServerArgsForParams() + { + $_SERVER['argv'] = ['foo' => 'bar', 'roland' => 'TB-303']; + assert( + BaseConsoleRequest::fromRawSource()->paramNames(), + equals(['foo', 'roland']) + ); + } + + /** + * @test + */ + public function returnsListOfEnvNames() + { + assert( + $this->baseConsoleRequest->envNames(), + equals(['SCRIPT_NAME', 'PHP_SELF']) + ); + } + + /** + * @test + */ + public function returnsEnvErrors() + { + assert( + $this->baseConsoleRequest->envErrors(), + isInstanceOf(ParamErrors::class) + ); + } + + /** + * @test + */ + public function returnsFalseOnCheckForNonExistingEnv() + { + assertFalse($this->baseConsoleRequest->hasEnv('baz')); + } + + /** + * @test + */ + public function returnsTrueOnCheckForExistingEnv() + { + assertTrue($this->baseConsoleRequest->hasEnv('SCRIPT_NAME')); + } + + /** + * @test + */ + public function validateEnvReturnsValueValidator() + { + assert( + $this->baseConsoleRequest->validateEnv('SCRIPT_NAME'), + isInstanceOf(ValueValidator::class) + ); + } + + /** + * @test + */ + public function validateEnvReturnsValueValidatorForNonExistingParam() + { + assert( + $this->baseConsoleRequest->validateEnv('baz'), + isInstanceOf(ValueValidator::class) + ); + } + + /** + * @test + */ + public function readEnvReturnsValueReader() + { + assert( + $this->baseConsoleRequest->readEnv('SCRIPT_NAME'), + isInstanceOf(ValueReader::class) + ); + } + + /** + * @test + */ + public function readEnvReturnsValueReaderForNonExistingParam() + { + assert( + $this->baseConsoleRequest->readEnv('baz'), + isInstanceOf(ValueReader::class) + ); + } + + /** + * @test + */ + public function createFromRawSourceUsesServerForEnv() + { + $_SERVER = ['argv' => ['foo' => 'bar', 'roland' => 'TB-303'], + 'SCRIPT_NAME' => 'example.php' + ]; + assert( + BaseConsoleRequest::fromRawSource()->envNames(), + equals(['argv', 'SCRIPT_NAME']) + ); + } +} diff --git a/src/test/php/input/RequestParserTest.php b/src/test/php/input/RequestParserTest.php index 3d0be3e..613a15c 100755 --- a/src/test/php/input/RequestParserTest.php +++ b/src/test/php/input/RequestParserTest.php @@ -12,7 +12,6 @@ use org\stubbles\console\test\BrokeredUserInput; use stubbles\input\ValueReader; use stubbles\input\broker\RequestBroker; -use stubbles\input\console\ConsoleRequest; use stubbles\input\errors\ParamErrors; use stubbles\input\errors\messages\ParamErrorMessages; diff --git a/src/test/php/ioc/ArgumentParserTest.php b/src/test/php/ioc/ArgumentParserTest.php index 5ddb408..abfc781 100755 --- a/src/test/php/ioc/ArgumentParserTest.php +++ b/src/test/php/ioc/ArgumentParserTest.php @@ -10,10 +10,10 @@ namespace stubbles\console\ioc; use bovigo\callmap\NewInstance; use org\stubbles\console\test\BrokeredUserInput; +use stubbles\console\input\BaseConsoleRequest; +use stubbles\console\input\ConsoleRequest; use stubbles\input\Request; use stubbles\input\broker\param\ParamBroker; -use stubbles\input\console\BaseConsoleRequest; -use stubbles\input\console\ConsoleRequest; use stubbles\ioc\Binder; use stubbles\ioc\Injector; use stubbles\streams\InputStream;