diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b4fcad..61a5be8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,6 +61,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Add `getTime()` method to `Provider\TimeProviderInterface`. * Change `Uuid::getFields()` to return an instance of `Fields\FieldsInterface`. Previously, it returned an array of integer values (on 64-bit systems only). +* Change the first required constructor parameter for `Uuid` from + `array $fields` to `Rfc4122\FieldsInterface $fields`. * Introduce `Converter\TimeConverterInterface $timeConverter` as fourth required constructor parameter for `Uuid` and second required constructor parameter for `Builder\DefaultUuidBuilder`. diff --git a/src/Builder/DefaultUuidBuilder.php b/src/Builder/DefaultUuidBuilder.php index dddbec1..086c01e 100644 --- a/src/Builder/DefaultUuidBuilder.php +++ b/src/Builder/DefaultUuidBuilder.php @@ -18,6 +18,7 @@ use Ramsey\Uuid\Codec\CodecInterface; use Ramsey\Uuid\Converter\NumberConverterInterface; use Ramsey\Uuid\Converter\TimeConverterInterface; use Ramsey\Uuid\Math\CalculatorInterface; +use Ramsey\Uuid\Rfc4122\Fields as Rfc4122Fields; use Ramsey\Uuid\Uuid; use Ramsey\Uuid\UuidInterface; @@ -73,6 +74,8 @@ class DefaultUuidBuilder implements UuidBuilderInterface */ public function build(CodecInterface $codec, array $fields): UuidInterface { + $fields = new Rfc4122Fields((string) hex2bin(implode('', $fields))); + return new Uuid( $fields, $this->numberConverter, diff --git a/src/Builder/DegradedUuidBuilder.php b/src/Builder/DegradedUuidBuilder.php index 212752f..907ab4a 100644 --- a/src/Builder/DegradedUuidBuilder.php +++ b/src/Builder/DegradedUuidBuilder.php @@ -21,6 +21,7 @@ use Ramsey\Uuid\Converter\TimeConverterInterface; use Ramsey\Uuid\DegradedUuid; use Ramsey\Uuid\Math\BrickMathCalculator; use Ramsey\Uuid\Math\CalculatorInterface; +use Ramsey\Uuid\Rfc4122\Fields as Rfc4122Fields; use Ramsey\Uuid\UuidInterface; /** @@ -68,13 +69,14 @@ class DegradedUuidBuilder implements UuidBuilderInterface * Builds and returns a DegradedUuid * * @param CodecInterface $codec The codec to use for building this DegradedUuid instance - * @param string[] $fields An array of fields from which to construct a DegradedUuid instance; - * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. + * @param string[] $fields An array of fields from which to construct a DegradedUuid instance * * @return DegradedUuid The DegradedUuidBuild returns an instance of Ramsey\Uuid\DegradedUuid */ public function build(CodecInterface $codec, array $fields): UuidInterface { + $fields = new Rfc4122Fields((string) hex2bin(implode('', $fields))); + return new DegradedUuid( $fields, $this->numberConverter, diff --git a/src/Builder/UuidBuilderInterface.php b/src/Builder/UuidBuilderInterface.php index 06df7ec..2aff20a 100644 --- a/src/Builder/UuidBuilderInterface.php +++ b/src/Builder/UuidBuilderInterface.php @@ -28,8 +28,7 @@ interface UuidBuilderInterface * Builds and returns a UuidInterface * * @param CodecInterface $codec The codec to use for building this UuidInterface instance - * @param string[] $fields An array of fields from which to construct a UuidInterface instance; - * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. + * @param string[] $fields An array of fields from which to construct a UuidInterface instance * * @return UuidInterface Implementations may choose to return more specific * instances of UUIDs that implement UuidInterface diff --git a/src/Guid/Guid.php b/src/Guid/Guid.php index 093f978..2107e67 100644 --- a/src/Guid/Guid.php +++ b/src/Guid/Guid.php @@ -37,20 +37,13 @@ use Ramsey\Uuid\UuidInterface; */ class Guid extends Uuid implements UuidInterface { - /** - * @param string[] $fields - */ public function __construct( - array $fields, + Fields $fields, NumberConverterInterface $numberConverter, CodecInterface $codec, TimeConverterInterface $timeConverter, CalculatorInterface $calculator ) { - $this->fields = new Fields((string) hex2bin(implode('', $fields))); - $this->codec = $codec; - $this->numberConverter = $numberConverter; - $this->timeConverter = $timeConverter; - $this->calculator = $calculator; + parent::__construct($fields, $numberConverter, $codec, $timeConverter, $calculator); } } diff --git a/src/Guid/GuidBuilder.php b/src/Guid/GuidBuilder.php index 4fc5e31..5451f98 100644 --- a/src/Guid/GuidBuilder.php +++ b/src/Guid/GuidBuilder.php @@ -71,6 +71,8 @@ class GuidBuilder implements UuidBuilderInterface */ public function build(CodecInterface $codec, array $fields): UuidInterface { + $fields = new Fields((string) hex2bin(implode('', $fields))); + return new Guid( $fields, $this->numberConverter, diff --git a/src/Nonstandard/Uuid.php b/src/Nonstandard/Uuid.php index 616d4cd..68eb0a0 100644 --- a/src/Nonstandard/Uuid.php +++ b/src/Nonstandard/Uuid.php @@ -28,20 +28,13 @@ use Ramsey\Uuid\UuidInterface; */ class Uuid extends Rfc4122Uuid implements UuidInterface { - /** - * @param string[] $fields - */ public function __construct( - array $fields, + Fields $fields, NumberConverterInterface $numberConverter, CodecInterface $codec, TimeConverterInterface $timeConverter, CalculatorInterface $calculator ) { - $this->fields = new Fields((string) hex2bin(implode('', $fields))); - $this->codec = $codec; - $this->numberConverter = $numberConverter; - $this->timeConverter = $timeConverter; - $this->calculator = $calculator; + parent::__construct($fields, $numberConverter, $codec, $timeConverter, $calculator); } } diff --git a/src/Nonstandard/UuidBuilder.php b/src/Nonstandard/UuidBuilder.php index 961940c..b351ea1 100644 --- a/src/Nonstandard/UuidBuilder.php +++ b/src/Nonstandard/UuidBuilder.php @@ -72,6 +72,8 @@ class UuidBuilder implements UuidBuilderInterface */ public function build(CodecInterface $codec, array $fields): UuidInterface { + $fields = new Fields((string) hex2bin(implode('', $fields))); + return new Uuid( $fields, $this->numberConverter, diff --git a/src/Uuid.php b/src/Uuid.php index 1c32a26..7d8db73 100644 --- a/src/Uuid.php +++ b/src/Uuid.php @@ -23,7 +23,6 @@ use Ramsey\Uuid\Exception\DateTimeException; use Ramsey\Uuid\Exception\UnsupportedOperationException; use Ramsey\Uuid\Fields\FieldsInterface; use Ramsey\Uuid\Math\CalculatorInterface; -use Ramsey\Uuid\Rfc4122\Fields; use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; /** @@ -192,8 +191,7 @@ class Uuid implements UuidInterface * $namespaceSha1Uuid = Uuid::uuid5(Uuid::NAMESPACE_URL, 'http://php.net/'); * ``` * - * @param string[] $fields An array of fields from which to construct a UUID; - * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure + * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID * @param NumberConverterInterface $numberConverter The number converter to use * for converting hex values to/from integers * @param CodecInterface $codec The codec to use when encoding or decoding @@ -204,13 +202,13 @@ class Uuid implements UuidInterface * mathematical operations on UUIDs */ public function __construct( - array $fields, + Rfc4122FieldsInterface $fields, NumberConverterInterface $numberConverter, CodecInterface $codec, TimeConverterInterface $timeConverter, CalculatorInterface $calculator ) { - $this->fields = new Fields((string) hex2bin(implode('', $fields))); + $this->fields = $fields; $this->codec = $codec; $this->numberConverter = $numberConverter; $this->timeConverter = $timeConverter; diff --git a/tests/Codec/GuidStringCodecTest.php b/tests/Codec/GuidStringCodecTest.php index df4bab0..f80a759 100644 --- a/tests/Codec/GuidStringCodecTest.php +++ b/tests/Codec/GuidStringCodecTest.php @@ -68,17 +68,9 @@ class GuidStringCodecTest extends TestCase public function testEncodeBinary(): void { - $expectedBytes = hex2bin('785634123412cd4babef1234abcd4321'); - - $fields = [ - 'time_low' => '78563412', - 'time_mid' => '3412', - 'time_hi_and_version' => 'cd4b', - 'clock_seq_hi_and_reserved' => 'ab', - 'clock_seq_low' => 'ef', - 'node' => '1234abcd4321', - ]; + $expectedBytes = (string) hex2bin('785634123412cd4babef1234abcd4321'); + $fields = new Fields($expectedBytes); $codec = new GuidStringCodec($this->builder); $numberConverter = Mockery::mock(NumberConverterInterface::class); $timeConverter = Mockery::mock(TimeConverterInterface::class);