| 
<?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'));
 |