From 4cdbfc414eba5fad86e422ec835f8cf598f92bf2 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:23:32 +0100 Subject: [PATCH 01/30] StringField implements Stringable --- .../Models/PublicationFieldValues/StringField.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php index cc0bceca112..80550499366 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php @@ -5,8 +5,9 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; use Hyde\Framework\Features\Publications\PublicationFieldTypes; +use Stringable; -final class StringField extends PublicationFieldValue +final class StringField extends PublicationFieldValue implements Stringable { public const TYPE = PublicationFieldTypes::String; @@ -14,4 +15,9 @@ protected static function parseInput(string $input): string { return $input; } + + public function __toString(): string + { + return $this->getValue(); + } } From b2bb3dc99d2648bb3dcac39e480a9c85aaf67dc8 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:24:07 +0100 Subject: [PATCH 02/30] Create Canonicable.php --- .../PublicationFieldValues/Contracts/Canonicable.php | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Contracts/Canonicable.php diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Contracts/Canonicable.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Contracts/Canonicable.php new file mode 100644 index 00000000000..f273e552bdc --- /dev/null +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Contracts/Canonicable.php @@ -0,0 +1,9 @@ + Date: Fri, 30 Dec 2022 22:32:09 +0100 Subject: [PATCH 03/30] Define interface Canonicable that extends Stringable --- .../PublicationFieldValues/Contracts/Canonicable.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Contracts/Canonicable.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Contracts/Canonicable.php index f273e552bdc..04a4e1316b0 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Contracts/Canonicable.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Contracts/Canonicable.php @@ -3,7 +3,10 @@ declare(strict_types=1); namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts; -interface Canonicable + +use Stringable; + +interface Canonicable extends Stringable { - // + public function getCanonicalValue(): string; } From 7586a94ccfca5cf23bf6946368fced5291ec9a13 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:32:32 +0100 Subject: [PATCH 04/30] Class StringField implements Canonicable instead of Stringable directly --- .../Publications/Models/PublicationFieldValues/StringField.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php index 80550499366..e7336614f8a 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php @@ -4,10 +4,11 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Stringable; -final class StringField extends PublicationFieldValue implements Stringable +final class StringField extends PublicationFieldValue implements Canonicable { public const TYPE = PublicationFieldTypes::String; From 7c69edbd3a7484c04580f1cb1175c08906ef4e5f Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:32:51 +0100 Subject: [PATCH 05/30] Create CanonicableTrait.php --- .../Models/PublicationFieldValues/CanonicableTrait.php | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php new file mode 100644 index 00000000000..b1a96781fb0 --- /dev/null +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php @@ -0,0 +1,10 @@ + Date: Fri, 30 Dec 2022 22:33:00 +0100 Subject: [PATCH 06/30] Use CanonicableTrait --- .../Models/PublicationFieldValues/StringField.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php index e7336614f8a..d8427534426 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php @@ -10,15 +10,12 @@ final class StringField extends PublicationFieldValue implements Canonicable { + use CanonicableTrait; + public const TYPE = PublicationFieldTypes::String; protected static function parseInput(string $input): string { return $input; } - - public function __toString(): string - { - return $this->getValue(); - } } From a119b30265c9515952e053dc09616afe5d2ca57e Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:33:41 +0100 Subject: [PATCH 07/30] Implement the trait methods --- .../Models/PublicationFieldValues/CanonicableTrait.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php index b1a96781fb0..2b31ea3b355 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php @@ -6,5 +6,13 @@ trait CanonicableTrait { - // + public function __toString(): string + { + return $this->getCanonicalValue(); + } + + public function getCanonicalValue(): string + { + return $this->value; + } } From ee16fcddd13035f5a92287d6c562ae832b09f8a3 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:38:39 +0100 Subject: [PATCH 08/30] Limit canonicable string length to 64 characters --- .../Models/PublicationFieldValues/CanonicableTrait.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php index 2b31ea3b355..84c4a2a0737 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php @@ -4,6 +4,8 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +use function substr; + trait CanonicableTrait { public function __toString(): string @@ -13,6 +15,6 @@ public function __toString(): string public function getCanonicalValue(): string { - return $this->value; + return substr($this->value, 0, 64); } } From a9642da516505ddc648824b64dc61dac3d4957a0 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:43:48 +0100 Subject: [PATCH 09/30] Throw exception if the canonical value is empty --- .../Models/PublicationFieldValues/CanonicableTrait.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php index 84c4a2a0737..9e24e46ff6d 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php @@ -4,6 +4,8 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +use RuntimeException; + use function substr; trait CanonicableTrait @@ -15,6 +17,6 @@ public function __toString(): string public function getCanonicalValue(): string { - return substr($this->value, 0, 64); + return substr($this->value, 0, 64) ?: throw new RuntimeException('Canonical value cannot be empty'); } } From 317a8c7506ace8a6f9a75563485673957670842f Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:44:46 +0100 Subject: [PATCH 10/30] Deprecate canonicable method --- .../Framework/Features/Publications/PublicationFieldTypes.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php index 4b439793dbb..7e58d6c9391 100644 --- a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php +++ b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php @@ -64,6 +64,8 @@ public static function getRules(self $type): array } /** + * @deprecated Use the Canonicable interface instead + * * The types that can be used for canonical fields (used to generate file names). * * @return \Hyde\Framework\Features\Publications\PublicationFieldTypes[] From c1ca25eb1e1316d569a330a5ea852e3ed203be36 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 30 Dec 2022 22:47:37 +0100 Subject: [PATCH 11/30] Update all canonicable types to implement the interface --- .../Models/PublicationFieldValues/DatetimeField.php | 5 ++++- .../Models/PublicationFieldValues/IntegerField.php | 5 ++++- .../Publications/Models/PublicationFieldValues/TextField.php | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/DatetimeField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/DatetimeField.php index 332e09472b9..7d1aaca8209 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/DatetimeField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/DatetimeField.php @@ -5,10 +5,13 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; use DateTime; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; -final class DatetimeField extends PublicationFieldValue +final class DatetimeField extends PublicationFieldValue implements Canonicable { + use CanonicableTrait; + public const TYPE = PublicationFieldTypes::Datetime; protected static function parseInput(string $input): DateTime diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/IntegerField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/IntegerField.php index e6f9cacec80..231210771be 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/IntegerField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/IntegerField.php @@ -4,10 +4,13 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; -final class IntegerField extends PublicationFieldValue +final class IntegerField extends PublicationFieldValue implements Canonicable { + use CanonicableTrait; + public const TYPE = PublicationFieldTypes::Integer; protected static function parseInput(string $input): int diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php index bfead2bed17..f79508c0a91 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php @@ -4,11 +4,14 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use function trim; -final class TextField extends PublicationFieldValue +final class TextField extends PublicationFieldValue implements Canonicable { + use CanonicableTrait; + public const TYPE = PublicationFieldTypes::Text; protected static function parseInput(string $input): string From 021c6919edc643b3c1141a4a010a2863dc666d61 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Fri, 30 Dec 2022 21:47:50 +0000 Subject: [PATCH 12/30] Apply fixes from StyleCI --- .../Models/PublicationFieldValues/CanonicableTrait.php | 1 - .../Publications/Models/PublicationFieldValues/StringField.php | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php index 9e24e46ff6d..2c06c5d9b25 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php @@ -5,7 +5,6 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; use RuntimeException; - use function substr; trait CanonicableTrait diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php index d8427534426..38b64a63cab 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php @@ -6,7 +6,6 @@ use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; -use Stringable; final class StringField extends PublicationFieldValue implements Canonicable { From 6a2d4e42e64146a9478e6706ce5cc557bccec909 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 10:43:29 +0100 Subject: [PATCH 13/30] Move trait into Concerns sub-namespace --- .../PublicationFieldValues/{ => Concerns}/CanonicableTrait.php | 3 ++- .../Models/PublicationFieldValues/DatetimeField.php | 1 + .../Models/PublicationFieldValues/IntegerField.php | 1 + .../Publications/Models/PublicationFieldValues/StringField.php | 1 + .../Publications/Models/PublicationFieldValues/TextField.php | 2 ++ 5 files changed, 7 insertions(+), 1 deletion(-) rename packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/{ => Concerns}/CanonicableTrait.php (94%) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTrait.php similarity index 94% rename from packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php rename to packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTrait.php index 2c06c5d9b25..35f279b9af6 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/CanonicableTrait.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTrait.php @@ -2,9 +2,10 @@ declare(strict_types=1); -namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns; use RuntimeException; + use function substr; trait CanonicableTrait diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/DatetimeField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/DatetimeField.php index 7d1aaca8209..241a2949285 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/DatetimeField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/DatetimeField.php @@ -5,6 +5,7 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; use DateTime; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns\CanonicableTrait; use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/IntegerField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/IntegerField.php index 231210771be..1dfa806f5c6 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/IntegerField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/IntegerField.php @@ -4,6 +4,7 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns\CanonicableTrait; use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php index 38b64a63cab..e45c2d21e54 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/StringField.php @@ -4,6 +4,7 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns\CanonicableTrait; use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php index f79508c0a91..c24f2191a40 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php @@ -4,8 +4,10 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns\CanonicableTrait; use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; + use function trim; final class TextField extends PublicationFieldValue implements Canonicable From 6c8a52b3885f17106e51be178afa779c76ff8af5 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Sat, 31 Dec 2022 09:43:58 +0000 Subject: [PATCH 14/30] Apply fixes from StyleCI --- .../Models/PublicationFieldValues/Concerns/CanonicableTrait.php | 1 - .../Publications/Models/PublicationFieldValues/TextField.php | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTrait.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTrait.php index 35f279b9af6..86b33d58cb9 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTrait.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTrait.php @@ -5,7 +5,6 @@ namespace Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns; use RuntimeException; - use function substr; trait CanonicableTrait diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php index c24f2191a40..e1fbf1003d1 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldValues/TextField.php @@ -7,7 +7,6 @@ use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns\CanonicableTrait; use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; - use function trim; final class TextField extends PublicationFieldValue implements Canonicable From cc445cccb008e5af66401c3750f63dcfbbb14263 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:09:57 +0100 Subject: [PATCH 15/30] Create CanonicableTraitTest.php --- .../Concerns/CanonicableTraitTest.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php diff --git a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php new file mode 100644 index 00000000000..59477a25d21 --- /dev/null +++ b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php @@ -0,0 +1,16 @@ + Date: Sat, 31 Dec 2022 11:10:09 +0100 Subject: [PATCH 16/30] Generate method stubs --- .../Concerns/CanonicableTraitTest.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php index 59477a25d21..7780533266d 100644 --- a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php +++ b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php @@ -12,5 +12,13 @@ */ class CanonicableTraitTest extends TestCase { - // + public function testGetCanonicalValue() + { + // + } + + public function test__toString() + { + // + } } From 5d37d89064035693b9916268d464c8c0d50f3bd6 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:11:29 +0100 Subject: [PATCH 17/30] Create a test class to test the trait --- .../Concerns/CanonicableTraitTest.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php index 7780533266d..6491ea47159 100644 --- a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php +++ b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php @@ -5,6 +5,8 @@ namespace Hyde\Framework\Testing\Features\Publications\Models\PublicationFieldValues\Concerns; use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns\CanonicableTrait; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\PublicationFieldValue; use Hyde\Testing\TestCase; /** @@ -22,3 +24,13 @@ public function test__toString() // } } + +class CanonicableTraitTestClass extends PublicationFieldValue implements Canonicable +{ + use CanonicableTrait; + + protected static function parseInput(string $input): string + { + return $input; + } +} From 127861d67933a0aece86a78d87fb0c820670f932 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:12:04 +0100 Subject: [PATCH 18/30] Reorder test methods to match subject --- .../PublicationFieldValues/Concerns/CanonicableTraitTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php index 6491ea47159..38ebb3aa8dd 100644 --- a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php +++ b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php @@ -14,12 +14,12 @@ */ class CanonicableTraitTest extends TestCase { - public function testGetCanonicalValue() + public function test__toString() { // } - public function test__toString() + public function testGetCanonicalValue() { // } From e38a449db7ada3bed34bb78a6a11a355054583b7 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:13:40 +0100 Subject: [PATCH 19/30] Implement the base test --- .../Concerns/CanonicableTraitTest.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php index 38ebb3aa8dd..793916e96c3 100644 --- a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php +++ b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php @@ -16,12 +16,16 @@ class CanonicableTraitTest extends TestCase { public function test__toString() { - // + $class = new CanonicableTraitTestClass('foo'); + + $this->assertSame('foo', (string) $class); } public function testGetCanonicalValue() { - // + $class = new CanonicableTraitTestClass('foo'); + + $this->assertSame('foo', $class->getCanonicalValue()); } } From 8591abb558bca91b35543aad2cb6a3e30b5e55ff Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:15:53 +0100 Subject: [PATCH 20/30] Add additional tests --- .../Concerns/CanonicableTraitTest.php | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php index 793916e96c3..a9f1a5b3c70 100644 --- a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php +++ b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php @@ -27,6 +27,29 @@ public function testGetCanonicalValue() $this->assertSame('foo', $class->getCanonicalValue()); } + + public function test__toStringReturnsGetCanonicalValue() + { + $class = new CanonicableTraitTestClass('foo'); + + $this->assertSame($class->getCanonicalValue(), $class->__toString()); + } + + public function testGetCanonicalValueTruncatesValuesLongerThan64Characters() + { + $class = new CanonicableTraitTestClass(str_repeat('a', 65)); + + $this->assertSame(str_repeat('a', 64), $class->getCanonicalValue()); + $this->assertSame(64, strlen($class->getCanonicalValue())); + } + + public function testCanonicableValueCannotBeEmpty() + { + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessage('Canonical value cannot be empty'); + + new CanonicableTraitTestClass(''); + } } class CanonicableTraitTestClass extends PublicationFieldValue implements Canonicable From 058be0a458e9bea5b17c4ed0474cccdb726f87eb Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:18:21 +0100 Subject: [PATCH 21/30] Fix test not calling the subject method --- .../PublicationFieldValues/Concerns/CanonicableTraitTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php index a9f1a5b3c70..01509699ffc 100644 --- a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php +++ b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php @@ -45,10 +45,12 @@ public function testGetCanonicalValueTruncatesValuesLongerThan64Characters() public function testCanonicableValueCannotBeEmpty() { + $class = new CanonicableTraitTestClass(''); + $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('Canonical value cannot be empty'); - new CanonicableTraitTestClass(''); + $class->getCanonicalValue(); } } From 2938d58f9f258a4772ca9b65f5f321376f84d570 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:18:50 +0100 Subject: [PATCH 22/30] Replace qualifier with an import --- .../PublicationFieldValues/Concerns/CanonicableTraitTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php index 01509699ffc..3686da740c0 100644 --- a/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php +++ b/packages/framework/tests/Features/Publications/Models/PublicationFieldValues/Concerns/CanonicableTraitTest.php @@ -8,6 +8,7 @@ use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\PublicationFieldValue; use Hyde\Testing\TestCase; +use RuntimeException; /** * @covers \Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Concerns\CanonicableTrait @@ -47,7 +48,7 @@ public function testCanonicableValueCannotBeEmpty() { $class = new CanonicableTraitTestClass(''); - $this->expectException(\RuntimeException::class); + $this->expectException(RuntimeException::class); $this->expectExceptionMessage('Canonical value cannot be empty'); $class->getCanonicalValue(); From 6ce2042294d7aa47b7faad87477c64c4d664c1bf Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:50:49 +0100 Subject: [PATCH 23/30] Remove test for deprecated method --- .../tests/Feature/PublicationFieldTypesEnumTest.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/framework/tests/Feature/PublicationFieldTypesEnumTest.php b/packages/framework/tests/Feature/PublicationFieldTypesEnumTest.php index 29cbbbb822a..299d94eb4e9 100644 --- a/packages/framework/tests/Feature/PublicationFieldTypesEnumTest.php +++ b/packages/framework/tests/Feature/PublicationFieldTypesEnumTest.php @@ -79,14 +79,4 @@ public function testNamesReturnsArrayOfCaseNames() 9 => 'Tag', ], PublicationFieldTypes::names()); } - - public function testCanonicable() - { - $this->assertSame([ - PublicationFieldTypes::String, - PublicationFieldTypes::Integer, - PublicationFieldTypes::Datetime, - PublicationFieldTypes::Text, - ], PublicationFieldTypes::canonicable()); - } } From 467199cf50af1b8cb1b76f63c8c995a2980c80bf Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:52:43 +0100 Subject: [PATCH 24/30] Revert "Inline fieldClass helper method" This reverts commit 634ab32c5faaf9ad5810616615e5d1c6cc07945f. --- .../Features/Publications/PublicationFieldTypes.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php index 7e58d6c9391..8b76a88ec94 100644 --- a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php +++ b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php @@ -79,4 +79,9 @@ public static function canonicable(): array self::Text, ]; } + + public function fieldClass(): string + { + return "Hyde\\Framework\\Features\\Publications\\Models\\PublicationFieldValues\\{$this->name}Field"; + } } From 97ad6af01f69cc8a1d55394f1cad5e3dd9d95f93 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:55:44 +0100 Subject: [PATCH 25/30] Merge fieldClass helper method changes --- .../src/Console/Commands/MakePublicationCommand.php | 4 +--- .../Features/Publications/PublicationFieldTypes.php | 7 ++++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/framework/src/Console/Commands/MakePublicationCommand.php b/packages/framework/src/Console/Commands/MakePublicationCommand.php index 547b652e576..cbbc7dbb2e6 100644 --- a/packages/framework/src/Console/Commands/MakePublicationCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationCommand.php @@ -188,9 +188,7 @@ protected function captureOtherFieldInput(PublicationField $field): ?Publication return null; } - $namespace = Str::beforeLast(PublicationFieldValue::class, '\\'); - $className = "$namespace\\{$field->type->name}Field"; - + $className = $field->type->fieldClass(); return new $className($selection); } diff --git a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php index 8b76a88ec94..416bb81d4b5 100644 --- a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php +++ b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php @@ -4,8 +4,10 @@ namespace Hyde\Framework\Features\Publications; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\PublicationFieldValue; use Hyde\Framework\Features\Publications\Validation\BooleanRule; use Illuminate\Support\Collection; +use Illuminate\Support\Str; /** * The supported field types for publication types. @@ -82,6 +84,9 @@ public static function canonicable(): array public function fieldClass(): string { - return "Hyde\\Framework\\Features\\Publications\\Models\\PublicationFieldValues\\{$this->name}Field"; + $namespace = Str::beforeLast(PublicationFieldValue::class, '\\'); + $className = "$namespace\\{$this->name}Field"; + + return $className; } } From 72e317f21e3b650813755701915c5bd5822669c9 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 11:58:22 +0100 Subject: [PATCH 26/30] Check instanceof instead of in_array --- .../src/Console/Commands/MakePublicationTypeCommand.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php b/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php index cf0f4fa2e95..cc04c666dcf 100644 --- a/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php @@ -4,6 +4,7 @@ namespace Hyde\Console\Commands; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use function array_keys; use Hyde\Console\Concerns\ValidatingCommand; use Hyde\Framework\Actions\CreatesNewPublicationType; @@ -130,7 +131,7 @@ protected function getFieldType(): PublicationFieldTypes protected function getCanonicalField(): PublicationField { $selectableFields = $this->fields->reject(function (PublicationField $field): bool { - return in_array($field, PublicationFieldTypes::canonicable()); + return $field->type->fieldClass() instanceof Canonicable; }); if ($this->option('use-defaults')) { From 72a9ce3bbc30d31d7311ac12dffc8ac232c1fcaf Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 12:01:04 +0100 Subject: [PATCH 27/30] Use is_a instead of instanceof --- .../src/Console/Commands/MakePublicationTypeCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php b/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php index cc04c666dcf..bdd903e6dab 100644 --- a/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php @@ -131,7 +131,7 @@ protected function getFieldType(): PublicationFieldTypes protected function getCanonicalField(): PublicationField { $selectableFields = $this->fields->reject(function (PublicationField $field): bool { - return $field->type->fieldClass() instanceof Canonicable; + return ! is_a($field->type->fieldClass(), Canonicable::class, true); }); if ($this->option('use-defaults')) { From c12e327a49bcbfa4970b3d3dfdda06e7df9fa757 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 12:01:46 +0100 Subject: [PATCH 28/30] Remove unused deprecated canonicable method --- .../Publications/PublicationFieldTypes.php | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php index 416bb81d4b5..53bff529a30 100644 --- a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php +++ b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php @@ -65,23 +65,6 @@ public static function getRules(self $type): array }; } - /** - * @deprecated Use the Canonicable interface instead - * - * The types that can be used for canonical fields (used to generate file names). - * - * @return \Hyde\Framework\Features\Publications\PublicationFieldTypes[] - */ - public static function canonicable(): array - { - return [ - self::String, - self::Integer, - self::Datetime, - self::Text, - ]; - } - public function fieldClass(): string { $namespace = Str::beforeLast(PublicationFieldValue::class, '\\'); From 603c858410d9feccf1a961425fc16d6133e1c188 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sat, 31 Dec 2022 12:02:21 +0100 Subject: [PATCH 29/30] Inline local variable --- .../Framework/Features/Publications/PublicationFieldTypes.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php index 53bff529a30..c07b032cc75 100644 --- a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php +++ b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php @@ -68,8 +68,6 @@ public static function getRules(self $type): array public function fieldClass(): string { $namespace = Str::beforeLast(PublicationFieldValue::class, '\\'); - $className = "$namespace\\{$this->name}Field"; - - return $className; + return "$namespace\\{$this->name}Field"; } } From e0ba5f078beefc0238266aa333b24c958c461d5e Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Sat, 31 Dec 2022 11:04:06 +0000 Subject: [PATCH 30/30] Apply fixes from StyleCI --- .../framework/src/Console/Commands/MakePublicationCommand.php | 2 +- .../src/Console/Commands/MakePublicationTypeCommand.php | 3 +-- .../Framework/Features/Publications/PublicationFieldTypes.php | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/framework/src/Console/Commands/MakePublicationCommand.php b/packages/framework/src/Console/Commands/MakePublicationCommand.php index cbbc7dbb2e6..cffb11b1f2e 100644 --- a/packages/framework/src/Console/Commands/MakePublicationCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationCommand.php @@ -18,7 +18,6 @@ use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Framework\Features\Publications\PublicationService; use Illuminate\Support\Collection; -use Illuminate\Support\Str; use function implode; use function in_array; use InvalidArgumentException; @@ -189,6 +188,7 @@ protected function captureOtherFieldInput(PublicationField $field): ?Publication } $className = $field->type->fieldClass(); + return new $className($selection); } diff --git a/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php b/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php index bdd903e6dab..aede583902b 100644 --- a/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationTypeCommand.php @@ -4,16 +4,15 @@ namespace Hyde\Console\Commands; -use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use function array_keys; use Hyde\Console\Concerns\ValidatingCommand; use Hyde\Framework\Actions\CreatesNewPublicationType; use Hyde\Framework\Features\Publications\Models\PublicationField; +use Hyde\Framework\Features\Publications\Models\PublicationFieldValues\Contracts\Canonicable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Hyde; use Illuminate\Support\Collection; use Illuminate\Support\Str; -use function in_array; use InvalidArgumentException; use function is_dir; use function is_file; diff --git a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php index c07b032cc75..3d1e79732db 100644 --- a/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php +++ b/packages/framework/src/Framework/Features/Publications/PublicationFieldTypes.php @@ -68,6 +68,7 @@ public static function getRules(self $type): array public function fieldClass(): string { $namespace = Str::beforeLast(PublicationFieldValue::class, '\\'); + return "$namespace\\{$this->name}Field"; } }