Skip to content

Commit

Permalink
MVC Scaffolding: Visão de edição + correções de bugs. (#36)
Browse files Browse the repository at this point in the history
* Atualização da biblioteca `lmht-js` para a versão 0.4.5.
* Forçando XML Builder e Parser a preservar a ordem das tags HTML geradas.
* Várias correções na geração de visões.
  • Loading branch information
leonelsanchesdasilva authored Jan 24, 2024
1 parent 49bd0b6 commit a546bcd
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 24 deletions.
4 changes: 2 additions & 2 deletions index-gerar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ const pontoDeEntradaGerar = async (argumentos: string[]) => {
console.info(`Visão ${visaoSelecionarUm}`);
const visaoAdicionar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'adicionar');
console.info(`Visão ${visaoAdicionar}`);
const visaoAtualizar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'atualizar');
console.info(`Visão ${visaoAtualizar}`);
const visaoEditar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'editar');
console.info(`Visão ${visaoEditar}`);
const visaoExcluir = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'excluir');
console.info(`Visão ${visaoExcluir}`);
}
Expand Down
7 changes: 5 additions & 2 deletions infraestrutura/formatadores/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,11 @@ export class FormatadorLmht {
* @returns O resultado das duas conversões.
*/
async formatar(caminhoRota: string, valores: any): Promise<any> {
let visaoCorrespondente: string = caminho.join(this.diretorioBase, 'visoes', caminhoRota, '.lmht');
const diretorioOuArquivo = caminho.join(this.diretorioBase, 'visoes', caminhoRota);
// Remove parâmetros da rota.
// Ainda não sei se é uma boa ideia fazer desse jeito.
const caminhoRotaSemParametros = caminhoRota.replace(/:[\w]+\//i, "");
let visaoCorrespondente: string = caminho.join(this.diretorioBase, 'visoes', caminhoRotaSemParametros, '.lmht');
const diretorioOuArquivo = caminho.join(this.diretorioBase, 'visoes', caminhoRotaSemParametros);
if (sistemaDeArquivos.existsSync(diretorioOuArquivo)) {
// É diretório
if (visaoCorrespondente.endsWith(caminho.sep + '.lmht')) {
Expand Down
6 changes: 4 additions & 2 deletions infraestrutura/preprocessadores/foles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ export class PreprocessadorFolEs {

constructor() {
this.leitorLmht = new XMLParser({
ignoreAttributes: false
ignoreAttributes: false,
preserveOrder: true
});
this.construtorLmht = new XMLBuilder({
ignoreAttributes: false
ignoreAttributes: false,
preserveOrder: true
});
this.foles = new FolEs(false);
}
Expand Down
7 changes: 3 additions & 4 deletions interface-linha-comando/gerar/gerador-rotas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,26 +69,25 @@ export class GeradorRotas {
const conteudoAtualizar = `liquido.rotaPut(funcao(requisicao, resposta) {\n resposta.lmht({ "titulo": "Liquido" })\n})\n\n`;
const conteudoSelecionarParaExclusao = this.criarRotaConfirmarExclusao(declaracaoModelo);
const conteudoExcluir = `liquido.rotaDelete(funcao(requisicao, resposta) {\n resposta.lmht({ "titulo": "Liquido" })\n})\n\n`;
const conteudoRotas = `${conteudoSelecionarUm}${conteudoSelecionarParaEdicao}${conteudoAtualizar}${conteudoSelecionarParaExclusao}${conteudoExcluir}`;

const diretorioRotasComId = criarDiretorioComIdSeNaoExiste(diretorioRotas);

const caminhoRotasId = caminho.join(diretorioRotasComId, 'inicial.delegua');
sistemaArquivos.writeFileSync(
caminhoRotasId,
conteudoRotas
`${conteudoSelecionarUm}`
);

const caminhoRotaEditar = caminho.join(diretorioRotasComId, 'editar.delegua');
sistemaArquivos.writeFileSync(
caminhoRotaEditar,
conteudoRotas
`${conteudoSelecionarParaEdicao}${conteudoAtualizar}`
);

const caminhoRotaExcluir = caminho.join(diretorioRotasComId, 'excluir.delegua');
sistemaArquivos.writeFileSync(
caminhoRotaExcluir,
conteudoRotas
`${conteudoSelecionarParaExclusao}${conteudoExcluir}`
);

return [caminhoRotasId, caminhoRotaEditar, caminhoRotaExcluir];
Expand Down
25 changes: 22 additions & 3 deletions interface-linha-comando/gerar/gerador-visoes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ export class GeradorVisoes {
caminhoVisao = caminho.join(diretorioVisoes, 'adicionar.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
case 'atualizar':
caminhoVisao = caminho.join(diretorioVisoes, 'atualizar.lmht');
corpo = ' <corpo>Teste</corpo>\n';
case 'editar':
caminhoVisao = caminho.join(diretorioVisoes, 'editar.lmht');
corpo = `${" ".repeat(this.indentacao)}<corpo>\n${this.corpoEditar(declaracaoModelo)}\n${" ".repeat(this.indentacao)}</corpo>\n`;
break;
case 'excluir':
caminhoVisao = caminho.join(diretorioVisoes, 'excluir.lmht');
Expand Down Expand Up @@ -117,4 +117,23 @@ export class GeradorVisoes {

return `${titulo}${relacaoPropriedades}`;
}

private corpoEditar(declaracaoModelo: Classe): string {
const titulo = `${" ".repeat(this.indentacao * 2)}<titulo1>Detalhes de ${declaracaoModelo.simbolo.lexema}</titulo1>\n`;

const listaPropriedades: string[] = [];
for (const propriedade of declaracaoModelo.propriedades) {
listaPropriedades.push(" ".repeat(this.indentacao * 3) + `<etiqueta para="${propriedade.nome.lexema}">${propriedade.nome.lexema}</etiqueta>`);
listaPropriedades.push(" ".repeat(this.indentacao * 3) + `<campo tipo="texto" id="{{${propriedade.nome.lexema}}}"></campo>`);
}

const relacaoPropriedades = `${" ".repeat(this.indentacao * 2)}<campos>\n` +
listaPropriedades.reduce(
(acumulador, elemento) => acumulador + '\n' + elemento
) +
`\n${" ".repeat(this.indentacao * 2)}</campos>\n`;

const formulario = `${" ".repeat(this.indentacao * 2)}<formulário método="POST" ação="">\n${relacaoPropriedades}</formulário>\n`;
return `${titulo}${formulario}`;
}
}
2 changes: 1 addition & 1 deletion interface-linha-comando/gerar/tipo-visao.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export type TipoVisao = 'selecionarTudo' |
'selecionarUm' |
'adicionar' |
'atualizar' |
'editar' |
'excluir';
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
"@designliquido/flexoes": "^0.1.0",
"@designliquido/foles": "^0.6.1",
"@designliquido/lincones-sqlite": "^0.0.2",
"@designliquido/lmht-js": "^0.4.4",
"@designliquido/lmht-js": "^0.4.5",
"body-parser": "^1.20.1",
"commander": "^11.1.0",
"cookie-parser": "^1.4.6",
Expand Down
18 changes: 9 additions & 9 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -348,13 +348,13 @@
sqlite "4.1.2"
sqlite3 "^5.1.4"

"@designliquido/lmht-js@^0.4.4":
version "0.4.4"
resolved "https://registry.yarnpkg.com/@designliquido/lmht-js/-/lmht-js-0.4.4.tgz#d0f88553122a113f89f6516ec1d29a40a0061a81"
integrity sha512-mpL2mlZSsjRptkaoS4X0XOSiTzVH/QwVrpdJr6w1MjgJwWGPO/qsdlL/zRUwL6cW7JDo8B3scN3h2wHoOvY5aw==
"@designliquido/lmht-js@^0.4.5":
version "0.4.5"
resolved "https://registry.yarnpkg.com/@designliquido/lmht-js/-/lmht-js-0.4.5.tgz#5a31cb4a62a989d4cca97dd0a88035d5adf0cc0b"
integrity sha512-Y9DzF4XLjrxXtz6KDXBY3TJ9bUlepLJNUTKRT41OAh+5P8c2E7dYhVMZm2nvlq26IPmEwVwHNslEF4ueipgCgQ==
dependencies:
jsdom "^21.1.1"
xslt-processor "^2.1.2"
xslt-processor "^2.1.3"

"@eslint/eslintrc@^1.3.3":
version "1.3.3"
Expand Down Expand Up @@ -6309,10 +6309,10 @@ xregexp@2.0.0:
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==

xslt-processor@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/xslt-processor/-/xslt-processor-2.1.2.tgz#3e116c737906aaf079c271115ae83e73a5e6d332"
integrity sha512-AwMLtLzRIRgVZuLgSra1Bz3wFUb6fBKYCK2gVaufXkIR2g7o4U9Ml5rCEcHoTc6LSDrKhSiFKnJEG+kKyrFvxw==
xslt-processor@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/xslt-processor/-/xslt-processor-2.1.3.tgz#2380190f4ae383cc1f22173690ebc051d3f2e022"
integrity sha512-WiYeocbC/Y7SmRO7FAHUCx7mmGstd82CKiuWiJG3lYQYTbSHl/e1PVCuVuCVSY4ZHlGRkey48rgvCEEdAtlrjQ==
dependencies:
he "^1.2.0"

Expand Down

0 comments on commit a546bcd

Please sign in to comment.