From 79c4886b7bdfc3c01121e0e5b08a833b151b0304 Mon Sep 17 00:00:00 2001 From: jstoone Date: Tue, 21 Jul 2020 16:25:44 +0200 Subject: [PATCH 1/5] Remove unused TravisCI config. --- .travis.yml | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e616217..0000000 --- a/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -language: php - -php: - - 7.0 - - 7.1 - -matrix: - allow_failures: - - php: 7.1 - fast_finish: true - -sudo: false - -cache: - directories: - - $HOME/.composer/cache - -before_install: - - if [[ $TRAVIS_PHP_VERSION != 7.1 ]] ; then phpenv config-rm xdebug.ini; fi - - echo "extension = memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini - - travis_retry composer self-update - -install: - - travis_retry composer install --no-interaction --prefer-dist --no-suggest - -script: vendor/bin/phpunit - From ae76715eba0137a5664f06bdb8f034d77e947017 Mon Sep 17 00:00:00 2001 From: jstoone Date: Tue, 21 Jul 2020 16:27:18 +0200 Subject: [PATCH 2/5] Update package name. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 3b49afc..0c58068 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "drksh/incremental-slugger", + "name": "drksh/slugger", "description": "The slugging library used by Darkshare to create incremental slugs.", "license": "MIT", "minimum-stability": "stable", From a43d5c4fd2d7323067b58804f9b2ca8ef3725f9b Mon Sep 17 00:00:00 2001 From: jstoone Date: Tue, 21 Jul 2020 16:28:13 +0200 Subject: [PATCH 3/5] Rewrite test suite to use @pestphp. --- composer.json | 13 +++++--- phpunit.xml | 20 ++++++------ tests/Helpers.php | 5 +++ tests/Pest.php | 3 ++ tests/SluggerTest.php | 30 ++++++++++++++++++ tests/unit/SluggerTest.php | 65 -------------------------------------- 6 files changed, 56 insertions(+), 80 deletions(-) create mode 100644 tests/Helpers.php create mode 100644 tests/Pest.php create mode 100644 tests/SluggerTest.php delete mode 100644 tests/unit/SluggerTest.php diff --git a/composer.json b/composer.json index 0c58068..9f3f0e1 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,6 @@ "name": "drksh/slugger", "description": "The slugging library used by Darkshare to create incremental slugs.", "license": "MIT", - "minimum-stability": "stable", "authors": [ { "name": "Jakob Steinn", @@ -10,15 +9,19 @@ } ], "require": { - "php": "^7.0|^7.1" + "php": "^7.2.5" }, "require-dev": { - "symfony/var-dumper": "^3.1", - "phpunit/phpunit": "~6.0" + "nunomaduro/collision": "^5.0", + "nunomaduro/larastan": "^0.6.1", + "phpunit/phpunit": "^9.2", + "pestphp/pest": "^0.2.3" }, "autoload": { "psr-4": { "Darkshare\\": "src/" } - } + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/phpunit.xml b/phpunit.xml index 862db4c..69a03bf 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,18 +1,18 @@ - - - ./tests/ + + ./tests + + + ./app + ./src + + diff --git a/tests/Helpers.php b/tests/Helpers.php new file mode 100644 index 0000000..b63c4fb --- /dev/null +++ b/tests/Helpers.php @@ -0,0 +1,5 @@ +assertSame('Z', $slugger->encode(52)); + +it('can encode large numbers resulting in longer slugs') + ->assertEquals('fUcod', $slugger->encode(81259151)); + +it('starts at one when encoding') + ->assertEquals('a', $slugger->encode(1)); + +it('throws exception when encoding a value lower than one', + fn () => $slugger->encode(-1) +)->throws(InvalidArgumentException::class); + +it('can decode incremental slugs') + ->assertEquals(52, $slugger->decode('Z')); + +it('can decode to a slug with multiple symbols') + ->assertEquals(81259151, $slugger->decode('fUcod')); + +it('starts at one when decoding') + ->assertEquals(1, $slugger->decode('a')); diff --git a/tests/unit/SluggerTest.php b/tests/unit/SluggerTest.php deleted file mode 100644 index e95b332..0000000 --- a/tests/unit/SluggerTest.php +++ /dev/null @@ -1,65 +0,0 @@ -slugger = new Slugger(); - } - - /** @test */ - public function it_can_encode_incremental_slugs() - { - $this->assertEquals('Z', $this->slugger->encode(52)); - } - - /** @test */ - public function it_can_encode_to_a_slug_with_multiple_symbols() - { - $this->assertEquals('fUcod', $this->slugger->encode(81259151)); - } - - /** @test */ - public function it_starts_at_one_when_encoding() - { - $this->assertEquals('a', $this->slugger->encode(1)); - } - - /** @test */ - public function it_throws_exception_if_encoding_a_value_less_than_one() - { - $this->expectException(InvalidArgumentException::class); - $this->slugger->encode(-1); - } - - /** @test */ - public function it_can_decode_incremental_slugs() - { - $this->assertEquals(52, $this->slugger->decode('Z')); - } - - /** @test */ - public function it_can_dncode_to_a_slug_with_multiple_symbols() - { - $this->assertEquals(81259151, $this->slugger->decode('fUcod')); - } - - /** @test */ - public function it_starts_at_one_when_decoding() - { - $this->assertEquals(1, $this->slugger->decode('a')); - } -} From 858b5a91fa87371bd5fb71fb14d3a59e40c5b65c Mon Sep 17 00:00:00 2001 From: jstoone Date: Tue, 21 Jul 2020 16:29:10 +0200 Subject: [PATCH 4/5] Change code-style to match Laravel. --- .php_cs | 142 ++++++++++++++++++++++++++++++++++++++++++++++++ src/Slugger.php | 26 +++++---- 2 files changed, 156 insertions(+), 12 deletions(-) create mode 100644 .php_cs diff --git a/.php_cs b/.php_cs new file mode 100644 index 0000000..2a734a8 --- /dev/null +++ b/.php_cs @@ -0,0 +1,142 @@ + ['syntax' => 'short'], + 'binary_operator_spaces' => [ + 'default' => 'single_space', + 'operators' => ['=>' => null] + ], + 'blank_line_after_namespace' => true, + 'blank_line_after_opening_tag' => true, + 'blank_line_before_statement' => [ + 'statements' => ['return'] + ], + 'braces' => true, + 'cast_spaces' => true, + 'class_attributes_separation' => [ + 'elements' => ['method'] + ], + 'class_definition' => true, + 'concat_space' => [ + 'spacing' => 'none' + ], + 'declare_equal_normalize' => true, + 'elseif' => true, + 'encoding' => true, + 'full_opening_tag' => true, + 'fully_qualified_strict_types' => true, // added by Shift + 'function_declaration' => true, + 'function_typehint_space' => true, + 'heredoc_to_nowdoc' => true, + 'include' => true, + 'increment_style' => ['style' => 'post'], + 'indentation_type' => true, + 'linebreak_after_opening_tag' => true, + 'line_ending' => true, + 'lowercase_cast' => true, + 'lowercase_constants' => true, + 'lowercase_keywords' => true, + 'lowercase_static_reference' => true, // added from Symfony + 'magic_method_casing' => true, // added from Symfony + 'magic_constant_casing' => true, + 'method_argument_space' => true, + 'native_function_casing' => true, + 'no_alias_functions' => true, + 'no_extra_blank_lines' => [ + 'tokens' => [ + 'extra', + 'throw', + 'use', + 'use_trait', + ] + ], + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_closing_tag' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => [ + 'use' => 'echo' + ], + 'no_multiline_whitespace_around_double_arrow' => true, + 'multiline_whitespace_before_semicolons' => [ + 'strategy' => 'no_multi_line' + ], + 'no_short_bool_cast' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_around_offset' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_trailing_whitespace' => true, + 'no_trailing_whitespace_in_comment' => true, + 'no_unneeded_control_parentheses' => true, + 'no_unreachable_default_argument_value' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'normalize_index_brace' => true, + 'not_operator_with_successor_space' => true, + 'object_operator_without_whitespace' => true, + 'ordered_imports' => ['sortAlgorithm' => 'alpha'], + 'phpdoc_indent' => true, + 'phpdoc_inline_tag' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_package' => true, + 'phpdoc_no_useless_inheritdoc' => true, + 'phpdoc_scalar' => true, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_summary' => true, + 'phpdoc_to_comment' => true, + 'phpdoc_trim' => true, + 'phpdoc_types' => true, + 'phpdoc_var_without_name' => true, + 'psr4' => true, + 'self_accessor' => true, + 'short_scalar_cast' => true, + 'simplified_null_return' => false, // disabled by Shift + 'single_blank_line_at_eof' => true, + 'single_blank_line_before_namespace' => true, + 'single_class_element_per_statement' => true, + 'single_import_per_statement' => true, + 'single_line_after_imports' => true, + 'single_line_comment_style' => [ + 'comment_types' => ['hash'] + ], + 'single_quote' => true, + 'space_after_semicolon' => true, + 'standardize_not_equals' => true, + 'switch_case_semicolon_to_colon' => true, + 'switch_case_space' => true, + 'ternary_operator_spaces' => true, + 'trailing_comma_in_multiline_array' => true, + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'visibility_required' => [ + 'elements' => ['method', 'property'] + ], + 'whitespace_after_comma_in_array' => true, +]; + +$project_path = getcwd(); +$finder = Finder::create() + ->in([ + $project_path . '/src', + $project_path . '/tests', + ]) + ->name('*.php') + ->notName('*.blade.php') + ->ignoreDotFiles(true) + ->ignoreVCS(true); + +return Config::create() + ->setFinder($finder) + ->setRules($rules) + ->setRiskyAllowed(true) + ->setUsingCache(true); diff --git a/src/Slugger.php b/src/Slugger.php index 4d6cd12..8cbc763 100644 --- a/src/Slugger.php +++ b/src/Slugger.php @@ -9,10 +9,10 @@ * @source https://github.com/drksh/incremental-slugger * @license MIT */ -class Slugger { - +class Slugger +{ /** - * The available URI-safe symbols + * The available URI-safe symbols. * * @var string[] */ @@ -38,7 +38,8 @@ class Slugger { /** * Create a new Slugger. */ - public function __construct() { + public function __construct() + { $this->incrementalBase = count($this->characters); } @@ -48,22 +49,23 @@ public function __construct() { * @param int $value * @return string */ - public function encode(int $value): string { + public function encode(int $value): string + { $result = ''; - if($value < 1) { + if ($value < 1) { throw new \InvalidArgumentException( 'The given value has to be greater than zero. '.$value.' given.' ); } - if($value == 1) { + if ($value == 1) { return $this->characters[0]; } $value -= 1; - while($value > 0) { + while ($value > 0) { $result .= $this->characters[$value % $this->incrementalBase]; $value = floor($value / $this->incrementalBase); @@ -78,17 +80,18 @@ public function encode(int $value): string { * @param string $value * @return int */ - public function decode(string $value): int { + public function decode(string $value): int + { $valueLength = strlen($value); $result = 1; - if($valueLength == 1) { + if ($valueLength == 1) { $result += array_search($value, $this->characters, true); return $result; } - for($currentCharacterIndex = 0; $currentCharacterIndex < $valueLength; $currentCharacterIndex++) { + for ($currentCharacterIndex = 0; $currentCharacterIndex < $valueLength; $currentCharacterIndex++) { // It has proven to be faster to start with highest value first $currentCharacter = $value[$valueLength - $currentCharacterIndex - 1]; @@ -103,4 +106,3 @@ public function decode(string $value): int { return $result; } } - From e81682be0a2d949a0a6eeb40d28aa19312a4e451 Mon Sep 17 00:00:00 2001 From: jstoone Date: Tue, 21 Jul 2020 16:34:24 +0200 Subject: [PATCH 5/5] Install and configure phpstan. --- composer.json | 4 ++-- phpstan.neon.dist | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 phpstan.neon.dist diff --git a/composer.json b/composer.json index 9f3f0e1..21bbda3 100644 --- a/composer.json +++ b/composer.json @@ -13,9 +13,9 @@ }, "require-dev": { "nunomaduro/collision": "^5.0", - "nunomaduro/larastan": "^0.6.1", "phpunit/phpunit": "^9.2", - "pestphp/pest": "^0.2.3" + "pestphp/pest": "^0.2.3", + "phpstan/phpstan": "^0.12.33" }, "autoload": { "psr-4": { diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 0000000..b2cf9fa --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,5 @@ +parameters: + level: 6 + paths: + - src +