diff --git a/src/Input.php b/src/Input.php index 3ed042c..bcb2c7a 100644 --- a/src/Input.php +++ b/src/Input.php @@ -3,6 +3,7 @@ use ArrayAccess; use Countable; +use Gt\Input\Trigger\NeverTrigger; use Gt\Json\JsonDecodeException; use Gt\Json\JsonObject; use Gt\Json\JsonObjectBuilder; @@ -243,7 +244,7 @@ public function select(string...$keys):Trigger { } } - return $this->newTrigger("with", ...$keys); + return $this->newTrigger("select", ...$keys); } /** @deprecated Use select() instead to avoid ambiguity with immutable `with` functions */ @@ -251,6 +252,24 @@ public function with(string...$keys):Trigger { return $this->select(...$keys); } + /** @SuppressWarnings(PHPMD.UnusedLocalVariable) */ + public function selectPrefix(string $prefix):Trigger { + $keys = []; + + foreach($this->parameters as $key => $param) { + if(str_starts_with($key, $prefix)) { + array_push($keys, $key); + } + } + + if($keys) { + return $this->when(...$keys); + } + else { + return new NeverTrigger($this); + } + } + /** * Return a Trigger that will pass all keys apart from the provided * keys to its callback. diff --git a/src/Trigger/NeverTrigger.php b/src/Trigger/NeverTrigger.php new file mode 100644 index 0000000..742b319 --- /dev/null +++ b/src/Trigger/NeverTrigger.php @@ -0,0 +1,18 @@ +getInt("id")); } + public function testSelectPrefix_noMatch():void { + $sut = new Input(["id" => 123]); + $trigger = $sut->selectPrefix("io_"); + + $triggered = false; + $trigger->call(function(...$args)use(&$triggered) { + $triggered = true; + }); + $trigger->fire(); + self::assertFalse($triggered); + } + + public function testSelectPrefix_match():void { + $sut = new Input(["id" => 123, "io_database" => "connect"]); + $trigger = $sut->selectPrefix("io_"); + + $triggered = false; + $trigger->call(function(...$args)use(&$triggered) { + $triggered = true; + }); + $trigger->fire(); + self::assertTrue($triggered); + } + public static function dataRandomGetPost():array { $data = [];