67 Commits

Author SHA1 Message Date
Ben Ramsey 7ca2832d3b chore: suppress redundant condition complaint 2021-08-06 16:14:11 -05:00
Ben Ramsey fb9ef508b0 Merge branch 'fix-static-analysis' of https://github.com/pawel-slowik/uuid into pawel-slowik-fix-static-analysis 2021-08-06 16:08:43 -05:00
Ben Ramsey 4511ccd7e6 chore(deps): upgrade vimeo/psalm 2021-08-06 14:25:16 -05:00
Ben Ramsey c005f69d6e chore: update package files 2021-08-06 14:05:57 -05:00
Paweł Słowik fe475968db Assure unserialized NodeProviderCollection contains only valid elements
This stops Psalm from complaining about MixedPropertyTypeCoercion
2021-05-24 22:48:58 +02:00
Paweł Słowik aeb5e4d297 Specify NodeProviderCollection element type
This stops PHPStan from complaining:

Class Ramsey\Uuid\Provider\Node\NodeProviderCollection extends generic class
Ramsey\Collection\AbstractCollection but does not specify its types: T
2021-05-24 22:31:23 +02:00
Ben Ramsey b941aa1a9a Prepare test suite for PHP 8 2020-10-29 18:24:14 -05:00
Bilge 49b772a5e2 Removed redundant interface inheritance. 2020-08-23 19:36:53 +01:00
Ben Ramsey ba8fff1d3a Fix collection deserialization errors 2020-03-29 15:13:32 -05:00
Ben Ramsey b3c26661ca Correct capitalization of microsecond 2020-03-04 16:51:46 -06:00
Ben Ramsey 86c37eff4c Change NodeProviderInterface::getNode() to return Hexadecimal 2020-02-29 22:35:45 -06:00
Ben Ramsey 4ffd156a84 Add StaticNodeProvider to make it easier to use a static node 2020-02-29 17:23:27 -06:00
Ben Ramsey 19a91b7522 Add missing convenience methods for UuidV2 2020-02-29 11:29:12 -06:00
Ben Ramsey 84a2e76c7e Remove currentTime() method 2020-02-23 16:11:50 -06:00
Ben Ramsey aaccc850a1 Use strict argument validation for collections
This resolves #106
2020-02-23 00:50:00 -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 fb4f54fb84 Address static analysis issues 2020-02-08 13:14:17 -06:00
Ben Ramsey 2e420f94c4 Revert "Suppress MissingNativeTypeHint error from slevomat/coding-standard"
This reverts commit e269c16cd4.

This issue is fixed in slevomat/coding-standard 6.1.4. See thread at
https://github.com/slevomat/coding-standard/issues/883
2020-02-03 16:01:43 -06:00
Marco Pivetta dee551deb1 Removed use function imports for mocked/stubbed functions, disabling phpcs import rule
While the rule is now disabled, it still is very much valuable to import most pure functions from the core
PHP scope, allowing us some marginal gains on anything that can be inlined by the engine (now or in future).

The rule does not allow selective exclusions, so we will need to keep it off for now.
2020-02-03 13:15:35 -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 e269c16cd4 Suppress MissingNativeTypeHint error from slevomat/coding-standard 2020-02-02 18:38:03 -06:00
Ben Ramsey 72a2312f62 Support generation of version 2 (DCE Security) UUIDs 2020-01-18 12:14:01 -06:00
Ben Ramsey c11c023796 Address static analysis issues and add additional tests 2020-01-18 12:13:59 -06:00
Ben Ramsey 4125885862 Add getTime() to TimeProviderInterface and mark currentTime() deprecated 2020-01-18 12:13:58 -06:00
Massimiliano Arione 776e472808 add typehints and return types 2020-01-18 12:13:57 -06:00
Ben Ramsey ef999c2b2c 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:56 -06:00
Massimiliano Arione 0e7cdfe620 add typehints and return types 2020-01-18 12:13:56 -06:00
Ben Ramsey 12896f06db Use internal exceptions
Fixes #254
2020-01-18 12:13:55 -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
SignpostMarv 0030399564 Increase PHPStan levels and update code to resolve issues found 2020-01-18 12:13:08 -06:00
Martin Hujer ca2629767d Require phpstan and correct issues found up to level 2
* issues found by phpstan L0
* issues found by phpstan L1
* issues found by phpstan L2 in src/
* issues found by phpstan L2 in tests/
2020-01-18 12:13:08 -06:00
Ben Ramsey b39ec78f6e Check whether sysfs is readable before attempting to read it
Fixes #260
2019-12-17 02:01:14 -06:00
Ben Ramsey 692175901d Fix RandomNodeProvider behavior on 32-bit systems
The 6 bytes obtained from `random_bytes()` is a 48-bit integer, which
cannot be converted to decimal on a 32-bit system, without being
implicitly cast to a float by PHP. This was causing problems with
setting the multicast bit, and it led to non-random node values.

