mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +01:00
Add slugify method
This commit is contained in:
@ -661,7 +661,7 @@ final class Expectation
|
||||
{
|
||||
foreach ($keys as $k => $key) {
|
||||
if (is_array($key)) {
|
||||
$this->toHaveKeys(array_keys(Arr::dot($key, $k.'.')), $message);
|
||||
$this->toHaveKeys(array_keys(Arr::dot($key, $k . '.')), $message);
|
||||
} else {
|
||||
$this->toHaveKey($key, message: $message);
|
||||
}
|
||||
@ -1159,4 +1159,21 @@ final class Expectation
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the value can be converted to a slug
|
||||
*
|
||||
* @return self<TValue>
|
||||
*/
|
||||
public function toBeSlug(string $message = ''): self
|
||||
{
|
||||
if ($message === '') {
|
||||
$message = "Failed asserting that {$this->value} can be converted to a slug.";
|
||||
}
|
||||
|
||||
$slug = Str::slugify((string) $this->value);
|
||||
Assert::assertNotEmpty($slug, $message);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,7 +61,7 @@ final class Str
|
||||
{
|
||||
$code = str_replace('_', '__', $code);
|
||||
|
||||
$code = self::PREFIX.str_replace(' ', '_', $code);
|
||||
$code = self::PREFIX . str_replace(' ', '_', $code);
|
||||
|
||||
// sticks to PHP8.2 function naming rules https://www.php.net/manual/en/functions.user-defined.php
|
||||
return (string) preg_replace('/[^a-zA-Z0-9_\x80-\xff]/', '_', $code);
|
||||
@ -116,4 +116,13 @@ final class Str
|
||||
{
|
||||
return (bool) filter_var($value, FILTER_VALIDATE_URL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the given `$target` to a URL-friendly "slug".
|
||||
*/
|
||||
public static function slugify(string $target): string
|
||||
{
|
||||
$target = preg_replace('/[^a-zA-Z0-9]+/', '-', $target);
|
||||
return strtolower(trim($target, '-'));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user