PathPrefixer.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. declare(strict_types=1);
  3. namespace League\Flysystem;
  4. use function rtrim;
  5. use function strlen;
  6. use function substr;
  7. final class PathPrefixer
  8. {
  9. /**
  10. * @var string
  11. */
  12. private $prefix = '';
  13. /**
  14. * @var string
  15. */
  16. private $separator = '/';
  17. public function __construct(string $prefix, string $separator = '/')
  18. {
  19. $this->prefix = rtrim($prefix, '\\/');
  20. if ($this->prefix !== '' || $prefix === $separator) {
  21. $this->prefix .= $separator;
  22. }
  23. $this->separator = $separator;
  24. }
  25. public function prefixPath(string $path): string
  26. {
  27. return $this->prefix . ltrim($path, '\\/');
  28. }
  29. public function stripPrefix(string $path): string
  30. {
  31. /* @var string */
  32. return substr($path, strlen($this->prefix));
  33. }
  34. public function stripDirectoryPrefix(string $path): string
  35. {
  36. return rtrim($this->stripPrefix($path), '\\/');
  37. }
  38. public function prefixDirectoryPath(string $path): string
  39. {
  40. $prefixedPath = $this->prefixPath(rtrim($path, '\\/'));
  41. if ((substr($prefixedPath, -1) === $this->separator) || $prefixedPath === '') {
  42. return $prefixedPath;
  43. }
  44. return $prefixedPath . $this->separator;
  45. }
  46. }