Commit Graph

54 Commits

Author SHA1 Message Date
Ben Ramsey b941aa1a9a Prepare test suite for PHP 8 2020-10-29 18:24:14 -05:00
Marco Pivetta b805572537 Ensure that Uuid::uuidX() generators produce instances equivalent to Uuid::fromString() and Uuid::fromBytes()
With this change, `Uuid::uuid1()`, `Uuid::uuid2()` and so forth now produce a `LazyUuidFromString` instance, which
is both more memory efficient and comparable to `Uuid::fromString()` instances in other tools, such as within
PHPUnit's `Assertion::assertEqual()`, which would reject any two objects not matching each other's types.

Before this patch, `Assertion::assertEquals(Uuid::uuid5(...), Uuid::fromString(...))` would always fail due to
different subtypes produced by the two factory methods.
2020-07-09 13:57:30 +02:00
Marco Pivetta 15a5d4f5e1 Propagating @psalm-pure to factories and builders used internally to purely assemble a UuidInterface
Ref: https://github.com/ramsey/uuid/pull/300#issuecomment-601329450
2020-03-23 11:25:22 +01:00
Ben Ramsey 1f1329433f Add getDateTime() to UuidV2 2020-03-02 22:56:56 -06:00
Ben Ramsey ab3c89fb8e Change the $node parameter from mixed to ?Hexadecimal 2020-02-24 13:44:03 -06:00
Ben Ramsey 614fc69b45 Add use statements for PHP functions 2020-02-23 16:13:31 -06:00
Ben Ramsey cc2bf6f8ef Support version 6 UUIDs
See the following:

* https://github.com/uuid6/uuid6-ietf-draft
* http://gh.peabody.io/uuidv6/
2020-02-22 22:41:15 -06:00
Ben Ramsey f42afcecbb Rename Type\IntegerValue to Type\Integer
Rename `Type\IntegerValue` to `Type\Integer`. It was originally named
`IntegerValue` because static analysis sees `Integer` in docblock
annotations and treats it as the native `int` type. `Integer` is not a
reserved word in PHP, so it should be named `Integer` for consistency
with other types in this library. When using it, a class alias prevents
static analysis from complaining.
2020-02-21 11:59:49 -06:00
Ben Ramsey 0bff9e8660 Add NameGeneratorInterface and generators for v3 and v5 UUIDs 2020-02-08 13:12:20 -06:00
Marco Pivetta a252f29847 Import used functions and constants via use statement to disallow ambiguity for compiler/static-analysis
As documented in https://wiki.php.net/rfc/use_global_elements, the engine (by default) does a local namespace
lookup, then falls back to global namespace when first calling a global function referenced in namespaced code,
unless that function is referenced via fully qualified name (FQN).

By using the FQN, the actual symbol can be looked up at compile-time, both by the PHP engine and by static analysis
tooling, allowing for compiler (in particular) optimizations to replace known hot-path functions with specialized opcodes.