This new approach splits the 6 bytes up into two 3-byte values, each a
24-bit integer, and applies the multicast bit to the most significant
bits before re-combining the bytes as a string.
2019-11-30 20:26:42 -08:00
Ben Ramsey 64ba9a2767 Clean up code according to PhpStorm inspections report 2019-11-30 13:14:52 -08:00
Ben Ramsey 555e5c1102 Test usage of PHP_OS constant 2019-11-30 12:18:43 -08:00
Ben Ramsey 92d12eb5c6 Merge branch '3.x' of https://github.com/bkayranci/uuid into bkayranci-3.x 2019-11-30 11:51:54 -08:00
Alessandro Minoccheri c4cc058f3d change array declarations 2019-11-30 09:10:09 -08:00
Türkalp Burak KAYRANCIOĞLU c0183c581e PHP_OS predefined constant was used instead of php_uname() function. 2019-10-26 13:34:38 +03:00
Ben Ramsey 8d621488c4 Check whether passthru() is disabled
If passthru() is disabled in php.ini, this will force the
SystemNodeProvider to return `false` for the node. Using the default
FallbackNodeProvider, ramsey/uuid will default to the
RandomNodeProvider, in these cases.

Closes #114
2018-07-19 16:53:00 -05:00
Ben Ramsey 6616ec086c Merge pull request #232 from marcosh/master
add annotations for thrown exceptions
2018-07-19 15:24:41 -05:00
Ben Ramsey b8cac9278c Merge branch 'SystemNodeProvider-FreeBSD-support' of https://github.com/kalifg/uuid into kalifg-SystemNodeProvider-FreeBSD-support 2018-07-19 15:08:45 -05:00
Marco Perone 4b7374129c add annotations for thrown exceptions 2018-07-09 09:04:12 +02:00
Ben Peachey 62628862df Improvements to the SystemNodeProviderTest class (#211)
* Changes location of providers in the SystemNodeProviderTest

  They are now grouped at the bottom of the class.

* Adds logic to SystemNodeProviderTest.

* Changes call to `file_get_contents` SystemNodeProvider so it can be
  mocked.

* Changes SystemNodeProviderTest so native PHP functions are mocked
  instead of the class under test.

* Changes SystemNodeProviderTest so "\n" is used instead of PHP_EOL

  As the (input or output) of the tests is not system dependant it does
  not make sense to use PHP_EOL. All of these instance have been
  replaced for the sake of readability and stating intent more clearly.

* Adds dataprovider to SystemNodeProvider main test for input
  variations.

* Adds OS to SystemNodeProviderTest dataprovider for Linux fail
  scenario.

* Adds test for SystemNodeProvider to ensure invalid values are not
  accepted.

* Changes names of dataproviders in SystemNodeProviderTest for
  consistency.

* Changes SystemNodeProviderTest by grouping dataproviders together.

* Changes method in SystemNodeProviderTest to use the provided mock
  functions.

* Fixes PSR-2 coding conventions in SystemNodeProviderTest.

* Minor change to SystemNodeProviderTest based on review.
2018-02-07 17:28:02 -06:00
kalifg a7492800e2 Add support for determining MAC address on FreeBSD systems 2018-02-07 15:15:49 -06:00
Ben Ramsey 89c3c1777e Fix capitalization of the getSysfs() method 2018-01-16 14:14:34 -06:00
Ben Ramsey 901c3e540d Handle cases where glob() returns false
Fixes #203
2018-01-16 14:11:58 -06:00
Robbert Müller 10e022c05c bug fixes
- add missing default value
- invert logic, because it was doing it the wrong way around
2017-10-18 10:32:45 +02:00
Ben Ramsey bb9c49a32f Merge branch 'master' into add-sysfs-option 2017-10-09 09:19:48 -05:00
Robbert Müller cfafc97fc0 Add sysfs option for linux system
Linux offers a sysfs interface to the macaddresses of the system network
interfaces without calling exec.

This enables stable system based UUID generation even on docker images
like php:7
2017-10-06 19:57:30 +02:00