Skip to content

Commit

Permalink
Moved hasPermissions method from Permission enum to Permissions class
Browse files Browse the repository at this point in the history
  • Loading branch information
freost committed Dec 15, 2024
1 parent 1a09d0c commit 222185d
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 68 deletions.
22 changes: 0 additions & 22 deletions src/mako/file/Permission.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@

namespace mako\file;

use InvalidArgumentException;

use function sprintf;

/**
* File permissions.
*/
Expand Down Expand Up @@ -58,22 +54,4 @@ public static function calculate(Permission ...$permission): int

return $permissions;
}

/**
* Returns TRUE if the permissions contain the specified permissions and FALSE if not.
*/
public static function hasPermissions(int $permissions, Permission ...$permission): bool
{
if ($permissions < 0o000 || $permissions > 0o777) {
throw new InvalidArgumentException(sprintf('The integer [ %s ] does not represent a valid octal between 0o000 and 0o777.', $permissions));
}

$permission = empty($permission) ? 0o000 : self::calculate(...$permission);

if ($permission === 0o000) {
return $permissions === 0o000;
}

return ($permissions & $permission) === $permission;
}
}
16 changes: 12 additions & 4 deletions src/mako/file/Permissions.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ class Permissions
/**
* Constructor.
*/
final public function __construct(Permission ...$permissions)
final public function __construct(Permission ...$permission)
{
$this->permissions = empty($permissions) ? [Permission::NONE] : $permissions;
$this->permissions = empty($permission) ? [Permission::NONE] : $permission;
}

/**
Expand Down Expand Up @@ -78,9 +78,17 @@ public function getPermissions(): array
/**
* Returns TRUE if the permissions contain the specified permissions and FALSE if not.
*/
public function hasPermissions(Permission ...$permissions): bool
public function hasPermissions(Permission ...$permission): bool
{
return Permission::hasPermissions(Permission::calculate(...$this->permissions), ...$permissions);
$permissions = Permission::calculate(...$this->permissions);

$permission = empty($permission) ? 0o000 : Permission::calculate(...$permission);

if ($permission === 0o000) {
return $permissions === 0o000;
}

return ($permissions & $permission) === $permission;
}

/**
Expand Down
42 changes: 0 additions & 42 deletions tests/unit/file/PermissionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,46 +72,4 @@ public function testCalculate(): void
Permission::PUBLIC_EXECUTE)
);
}

/**
*
*/
public function testHasPermissionsWithInvalidPermissions(): void
{
$this->expectException(InvalidArgumentException::class);

$this->expectExceptionMessage('The integer [ 1337 ] does not represent a valid octal between 0o000 and 0o777.');

Permission::hasPermissions(1337, Permission::NONE);
}

/**
*
*/
public function testHasPermissions(): void
{
$this->assertTrue(Permission::hasPermissions(0o777, Permission::OWNER_FULL));

$this->assertTrue(Permission::hasPermissions(0o777, Permission::OWNER_FULL, Permission::GROUP_FULL));

$this->assertTrue(Permission::hasPermissions(0o777, Permission::OWNER_FULL, Permission::GROUP_FULL, Permission::PUBLIC_FULL));

$this->assertTrue(Permission::hasPermissions(0o755, Permission::OWNER_FULL));

$this->assertFalse(Permission::hasPermissions(0o755, Permission::GROUP_WRITE));

$this->assertFalse(Permission::hasPermissions(0o755, Permission::PUBLIC_WRITE));
}

/**
*
*/
public function testHasPermissionsWithNoPermissions(): void
{
$this->assertTrue(Permission::hasPermissions(0o000));

$this->assertTrue(Permission::hasPermissions(0o000, Permission::NONE));

$this->assertFalse(Permission::hasPermissions(0o777, Permission::NONE));
}
}

0 comments on commit 222185d

Please sign in to comment.