<?php 
 
arch('Todas as "classes" de App\Dominio\Repositorios devem ser interfaces exceto as Fronteiras.') 
    ->expect('App\Dominio\Repositories') 
    ->toBeInterfaces() 
    ->ignoring([ 
        'App\Dominio\Repositorios\Autenticacao\Fronteiras', 
        'App\Dominio\Repositorios\Empresa\Fronteiras', 
        'App\Dominio\Repositorios\Token\Fronteiras', 
    ]); 
 
function listarFronteiras($basePath) 
{ 
    $repositorios = []; 
 
    // Função recursiva para percorrer diretórios 
    $iterator = new RecursiveIteratorIterator( 
        new RecursiveDirectoryIterator($basePath, FilesystemIterator::SKIP_DOTS), 
        RecursiveIteratorIterator::SELF_FIRST 
    ); 
 
    foreach ($iterator as $item) { 
        if ($item->isDir()) { 
            // Formata o caminho para a estrutura de namespace do PHP 
            $relativePath = str_replace($basePath, '', $item->getPathname()); 
            $namespacePath = 'App\\Dominio\\Repositorios' . str_replace('/', '\\', $relativePath) . '\\Fronteiras'; 
 
            $repositorios[] = $namespacePath; 
        } 
    } 
 
    return $repositorios; 
} 
 
arch('Todas as "classes" de Dominio\Repositorios devem ter prefixo Repositorio.') 
    ->expect('App\Dominio\Repositorios') 
    ->toHavePrefix('Repositorio') 
    ->ignoring(listarFronteiras(__DIR__.'/../../../../src/Dominio/Repositorios'));
 
 |