Skip to content

Commit

Permalink
Merge branch 'release/v1.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
jstoone committed Jul 21, 2020
2 parents eae3ef2 + b03af51 commit 0275561
Show file tree
Hide file tree
Showing 10 changed files with 218 additions and 120 deletions.
142 changes: 142 additions & 0 deletions .php_cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
<?php

use PhpCsFixer\Config;
use PhpCsFixer\Finder;

$rules = [
'array_syntax' => ['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);
27 changes: 0 additions & 27 deletions .travis.yml

This file was deleted.

15 changes: 9 additions & 6 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
{
"name": "drksh/incremental-slugger",
"name": "drksh/slugger",
"description": "The slugging library used by Darkshare to create incremental slugs.",
"license": "MIT",
"minimum-stability": "stable",
"authors": [
{
"name": "Jakob Steinn",
"email": "[email protected]"
}
],
"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",
"phpunit/phpunit": "^9.2",
"pestphp/pest": "^0.2.3",
"phpstan/phpstan": "^0.12.33"
},
"autoload": {
"psr-4": {
"Darkshare\\": "src/"
}
}
},
"minimum-stability": "dev",
"prefer-stable": true
}
5 changes: 5 additions & 0 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
parameters:
level: 6
paths:
- src

20 changes: 10 additions & 10 deletions phpunit.xml
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
>
<testsuites>
<testsuite name="Slugger Unit Tests">
<directory suffix=".php">./tests/</directory>
<testsuite name="Test Suite">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
<directory suffix=".php">./src</directory>
</whitelist>
</filter>
</phpunit>
26 changes: 14 additions & 12 deletions src/Slugger.php
Original file line number Diff line number Diff line change
Expand Up @@ -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[]
*/
Expand All @@ -38,7 +38,8 @@ class Slugger {
/**
* Create a new Slugger.
*/
public function __construct() {
public function __construct()
{
$this->incrementalBase = count($this->characters);
}

Expand All @@ -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);
Expand All @@ -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];
Expand All @@ -103,4 +106,3 @@ public function decode(string $value): int {
return $result;
}
}

5 changes: 5 additions & 0 deletions tests/Helpers.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

namespace Tests;

// ..
3 changes: 3 additions & 0 deletions tests/Pest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?php

// ..
30 changes: 30 additions & 0 deletions tests/SluggerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

/**
* The Slugger instance under test.
*
* @var Darkshare\Slugger
*/
$slugger = new Darkshare\Slugger();

it('can encode integers to incremental slugs')
->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'));
Loading

0 comments on commit 0275561

Please sign in to comment.