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

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
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.