Skip to content

Commit

Permalink
Merge pull request #206 from gacela-project/feature/allow-optional-pr…
Browse files Browse the repository at this point in the history
…oject-namespace-on-class-name-finder-rules

Allow optional project namespace on class name finder rules
Chemaclass authored Oct 12, 2022
2 parents 14d2339 + 144e57e commit a08c152
Showing 5 changed files with 103 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@

- Read autoload-dev psr-4 namespaces for gacela make commands.
- Cache default resolved gacela class.
- Allow optional project namespace on class name finder rules.

### 0.26.0
#### 2022-10-01
Original file line number Diff line number Diff line change
@@ -10,9 +10,17 @@ final class FinderRuleWithModulePrefix implements FinderRuleInterface
{
public function buildClassCandidate(string $projectNamespace, string $resolvableType, ClassInfo $classInfo): string
{
if ($projectNamespace !== '') {
return sprintf(
'\\%s\\%s\\%s',
trim($projectNamespace, '\\'),
$classInfo->getModuleName(),
$classInfo->getModuleName() . $resolvableType
);
}

return sprintf(
'\\%s\\%s\\%s',
trim($projectNamespace, '\\'),
'\\%s\\%s',
$classInfo->getModuleName(),
$classInfo->getModuleName() . $resolvableType
);
Original file line number Diff line number Diff line change
@@ -10,9 +10,17 @@ final class FinderRuleWithoutModulePrefix implements FinderRuleInterface
{
public function buildClassCandidate(string $projectNamespace, string $resolvableType, ClassInfo $classInfo): string
{
if ($projectNamespace !== '') {
return sprintf(
'\\%s\\%s\\%s',
trim($projectNamespace, '\\'),
$classInfo->getModuleName(),
$resolvableType
);
}

return sprintf(
'\\%s\\%s\\%s',
trim($projectNamespace, '\\'),
'\\%s\\%s',
$classInfo->getModuleName(),
$resolvableType
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace GacelaTest\Unit\Framework\ClassResolver\ClassNameFinder\Rule;

use Gacela\Framework\ClassResolver\ClassInfo;
use Gacela\Framework\ClassResolver\ClassNameFinder\Rule\FinderRuleWithModulePrefix;
use PHPUnit\Framework\TestCase;

final class FinderRuleWithModulePrefixTest extends TestCase
{
private FinderRuleWithModulePrefix $rule;

protected function setUp(): void
{
$this->rule = new FinderRuleWithModulePrefix();
}

public function test_build_without_project_namespace(): void
{
$projectNamespace = '';
$resolvableType = 'Factory';
$classInfo = ClassInfo::from($this);

$actual = $this->rule->buildClassCandidate($projectNamespace, $resolvableType, $classInfo);

self::assertSame('\Rule\RuleFactory', $actual);
}

public function test_build_with_project_namespace(): void
{
$projectNamespace = 'App';
$resolvableType = 'Factory';
$classInfo = ClassInfo::from($this);

$actual = $this->rule->buildClassCandidate($projectNamespace, $resolvableType, $classInfo);

self::assertSame('\App\Rule\RuleFactory', $actual);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace GacelaTest\Unit\Framework\ClassResolver\ClassNameFinder\Rule;

use Gacela\Framework\ClassResolver\ClassInfo;
use Gacela\Framework\ClassResolver\ClassNameFinder\Rule\FinderRuleWithoutModulePrefix;
use PHPUnit\Framework\TestCase;

final class FinderRuleWithoutModulePrefixTest extends TestCase
{
private FinderRuleWithoutModulePrefix $rule;

protected function setUp(): void
{
$this->rule = new FinderRuleWithoutModulePrefix();
}

public function test_build_without_project_namespace(): void
{
$projectNamespace = '';
$resolvableType = 'Factory';
$classInfo = ClassInfo::from($this);

$actual = $this->rule->buildClassCandidate($projectNamespace, $resolvableType, $classInfo);

self::assertSame('\Rule\Factory', $actual);
}

public function test_build_with_project_namespace(): void
{
$projectNamespace = 'App';
$resolvableType = 'Factory';
$classInfo = ClassInfo::from($this);

$actual = $this->rule->buildClassCandidate($projectNamespace, $resolvableType, $classInfo);

self::assertSame('\App\Rule\Factory', $actual);
}
}

0 comments on commit a08c152

Please sign in to comment.