From 8b76049c2556e9f30377826a1688afaf2fa723d5 Mon Sep 17 00:00:00 2001 From: Oliver Eglseder Date: Tue, 11 Feb 2020 23:29:46 +0100 Subject: [PATCH] [FEATURE] Add FixedPrefix, ApplyOnArrayValueByKey and more structure --- README.md | 14 +++--- src/Applicable/ApplyOnArrayValueByKey.php | 44 +++++++++++++++++++ .../ApplyOnArrayValueRecursively.php} | 6 ++- src/{ => Applicable}/ReversiblePipe.php | 4 +- .../Encoding/Base64Encoding.php | 2 +- src/{ => Operation}/Encoding/JsonEncoding.php | 2 +- src/{ => Operation}/Encoding/RawUrlEncode.php | 2 +- .../Encoding/SerializationEncoding.php | 2 +- src/{ => Operation}/Encoding/UrlEncode.php | 2 +- src/Operation/Fixed/FixedPrefix.php | 33 ++++++++++++++ .../Mapping/ArrayKeyMapping.php | 3 +- .../Transform/ImplodeTransform.php | 2 +- 12 files changed, 98 insertions(+), 18 deletions(-) create mode 100644 src/Applicable/ApplyOnArrayValueByKey.php rename src/{RecursiveReversible.php => Applicable/ApplyOnArrayValueRecursively.php} (85%) rename src/{ => Applicable}/ReversiblePipe.php (87%) rename src/{ => Operation}/Encoding/Base64Encoding.php (94%) rename src/{ => Operation}/Encoding/JsonEncoding.php (96%) rename src/{ => Operation}/Encoding/RawUrlEncode.php (91%) rename src/{ => Operation}/Encoding/SerializationEncoding.php (94%) rename src/{ => Operation}/Encoding/UrlEncode.php (91%) create mode 100644 src/Operation/Fixed/FixedPrefix.php rename src/{ => Operation}/Mapping/ArrayKeyMapping.php (93%) rename src/{ => Operation}/Transform/ImplodeTransform.php (95%) diff --git a/README.md b/README.md index 14f80dd..684cac9 100644 --- a/README.md +++ b/README.md @@ -36,11 +36,11 @@ $restoredInput = $encoding->reverse($output); ```php // Shared Library - function getPipe(): \CoStack\Reversible\ReversiblePipe { - $pipe = new \CoStack\Reversible\ReversiblePipe(); - $pipe->enqueue(new \CoStack\Reversible\Mapping\ArrayKeyMapping(['key1', 'key2', 'payload'])); - $pipe->enqueue(new \CoStack\Reversible\RecursiveReversible(new \CoStack\Reversible\Encoding\Base64Encoding())); - $pipe->enqueue(new \CoStack\Reversible\Transform\ImplodeTransform()); + function getPipe(): \CoStack\Reversible\Applicable\ReversiblePipe { + $pipe = new \CoStack\Reversible\Applicable\ReversiblePipe(); + $pipe->enqueue(new \CoStack\Reversible\Operation\Mapping\ArrayKeyMapping(['key1', 'key2', 'payload'])); + $pipe->enqueue(new \CoStack\Reversible\Applicable\ApplyOnArrayValueRecursively(new \CoStack\Reversible\Encoding\Base64Encoding())); + $pipe->enqueue(new \CoStack\Reversible\Operation\Transform\ImplodeTransform()); return $pipe; } @@ -65,8 +65,8 @@ Please notice that `ImplodeTransform` is lossy because `explode(',', implode(',' ```php // Shared Library -function getPipe(): \CoStack\Reversible\ReversiblePipe { - $pipe = new \CoStack\Reversible\ReversiblePipe(); +function getPipe(): \CoStack\Reversible\Applicable\ReversiblePipe { + $pipe = new \CoStack\Reversible\Applicable\ReversiblePipe(); $pipe->enqueue(new \CoStack\Reversible\Encoding\SerializationEncoding()); $pipe->enqueue(new \CoStack\Reversible\Encoding\UrlEncode()); return $pipe; diff --git a/src/Applicable/ApplyOnArrayValueByKey.php b/src/Applicable/ApplyOnArrayValueByKey.php new file mode 100644 index 0000000..e787984 --- /dev/null +++ b/src/Applicable/ApplyOnArrayValueByKey.php @@ -0,0 +1,44 @@ +reversible = $reversible; + $this->keys = $keys; + } + + public function getExecutionClosure(): Closure + { + return function(array $value): array { + foreach ($this->keys as $key) { + if (!empty($value[$key])) { + $value[$key] = $this->reversible->execute($value[$key]); + } + } + return $value; + }; + } + + public function getReversionClosure(): Closure + { + return function(array $value): array { + foreach ($this->keys as $key) { + if (!empty($value[$key])) { + $value[$key] = $this->reversible->reverse($value[$key]); + } + } + return $value; + }; + } + +} diff --git a/src/RecursiveReversible.php b/src/Applicable/ApplyOnArrayValueRecursively.php similarity index 85% rename from src/RecursiveReversible.php rename to src/Applicable/ApplyOnArrayValueRecursively.php index 6fe5451..98ffc87 100644 --- a/src/RecursiveReversible.php +++ b/src/Applicable/ApplyOnArrayValueRecursively.php @@ -1,12 +1,14 @@ prefix = $prefix; + } + + public function getExecutionClosure(): Closure + { + return function(string $value): string { + return $this->prefix . $value; + }; + } + + public function getReversionClosure(): Closure + { + return function(string $value): string { + return substr($value, strlen($this->prefix)); + }; + } + +} diff --git a/src/Mapping/ArrayKeyMapping.php b/src/Operation/Mapping/ArrayKeyMapping.php similarity index 93% rename from src/Mapping/ArrayKeyMapping.php rename to src/Operation/Mapping/ArrayKeyMapping.php index 38b22ef..ef2191a 100644 --- a/src/Mapping/ArrayKeyMapping.php +++ b/src/Operation/Mapping/ArrayKeyMapping.php @@ -1,6 +1,6 @@