Class: Bddgenx::GherkinCleaner
- Inherits:
-
Object
- Object
- Bddgenx::GherkinCleaner
- Defined in:
- lib/bddgenx/support/gherkin_cleaner.rb
Class Method Summary collapse
-
.corrigir_indentacao(texto) ⇒ Object
Corrige a indentação das linhas para seguir o padrão Gherkin:.
-
.corrigir_language(texto) ⇒ Object
Garante que o arquivo contenha exatamente uma linha “# language: xx” no topo.
-
.detectar_idioma(texto) ⇒ Object
Detecta o idioma do conteúdo baseado nas palavras-chave Gherkin presentes.
-
.limpar(texto) ⇒ Object
Método principal para limpar o texto Gherkin recebido.
-
.remover_blocos_markdown(texto) ⇒ Object
Remove blocos markdown que usam as crases tripas (“‘).
Class Method Details
.corrigir_indentacao(texto) ⇒ Object
Corrige a indentação das linhas para seguir o padrão Gherkin:
Feature e Funcionalidade no nível 0 (sem indentação). Scenario e Scenario Outline com 2 espaços. Passos (Given, When, Then, And e equivalentes PT) com 4 espaços. Tabelas (linhas que começam com ‘|’) com 6 espaços.
Outras linhas recebem indentação padrão de 2 espaços.
Essa padronização melhora legibilidade e compatibilidade com parsers Gherkin.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/bddgenx/support/gherkin_cleaner.rb', line 85 def self.corrigir_indentacao(texto) linhas = texto.lines.map do |linha| if linha.strip.start_with?('Feature', 'Funcionalidade') linha.strip + "\n" elsif linha.strip.start_with?('Scenario', 'Cenário', 'Scenario Outline', 'Esquema do Cenário') " #{linha.strip}\n" elsif linha.strip.start_with?('Given', 'When', 'Then', 'And', 'Dado', 'Quando', 'Então', 'E') " #{linha.strip}\n" elsif linha.strip.start_with?('|') " #{linha.strip}\n" else " #{linha.strip}\n" end end linhas.join end |
.corrigir_language(texto) ⇒ Object
Garante que o arquivo contenha exatamente uma linha “# language: xx” no topo.
Passos:
-
Procura a primeira ocorrência da linha de language no texto.
-
Remove todas as outras linhas duplicadas de language.
-
Se encontrar, move essa linha para o início do texto.
-
Se não encontrar, detecta o idioma do texto e adiciona a linha no topo.
Isso evita erros de parsing em ferramentas BDD que exigem essa diretiva.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/bddgenx/support/gherkin_cleaner.rb', line 42 def self.corrigir_language(texto) linhas = texto.lines primeira_language = linhas.find { |linha| linha.strip.start_with?('# language:') } # Remove todas as linhas duplicadas de language linhas.reject! { |linha| linha.strip.start_with?('# language:') } if primeira_language # Insere a linha de language original no topo linhas.unshift(primeira_language.strip + "\n") else # Se não existir, detecta o idioma e insere padrão idioma = detectar_idioma(linhas.join) linhas.unshift("# language: #{idioma}\n") end linhas.join end |
.detectar_idioma(texto) ⇒ Object
Detecta o idioma do conteúdo baseado nas palavras-chave Gherkin presentes.
Retorna:
-
‘pt’ se encontrar palavras-chave em português (Dado, Quando, Então, E).
-
‘en’ se encontrar palavras-chave em inglês (Given, When, Then, And).
-
‘pt’ como padrão se não detectar.
Isso ajuda a definir a diretiva # language: corretamente.
69 70 71 72 73 |
# File 'lib/bddgenx/support/gherkin_cleaner.rb', line 69 def self.detectar_idioma(texto) return 'pt' if texto =~ /Dado|Quando|Então|E /i return 'en' if texto =~ /Given|When|Then|And /i 'pt' # padrão end |
.limpar(texto) ⇒ Object
Método principal para limpar o texto Gherkin recebido. Executa uma sequência de operações para deixar o texto formatado e correto.
Passos:
-
Remove blocos de código markdown (“‘).
-
Garante que exista somente uma linha # language: correta.
-
Corrige a indentação dos blocos Gherkin para o padrão esperado.
-
Remove espaços em branco no início/fim do texto.
Retorna o texto limpo e formatado.
13 14 15 16 17 18 |
# File 'lib/bddgenx/support/gherkin_cleaner.rb', line 13 def self.limpar(texto) texto = remover_blocos_markdown(texto) texto = corrigir_language(texto) texto = corrigir_indentacao(texto) texto.strip end |
.remover_blocos_markdown(texto) ⇒ Object
Remove blocos markdown que usam as crases tripas (“‘). Muitas vezes a IA retorna os textos dentro desses blocos, que precisam ser limpos.
Exemplo: “‘gherkin Feature: Exemplo “`
Essa função remove as linhas contendo as crases, deixando só o conteúdo.
29 30 31 |
# File 'lib/bddgenx/support/gherkin_cleaner.rb', line 29 def self.remover_blocos_markdown(texto) texto.gsub(/```[a-z]*\n?/i, '').gsub(/```/, '') end |