Sadly, no actual benchmark at hand: the improvements can be minimal or massive, depending on where this library is
used (tight loops being most relevant).
2020-02-03 13:15:35 -06:00
Ben Ramsey 2108274b4a Fix UuidFactory::fromDateTime() bug on 32-bit systems 2020-02-03 09:41:23 -06:00
Ben Ramsey 5fa4eb4f17 Add fromDateTime() to create version 1 UUIDs from DateTime instances
Fixes #28
2020-02-03 00:48:41 -06:00
Ben Ramsey 931c1a6b52 Work exclusively with bytes instead of a hexadecimal string 2020-01-21 23:29:13 -06:00
Ben Ramsey 19f01c7985 No longer set variant/version bits inside the time generator 2020-01-21 16:38:07 -06:00
Ben Ramsey bf237a1962 Change UuidBuilderInterface::build() to accept bytes instead of fields 2020-01-21 15:49:18 -06:00
Ben Ramsey 268e66aad8 Add static Uuid::uuid2() method 2020-01-18 14:14:47 -06:00
Ben Ramsey 72a2312f62 Support generation of version 2 (DCE Security) UUIDs 2020-01-18 12:14:01 -06:00
Ben Ramsey 8e79ff851a Address Psalm errors 2020-01-18 12:13:56 -06:00
Barney Laurance bdc9170edc Run Psalm on src as well as Static Analysis Fixture (#282)
* Run Psalm on src as well as Static Analysis Fixture

Psalm baselining feature is used to prevent immediate build failures -
psalm will just cause failures for errors caused by future changes to
the code.

See https://psalm.dev/docs/running_psalm/dealing_with_code_issues/#using-a-baseline-file

* Fix MixedArgument issues in OrderedTimeCodec

Potentially unpack should be documented as returning string[] instead of
array to make this unecassary.

* Fix Psalm PossiblyNullPropertyAssignmentValue issues

* Add psalm-immutable annotation to Uuid class

* Fix Psalm MixedArgument issues

* Fix MissingImmutableAnnotation psalm issue

* Fix Psalm MixedAssignment issue

* Fix Psalm InvalidReturnStatement / InvalidReturnType issue

* Add ImpureMethodCall issues to baseline.

Fixing these in one place just moves them somewhere else.

* Exclude psalm-baseline.xml from exported git archives
2020-01-18 12:13:56 -06:00
Ben Ramsey 0d7b8c2b7a Update coding style to include PSR-12, among other options
This also includes heavy use of slevomat/coding-standard to apply
various checks to the code, based on maintainer (me) preference.
2020-01-18 12:13:55 -06:00
Massimiliano Arione 5459113b81 add typehints and return types 2020-01-18 12:13:10 -06:00
Bradyn Poulsen 3cf759ad05 Migrate isValid() to Validator and ValidatorInterface
* Maintain backwards compatibility with the former Uuid::isValid() and
  Uuid::VALID_PATTERN
* Remove the assert statements in favor of str_replace and preg_match
* Make the validator a featureset of the factory
* Remove old suggestion about locations of constants
* Remove argument count assertions
* Remove VALID_PATTERN from Uuid
2020-01-18 12:13:08 -06:00
SignpostMarv 0030399564 Increase PHPStan levels and update code to resolve issues found 2020-01-18 12:13:08 -06:00
Ben Ramsey 64ba9a2767 Clean up code according to PhpStorm inspections report 2019-11-30 13:14:52 -08:00
Alessandro Minoccheri c4cc058f3d change array declarations 2019-11-30 09:10:09 -08:00
Marco Perone 4b7374129c add annotations for thrown exceptions 2018-07-09 09:04:12 +02:00
Iain Mckay 0a198d3d11 Improves memory usage when generating large quantities of UUID's 2017-03-09 09:01:12 +01:00
Jessica Mauerhan e80e3d5828 Convert string to lowercase. Fixes GH Issue #131 2016-09-30 16:01:45 -04:00
Alex Farcas ad6f0747bd Implemented timestamp first and timestamp last comb generators 2016-03-18 16:49:19 +02:00
Emir Beganovic fb1cd7a944 Cleanup: Update and add missing docblocks, remove unused imports
Just a bit of house keeping for the sake of code cleanliness.
2015-10-05 10:18:21 +02:00
Ben Ramsey e6f97dc8ab Add docblocks for classes and interfaces in top-level Ramsey\Uuid namespace 2015-09-27 18:58:50 -05:00
Aztech 0cd74639cf Enable use of custom TimeGenerator implementations
- Removes now unnecessary `timeConverter` and `timeProvider`
  properties, setters, and getters in both FeatureSet and
  UuidFactory as those are now exclusively used by the default
  TimeGenerator
- Adds a `setTimeGenerator` method on UuidFactory to override the
  default time generator
2015-07-28 22:16:29 +02:00
Ben Ramsey d88a941b8c Fix errant docblock comment asterisk removal 2015-07-27 11:14:42 -05:00
Aztech 8974c76bf6 Refactor TimeGeneratorInterface
- Remove UuidFactory from signature
- Remove setters on UuidFactory to prevent inconsistencies (a new feature set and factory should be used instead)
- Update tests to reflect those changes
2015-07-27 11:14:20 -05:00
Ben Ramsey dfbf8b8098 Abstract time generation into family of TimeGeneratorInterface classes 2015-07-27 11:14:20 -05:00
Ben Ramsey db27dc1680 Rename UuidBuilder to Builder\UuidBuilderInterface 2015-07-16 10:06:16 -05:00
Ben Ramsey 3f0ba1ed00 Move CodecInterface to the Codec namespace 2015-07-16 10:01:24 -05:00
Ben Ramsey b3ef99a2e9 Move RandomGeneratorInterface and RandomGeneratorFactory to Generator NS 2015-07-16 09:54:04 -05:00
Ben Ramsey e006f669ad Adding common docblock file header 2015-07-15 13:59:52 -05:00
Ben Ramsey d67c3490a8 Change namespace to "Ramsey"; closes #48 2015-04-25 12:11:37 -05:00
Thibaud Fabre 8bece7c95b Add COMB and GUID options to command line 2015-02-07 13:14:58 +01:00
Thibaud Fabre cc23f64d58 Add COMB generator for use with UUID4 2015-02-07 13:14:58 +01:00
Thibaud Fabre b8fe2e4a91 Extract factory interface & add basic pecl impl 2014-12-17 01:42:57 +01:00
Ben Ramsey 680fd794cb Interfaces should have the suffix "Interface" in their names 2014-11-08 16:27:20 -05:00
Ben Ramsey 958643e7b6 Introduce Provider namespace and move Node and Time classes into it 2014-11-08 16:16:44 -05:00
Ben Ramsey cd2d09c356 Introduce Converter namespace and move Number and Time classes into it 2014-11-08 14:43:09 -05:00
Thibaud Fabre cce58a0b8a Fix doc comments and remove unneeded usings 2014-11-08 15:57:30 +01:00
Thibaud Fabre 04c64d6f45 Refactor duplicate code 2014-11-08 15:41:53 +01:00
Thibaud Fabre 9df122eb00 Remove duplication in UuidFactory 2014-11-08 15:08:06 +01:00
Thibaud Fabre c07988fe31 Refactor codecs to remove duplication 2014-11-08 15:00:58 +01:00