bddgenx 0.1.51 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,135 @@
1
+ # lib/bddgenx/ia/gemini_cliente.rb
2
+
3
+ module Bddgenx
4
+ module IA
5
+ ##
6
+ # Cliente para interação com a API Gemini do Google para geração
7
+ # de conteúdo, aqui usado para criar cenários BDD no formato Gherkin.
8
+ #
9
+ class GeminiCliente
10
+ GEMINI_API_URL = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent'.freeze
11
+
12
+ ##
13
+ # Gera cenários BDD baseados em uma história, solicitando à API Gemini
14
+ # o retorno no formato Gherkin com palavras-chave no idioma desejado.
15
+ #
16
+ # @param historia [String] Texto base da história para gerar os cenários.
17
+ # @param idioma [String] Código do idioma, 'pt' por padrão.
18
+ # @return [String, nil] Cenários no formato Gherkin, ou nil em caso de erro.
19
+ #
20
+ def self.gerar_cenarios(historia, idioma = 'pt')
21
+ api_key = ENV['GEMINI_API_KEY']
22
+
23
+ keywords_pt = {
24
+ feature: "Funcionalidade",
25
+ scenario: "Cenário",
26
+ scenario_outline: "Esquema do Cenário",
27
+ examples: "Exemplos",
28
+ given: "Dado",
29
+ when: "Quando",
30
+ then: "Então",
31
+ and: "E"
32
+ }
33
+
34
+ keywords_en = {
35
+ feature: "Feature",
36
+ scenario: "Scenario",
37
+ scenario_outline: "Scenario Outline",
38
+ examples: "Examples",
39
+ given: "Given",
40
+ when: "When",
41
+ then: "Then",
42
+ and: "And"
43
+ }
44
+
45
+ keywords = idioma == 'en' ? keywords_en : keywords_pt
46
+
47
+ # Prompt base que instrui a IA a gerar cenários Gherkin no idioma indicado
48
+ prompt_base = <<~PROMPT
49
+ Gere cenários BDD no formato Gherkin, usando as palavras-chave de estrutura no idioma "#{idioma}":
50
+ Feature: #{keywords[:feature]}
51
+ Scenario: #{keywords[:scenario]}
52
+ Scenario Outline: #{keywords[:scenario_outline]}
53
+ Examples: #{keywords[:examples]}
54
+ Given: #{keywords[:given]}
55
+ When: #{keywords[:when]}
56
+ Then: #{keywords[:then]}
57
+ And: #{keywords[:and]}
58
+
59
+ Atenção: Os textos e descrições dos cenários e passos devem ser escritos em português, mesmo que as palavras-chave estejam em inglês.
60
+
61
+ História:
62
+ #{historia}
63
+ PROMPT
64
+
65
+ unless api_key
66
+ warn "❌ API Key do Gemini não encontrada no .env (GEMINI_API_KEY)"
67
+ return nil
68
+ end
69
+
70
+ uri = URI("#{GEMINI_API_URL}?key=#{api_key}")
71
+
72
+ # Estrutura do corpo da requisição para a API Gemini
73
+ request_body = {
74
+ contents: [
75
+ {
76
+ role: "user",
77
+ parts: [{ text: prompt_base }]
78
+ }
79
+ ]
80
+ }
81
+
82
+ # Executa requisição POST para a API Gemini
83
+ response = Net::HTTP.post(uri, request_body.to_json, { "Content-Type" => "application/json" })
84
+
85
+ if response.is_a?(Net::HTTPSuccess)
86
+ json = JSON.parse(response.body)
87
+
88
+ unless json["candidates"]&.is_a?(Array) && json["candidates"].any?
89
+ warn "❌ Resposta da IA sem candidatos válidos:"
90
+ warn JSON.pretty_generate(json)
91
+ return nil
92
+ end
93
+
94
+ texto_ia = json["candidates"].first.dig("content", "parts", 0, "text")
95
+ if texto_ia
96
+ # Limpeza e sanitização do texto para manter padrão Gherkin
97
+ texto_limpo = Bddgenx::GherkinCleaner.limpar(texto_ia)
98
+ Utils::StepCleaner.remover_steps_duplicados(texto_ia, idioma)
99
+
100
+ # Ajuste da diretiva de idioma na saída gerada
101
+ texto_limpo.sub!(/^# language: .*/, "# language: #{idioma}")
102
+ texto_limpo.prepend("# language: #{idioma}\n") unless texto_limpo.start_with?("# language:")
103
+
104
+ return texto_limpo
105
+ else
106
+ warn "❌ Resposta da IA sem conteúdo de texto"
107
+ warn JSON.pretty_generate(json)
108
+ return nil
109
+ end
110
+ else
111
+ warn "❌ Erro ao chamar Gemini: #{response.code} - #{response.body}"
112
+ return nil
113
+ end
114
+ end
115
+
116
+ ##
117
+ # Detecta o idioma do arquivo de feature pela linha "# language:".
118
+ #
119
+ # @param caminho_arquivo [String] Caminho do arquivo para detecção do idioma.
120
+ # @return [String] Código do idioma detectado (ex: 'pt'), padrão 'pt'.
121
+ #
122
+ def self.detecta_idioma_arquivo(caminho_arquivo)
123
+ return 'pt' unless File.exist?(caminho_arquivo)
124
+
125
+ File.foreach(caminho_arquivo) do |linha|
126
+ if linha =~ /^#\s*language:\s*(\w{2})/i
127
+ return $1.downcase
128
+ end
129
+ end
130
+
131
+ 'pt' # idioma padrão caso não encontre
132
+ end
133
+ end
134
+ end
135
+ end
@@ -4,10 +4,6 @@
4
4
  # Este arquivo define a classe Backup, responsável por criar cópias de segurança
5
5
  # de arquivos .feature antes de serem sobrescritos.
6
6
  # As cópias são salvas em 'reports/backup' com timestamp no nome.
7
-
8
- require 'fileutils'
9
- require 'time'
10
-
11
7
  module Bddgenx
12
8
  # Gerencia a criação de backups de arquivos .feature
13
9
  class Backup
@@ -6,11 +6,6 @@
6
6
  # preto e branco.
7
7
  # Utiliza a gem Prawn para renderização de texto e tabelas.
8
8
 
9
- require 'prawn'
10
- require 'prawn/table'
11
- require 'fileutils'
12
- require_relative 'fontLoader'
13
-
14
9
  # Suprime aviso de internacionalização para fontes AFM internas
15
10
  Prawn::Fonts::AFM.hide_m17n_warning = true
16
11
 
@@ -4,10 +4,6 @@
4
4
  # Este arquivo define a classe Tracer, responsável por gerar e manter
5
5
  # informações de rastreabilidade de cenários e passos em um arquivo CSV.
6
6
  # Útil para auditoria e análise de cobertura de cenários gerados.
7
-
8
- require 'csv'
9
- require 'fileutils'
10
-
11
7
  module Bddgenx
12
8
  # Classe para adicionar registros de rastreabilidade a um relatório CSV.
13
9
  class Tracer
@@ -4,10 +4,6 @@
4
4
  # Este arquivo define a classe FontLoader, responsável por localizar e carregar
5
5
  # famílias de fontes TrueType para uso com Prawn em geração de PDFs.
6
6
  # Busca os arquivos de fonte no diretório assets/fonts dentro da gem.
7
-
8
- require 'prawn'
9
- require 'rubygems' # para Gem.loaded_specs se necessário
10
-
11
7
  module Bddgenx
12
8
  # Gerencia o carregamento de fontes TTF para os documentos PDF.
13
9
  class FontLoader
@@ -0,0 +1,102 @@
1
+ module Bddgenx
2
+ class GherkinCleaner
3
+ # Método principal para limpar o texto Gherkin recebido.
4
+ # Executa uma sequência de operações para deixar o texto formatado e correto.
5
+ #
6
+ # Passos:
7
+ # - Remove blocos de código markdown (```).
8
+ # - Garante que exista somente uma linha # language: correta.
9
+ # - Corrige a indentação dos blocos Gherkin para o padrão esperado.
10
+ # - Remove espaços em branco no início/fim do texto.
11
+ #
12
+ # Retorna o texto limpo e formatado.
13
+ def self.limpar(texto)
14
+ texto = remover_blocos_markdown(texto)
15
+ texto = corrigir_language(texto)
16
+ texto = corrigir_indentacao(texto)
17
+ texto.strip
18
+ end
19
+
20
+ # Remove blocos markdown que usam as crases tripas (```).
21
+ # Muitas vezes a IA retorna os textos dentro desses blocos, que precisam ser limpos.
22
+ #
23
+ # Exemplo:
24
+ # ```gherkin
25
+ # Feature: Exemplo
26
+ # ```
27
+ #
28
+ # Essa função remove as linhas contendo as crases, deixando só o conteúdo.
29
+ def self.remover_blocos_markdown(texto)
30
+ texto.gsub(/```[a-z]*\n?/i, '').gsub(/```/, '')
31
+ end
32
+
33
+ # Garante que o arquivo contenha exatamente uma linha "# language: xx" no topo.
34
+ #
35
+ # Passos:
36
+ # - Procura a primeira ocorrência da linha de language no texto.
37
+ # - Remove todas as outras linhas duplicadas de language.
38
+ # - Se encontrar, move essa linha para o início do texto.
39
+ # - Se não encontrar, detecta o idioma do texto e adiciona a linha no topo.
40
+ #
41
+ # Isso evita erros de parsing em ferramentas BDD que exigem essa diretiva.
42
+ def self.corrigir_language(texto)
43
+ linhas = texto.lines
44
+ primeira_language = linhas.find { |linha| linha.strip.start_with?('# language:') }
45
+
46
+ # Remove todas as linhas duplicadas de language
47
+ linhas.reject! { |linha| linha.strip.start_with?('# language:') }
48
+
49
+ if primeira_language
50
+ # Insere a linha de language original no topo
51
+ linhas.unshift(primeira_language.strip + "\n")
52
+ else
53
+ # Se não existir, detecta o idioma e insere padrão
54
+ idioma = detectar_idioma(linhas.join)
55
+ linhas.unshift("# language: #{idioma}\n")
56
+ end
57
+
58
+ linhas.join
59
+ end
60
+
61
+ # Detecta o idioma do conteúdo baseado nas palavras-chave Gherkin presentes.
62
+ #
63
+ # Retorna:
64
+ # - 'pt' se encontrar palavras-chave em português (Dado, Quando, Então, E).
65
+ # - 'en' se encontrar palavras-chave em inglês (Given, When, Then, And).
66
+ # - 'pt' como padrão se não detectar.
67
+ #
68
+ # Isso ajuda a definir a diretiva # language: corretamente.
69
+ def self.detectar_idioma(texto)
70
+ return 'pt' if texto =~ /Dado|Quando|Então|E /i
71
+ return 'en' if texto =~ /Given|When|Then|And /i
72
+ 'pt' # padrão
73
+ end
74
+
75
+ # Corrige a indentação das linhas para seguir o padrão Gherkin:
76
+ #
77
+ # Feature e Funcionalidade no nível 0 (sem indentação).
78
+ # Scenario e Scenario Outline com 2 espaços.
79
+ # Passos (Given, When, Then, And e equivalentes PT) com 4 espaços.
80
+ # Tabelas (linhas que começam com '|') com 6 espaços.
81
+ #
82
+ # Outras linhas recebem indentação padrão de 2 espaços.
83
+ #
84
+ # Essa padronização melhora legibilidade e compatibilidade com parsers Gherkin.
85
+ def self.corrigir_indentacao(texto)
86
+ linhas = texto.lines.map do |linha|
87
+ if linha.strip.start_with?('Feature', 'Funcionalidade')
88
+ linha.strip + "\n"
89
+ elsif linha.strip.start_with?('Scenario', 'Cenário', 'Scenario Outline', 'Esquema do Cenário')
90
+ " #{linha.strip}\n"
91
+ elsif linha.strip.start_with?('Given', 'When', 'Then', 'And', 'Dado', 'Quando', 'Então', 'E')
92
+ " #{linha.strip}\n"
93
+ elsif linha.strip.start_with?('|')
94
+ " #{linha.strip}\n"
95
+ else
96
+ " #{linha.strip}\n"
97
+ end
98
+ end
99
+ linhas.join
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,81 @@
1
+ module Bddgenx
2
+ module Utils
3
+ class StepCleaner
4
+ # Remove passos duplicados em um texto de cenários BDD,
5
+ # levando em conta o idioma para identificar as keywords (Given, When, Then, And / Dado, Quando, Então, E)
6
+ #
7
+ # Parâmetros:
8
+ # - texto: string contendo o texto do cenário BDD
9
+ # - idioma: 'en' para inglês ou qualquer outro para português
10
+ #
11
+ # Retorna o texto com passos duplicados removidos, preservando a ordem original
12
+ def self.remover_steps_duplicados(texto, idioma)
13
+ # Define as keywords principais para o idioma
14
+ keywords = idioma == 'en' ? %w[Given When Then And] : %w[Dado Quando Então E]
15
+
16
+ # Conjunto para rastrear passos já vistos (versão canônica)
17
+ seen = Set.new
18
+ resultado = []
19
+
20
+ # Percorre linha a linha
21
+ texto.each_line do |linha|
22
+ # Verifica se a linha começa com uma das keywords
23
+ if keywords.any? { |kw| linha.strip.start_with?(kw) }
24
+ # Canonicaliza o passo para comparação sem variações irrelevantes
25
+ canonical = canonicalize_step(linha, keywords)
26
+
27
+ # Só adiciona se ainda não viu o passo canônico
28
+ unless seen.include?(canonical)
29
+ seen.add(canonical)
30
+ resultado << linha
31
+ end
32
+ else
33
+ # Linhas que não são passos são adicionadas normalmente
34
+ resultado << linha
35
+ end
36
+ end
37
+
38
+ # Retorna o texto reconstruído sem duplicatas
39
+ resultado.join
40
+ end
41
+
42
+ # Gera uma versão canônica (normalizada) do passo para facilitar
43
+ # a identificação de duplicatas mesmo com variações menores de texto.
44
+ #
45
+ # Exemplo: Dado "usuario" fez login e Dado <usuario> fez login
46
+ # gerarão o mesmo canonical para evitar repetição.
47
+ #
48
+ # Passos:
49
+ # - Remove a keyword (Given, When, etc) do começo
50
+ # - Substitui textos entre aspas, placeholders <> e números por <param>
51
+ # - Remove acentuação e pontuação para normalizar
52
+ # - Converte para minúsculas e remove espaços extras
53
+ #
54
+ # Parâmetros:
55
+ # - linha: string com o passo completo
56
+ # - keywords: array com as keywords para remoção
57
+ #
58
+ # Retorna uma string normalizada representando o passo
59
+ def self.canonicalize_step(linha, keywords)
60
+ texto = linha.dup.strip
61
+
62
+ # Remove a keyword do início, se existir
63
+ keywords.each do |kw|
64
+ texto.sub!(/^#{kw}\s+/i, '')
65
+ end
66
+
67
+ # Substitui textos entre aspas, placeholders e números por <param>
68
+ texto.gsub!(/"[^"]*"|<[^>]*>|\b\d+\b/, '<param>')
69
+
70
+ # Remove acentos usando Unicode Normalization Form KD (decompõe caracteres)
71
+ texto = Unicode.normalize_KD(texto).gsub(/\p{Mn}/, '')
72
+
73
+ # Remove pontuação, deixando apenas letras, números, espaços e <>
74
+ texto.gsub!(/[^a-zA-Z0-9\s<>]/, '')
75
+
76
+ # Converte para minúsculas, remove espaços extras e retorna
77
+ texto.downcase.strip.squeeze(" ")
78
+ end
79
+ end
80
+ end
81
+ end
@@ -4,7 +4,6 @@
4
4
  # Este arquivo define a classe Validator, responsável por validar a estrutura
5
5
  # de uma história antes de gerar cenários ou arquivos .feature.
6
6
  # Verifica presença de cabeçalho obrigatório e integridade dos grupos de passos.
7
-
8
7
  module Bddgenx
9
8
  # Valida objetos de história garantindo que possuam campos e blocos corretos.
10
9
  class Validator
data/lib/bddgenx.rb CHANGED
@@ -1,7 +1,16 @@
1
1
  #!/usr/bin/env ruby
2
- require_relative 'bddgenx/runner'
2
+ # Shebang para permitir execução direta do script no Linux/macOS, usando o interpretador Ruby do PATH
3
3
 
4
- # Só executa quando este arquivo for o entrypoint, não no require da gem
4
+ require_relative 'env'
5
+ # Carrega o arquivo 'env.rb' relativo a este script. Geralmente contém configurações e carregamento da gem Bddgenx.
6
+
7
+ ## Evita warns na saida do console
8
+ Gem::Specification.reset
9
+ # Reseta as especificações das gems carregadas para evitar warnings no console, comum em alguns ambientes Ruby.
10
+
11
+ # Só executa o código abaixo quando este arquivo for o ponto de entrada (entrypoint) da aplicação,
12
+ # evitando que o código seja executado quando este arquivo for apenas requerido por outro arquivo.
5
13
  if __FILE__ == $PROGRAM_NAME
6
14
  Bddgenx::Runner.execute
15
+ # Invoca o método principal da gem Bddgenx para iniciar a execução da ferramenta.
7
16
  end
data/lib/env.rb ADDED
@@ -0,0 +1,46 @@
1
+ # lib/bddgenx/env.rb
2
+
3
+ # Carregamento de bibliotecas padrão e gems externas usadas no projeto
4
+
5
+ require 'json' # Para manipulação de dados JSON
6
+ require 'net/http' # Para fazer requisições HTTP
7
+ require 'uri' # Para manipulação de URLs
8
+ require 'fileutils' # Para manipulação de arquivos e diretórios
9
+ require 'prawn' # Biblioteca para geração de PDFs
10
+ require 'prawn/table' # Suporte a tabelas no Prawn PDF
11
+ require 'prawn-svg' # Para incorporar SVG em PDFs com Prawn
12
+ require 'open3' # Para executar comandos externos com captura de saída
13
+ require 'faraday' # Cliente HTTP para Gemini API
14
+ require 'dotenv' # Para carregar variáveis de ambiente de arquivos .env
15
+ require 'unicode' # Para manipulação avançada de strings Unicode (ex: remoção de acentos)
16
+ require 'bigdecimal' # Para operações matemáticas precisas com decimais
17
+
18
+ # Configura o caminho base do projeto e carrega as gems definidas no Gemfile (se existir)
19
+ require 'bundler/setup' if File.exist?(File.expand_path('../../Gemfile', __FILE__))
20
+
21
+ # Carregamento dos módulos utilitários (helpers)
22
+ require_relative 'bddgenx/support/gherkin_cleaner' # Limpeza e normalização de textos Gherkin
23
+ require_relative 'bddgenx/support/remover_steps_duplicados' # Remoção de steps duplicados em features
24
+ require_relative 'bddgenx/support/validator' # Validação de dados e entrada
25
+ require_relative 'bddgenx/support/font_loader' # Carregamento de fontes para geração PDF
26
+
27
+ # Carregamento dos clientes para Integração com Inteligência Artificial
28
+ require_relative 'bddgenx/ia/gemini_cliente' # Cliente para API Gemini (Google)
29
+ require_relative 'bddgenx/ia/chatgtp_cliente' # Cliente para API ChatGPT (OpenAI)
30
+
31
+ # Carregamento dos geradores de BDD (features, steps e runner)
32
+ require_relative 'bddgenx/generators/generator' # Gerador principal de arquivos .feature
33
+ require_relative 'bddgenx/generators/steps_generator' # Gerador de arquivos steps.rb
34
+ require_relative 'bddgenx/generators/runner' # Classe responsável pela execução do processo de geração
35
+
36
+ # Parser do arquivo de entrada e versão da gem
37
+ require_relative 'parser' # Parser para interpretar arquivos de entrada
38
+ require_relative 'version' # Informação da versão da gem
39
+
40
+ # Relatórios e exportação
41
+ require_relative 'bddgenx/reports/pdf_exporter' # Exporta relatórios em PDF usando Prawn
42
+ require_relative 'bddgenx/reports/backup' # Mecanismo de backup dos arquivos gerados
43
+ require_relative 'bddgenx/reports/tracer' # Rastreabilidade dos processos
44
+
45
+ # Define variável de ambiente global para indicar que o ambiente BDDGENX está em modo desenvolvimento
46
+ ENV['BDDGENX_ENV'] = 'development'
@@ -4,8 +4,7 @@
4
4
  # Este arquivo define a classe Parser, responsável por ler e interpretar
5
5
  # arquivos de história (.txt), extraindo cabeçalho e blocos de passos e exemplos.
6
6
  # Utiliza constantes para identificação de tipos de blocos e suporta idiomas
7
- # Português e Inglês na marcação de idioma e blocos de exemplos.
8
-
7
+ # Português e Inglês na marcação de idioma e blocos de exemplos
9
8
  module Bddgenx
10
9
  # Tipos de blocos reconhecidos na história (.txt), incluindo variações em Português
11
10
  # e Inglês para blocos de exemplo.
@@ -42,10 +41,13 @@ module Bddgenx
42
41
  def self.ler_historia(caminho_arquivo)
43
42
  # Carrega linhas do arquivo, preservando linhas vazias e encoding UTF-8
44
43
  linhas = File.readlines(caminho_arquivo, encoding: 'utf-8').map(&:rstrip)
44
+ # parser.rb (durante leitura do .txt)
45
+ primeira_linha = File.readlines(caminho_arquivo).first
46
+ idioma_forcado = primeira_linha&.match(/^#\s*lang(?:uage)?\s*:\s*(\w+)/i)&.captures&.first
45
47
 
46
48
  # Detecta idioma no topo do arquivo: suporta '# lang: <codigo>' ou '# language: <codigo>'
47
49
  idioma = 'pt'
48
- if linhas.first =~ /^#\s*lang(?:uage)?\s*:\s*(\w+)/i
50
+ if linhas.first == idioma_forcado
49
51
  idioma = Regexp.last_match(1).downcase
50
52
  linhas.shift
51
53
  end
data/lib/version.rb ADDED
@@ -0,0 +1,14 @@
1
+ module Bddgenx
2
+ # Caminho absoluto para o arquivo VERSION, que fica 3 níveis acima deste arquivo:
3
+ # lib/bddgenx/version.rb → lib/bddgenx → lib → raiz do projeto
4
+ VERSION_FILE = File.expand_path("../../VERSION", __FILE__)
5
+
6
+ # Lê o conteúdo do arquivo VERSION para definir a constante VERSION
7
+ # Se o arquivo não existir, exibe um aviso e define o valor padrão "0.0.0"
8
+ VERSION = if File.exist?(VERSION_FILE)
9
+ File.read(VERSION_FILE).strip
10
+ else
11
+ warn "WARNING: VERSION file not found, defaulting to 0.0.0"
12
+ "0.0.0"
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bddgenx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.51
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Nascimento
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-05-16 00:00:00.000000000 Z
11
+ date: 2025-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prawn
@@ -52,6 +52,62 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.2.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: ruby-openai
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '8.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '8.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faraday
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 2.13.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 2.13.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: dotenv
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '3.1'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '3.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: unicode
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0.4'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0.4'
55
111
  description: Transforma arquivos .txt com histórias em arquivos .feature, com steps,
56
112
  rastreabilidade e integração com CI/CD.
57
113
  email:
@@ -70,16 +126,21 @@ files:
70
126
  - lib/bddgenx/assets/fonts/DejaVuSansMono-BoldOblique.ttf
71
127
  - lib/bddgenx/assets/fonts/DejaVuSansMono-Oblique.ttf
72
128
  - lib/bddgenx/assets/fonts/DejaVuSansMono.ttf
73
- - lib/bddgenx/generator.rb
74
- - lib/bddgenx/runner.rb
75
- - lib/bddgenx/steps_generator.rb
76
- - lib/bddgenx/utils/backup.rb
77
- - lib/bddgenx/utils/fontLoader.rb
78
- - lib/bddgenx/utils/parser.rb
79
- - lib/bddgenx/utils/pdf_exporter.rb
80
- - lib/bddgenx/utils/tracer.rb
81
- - lib/bddgenx/utils/validator.rb
82
- - lib/bddgenx/version.rb
129
+ - lib/bddgenx/generators/generator.rb
130
+ - lib/bddgenx/generators/runner.rb
131
+ - lib/bddgenx/generators/steps_generator.rb
132
+ - lib/bddgenx/ia/chatgtp_cliente.rb
133
+ - lib/bddgenx/ia/gemini_cliente.rb
134
+ - lib/bddgenx/reports/backup.rb
135
+ - lib/bddgenx/reports/pdf_exporter.rb
136
+ - lib/bddgenx/reports/tracer.rb
137
+ - lib/bddgenx/support/font_loader.rb
138
+ - lib/bddgenx/support/gherkin_cleaner.rb
139
+ - lib/bddgenx/support/remover_steps_duplicados.rb
140
+ - lib/bddgenx/support/validator.rb
141
+ - lib/env.rb
142
+ - lib/parser.rb
143
+ - lib/version.rb
83
144
  homepage: https://github.com/David-Nascimento/bdd-generation
84
145
  licenses:
85
146
  - MIT