bddgenx 2.0.5 → 2.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ee7808e2b0f0cf6e65b1dbc5ea11689a1522dbc06ec2db6ed35494329920913
4
- data.tar.gz: f88f37264c7e26caa90f4b25aef60e194cd5b08d7a97819b4aa623a7e99d6b04
3
+ metadata.gz: 25401140b3582440879672b4bb6b39e4d8e57ae3ce34aaad5341c2a526ee7a5b
4
+ data.tar.gz: e18940f3b3408bf0559e9c356bedf519161849e6f75860ccf23910897fc79685
5
5
  SHA512:
6
- metadata.gz: 1bdc7124701b3fd7eba6e60993e75e31fb19613a1ae53cb7549afeae1c0d4a7f167a3e5c19bf6805ee118ffd6a6c7a6b5d29b0d25e34e894dbfb86c0e45f2879
7
- data.tar.gz: eec2871ad622cb5c638163854dbb7dabcb5da57e6bb784732c561c50cc1a4fabc81c3647b82c63509a6bd125e72801db2a69a88415d550af44ccf9f944ed7ac7
6
+ metadata.gz: 94c61a829d179d956e57e8ccce68c291be166ed0b54ca764ff4905f6381b649636b12b2473379b4d3426c6841cded41dfc952abb651ef8cf4d7bf52bc0546860
7
+ data.tar.gz: df64d578f90848f168e80da1e945bbe3bd9106810b5ae5c1f68a9678f30c5be19610e540c668d1223dbcd16f8398eb6696814db63e82755fca13a06e68edac30
data/README.md CHANGED
@@ -3,58 +3,79 @@
3
3
 
4
4
  ## Visão Geral
5
5
 
6
- Ferramenta Ruby para gerar automaticamente arquivos Gherkin (`.feature`) e definições de passos (`steps.rb`) a partir de histórias em texto. Atende aos padrões ISTQB, suporta parametrização com blocos de exemplos e fornece relatórios de QA (rastreabilidade, backups e PDF).
6
+ Ferramenta Ruby para gerar automaticamente arquivos Gherkin (`.feature`) e definições de passos (`steps.rb`) a partir de histórias em texto. Atende aos padrões ISTQB, suporta parametrização com blocos de exemplos e fornece relatórios de QA (rastreabilidade, backups e PDF). Também suporta geração via IA (OpenAI / Gemini) e configuração por ambiente.
7
+
8
+ ---
9
+
10
+ ## Estrutura do Projeto
7
11
 
8
- ## Estrutura do projeto
9
12
  ```
10
13
  bdd-generation/
11
- ├── .github/ # Workflows do GitHub Actions
14
+ ├── .github/ # Workflows de CI/CD
12
15
  │ └── workflows/
13
- │ └── main.yml
14
- ├── bin/
15
- └── console # Execução local (se necessário)
16
- ├── features/ # Gherkin gerados automaticamente
17
- │ └── steps/ # Steps correspondentes
18
- ├── input/ # Histórias de entrada
16
+ │ └── main.yml # Workflow de build/test
17
+ ├── bin/ # Scripts CLI e de configuração
18
+ ├── bddgenx # Executável CLI para gerar BDD (static/chatgpt/gemini)
19
+ │ └── setup.rb # Script para preparar o ambiente local (gera .env, input/)
20
+ ├── features/ # Gherkin gerados automaticamente
21
+ │ └── steps/ # Steps correspondentes aos cenários
22
+ ├── input/ # Arquivos de entrada (.txt com histórias)
19
23
  │ ├── historia.txt
20
24
  │ ├── historia_en.txt
21
25
  │ └── ...
22
26
  ├── lib/
23
- └── bddgenx/
24
- ├── ia/ # Módulo de IA
25
- │ ├── chatgpt_cliente.rb
26
- └── gemini_cliente.rb
27
- ├── generators/ # Responsável por geração
28
- ├── generator.rb
29
- │ ├── steps_generator.rb
30
- └── runner.rb
31
- ├── reports/ # Exportadores, backups e rastreabilidade
32
- ├── pdf_exporter.rb
33
- │ ├── backup.rb
34
- └── tracer.rb
35
- ├── support/ # Utilitários auxiliares
36
- ├── gherkin_cleaner.rb
37
- ├── remover_steps_duplicados.rb
38
- │ ├── validator.rb
39
- └── font_loader.rb
40
- ├── parser.rb # Parse do .txt
41
- ├── version.rb # Versão da gem
42
- └── bddgenx.rb # Arquivo principal (require central)
43
- ├── reports/ # Saídas: PDF, backup, rastreabilidade
44
- │ ├── pdf/
45
- ├── backup/
46
- └── rastreabilidade/
47
- ├── .env # Variáveis de ambiente
48
- ├── .gitignore
49
- ├── bddgenx.gemspec
50
- ├── bump_version.sh
27
+ ├── bddgenx/
28
+ ├── generators/ # Lógica de geração de features e execução geral
29
+ ├── generator.rb
30
+ │ ├── steps_generator.rb
31
+ │ │ └── runner.rb
32
+
33
+ │ ├── ia/ # Integração com APIs de IA
34
+ │ ├── chatgpt_cliente.rb
35
+ │ │ └── gemini_cliente.rb
36
+
37
+ │ ├── reports/ # Exportação de artefatos QA
38
+ │ ├── backup.rb
39
+ │ │ ├── pdf_exporter.rb
40
+ │ └── tracer.rb
41
+
42
+ │ ├── support/ # Utilitários auxiliares e validadores
43
+ │ ├── font_loader.rb
44
+ │ │ ├── gherkin_cleaner.rb
45
+ │ │ ├── remover_steps_duplicados.rb
46
+ │ │ └── validator.rb
47
+ │ │ │
48
+ ├── configuration.rb # Configuração global da gem (modo, ENV keys)
49
+ │ └── version.rb # Leitura da versão a partir do arquivo VERSION
50
+
51
+ ├── bddgenx.rb # Entrada principal da gem (require env)
52
+ │ └── parser.rb # Parser de arquivos de entrada
53
+ ├── reports/ # Artefatos gerados
54
+ ├── pdf/ # Features exportadas em PDF
55
+ │ ├── backup/ # Versões antigas de features
56
+ │ └── rastreabilidade/ # Arquivos de rastreabilidade (se implementado)
57
+ ├── spec/ # Testes unitários RSpec
58
+ │ ├── support/
59
+ │ ├── utils/
60
+ │ ├── ia/
61
+ │ ├── spec_helper.rb
62
+ │ └── version_spec.rb
63
+ ├── .env # Arquivo com chaves reais (não versionado)
64
+ ├── .env.example # Modelo para configurar variáveis de ambiente
65
+ ├── .gitignore # Arquivos/pastas ignoradas pelo Git
66
+ ├── bddgenx.gemspec # Especificação da gem
67
+ ├── bump_version.sh # Script de versionamento automático (semântico)
51
68
  ├── Gemfile
52
69
  ├── Gemfile.lock
53
70
  ├── LICENSE
54
- ├── Rakefile
55
- ├── README.md
56
- └── VERSION
71
+ ├── Rakefile # Tarefas automatizadas (static, chatgpt, gemini)
72
+ ├── README.md # Documentação principal do projeto
73
+ └── VERSION # Arquivo contendo a versão atual da gem
74
+
57
75
  ```
76
+
77
+ ---
78
+
58
79
  ## Instalação
59
80
 
60
81
  Adicione ao seu `Gemfile`:
@@ -63,44 +84,70 @@ Adicione ao seu `Gemfile`:
63
84
  gem 'bddgenx'
64
85
  ```
65
86
 
66
- Execute:
87
+ Ou instale diretamente:
88
+
89
+ ```bash
90
+ gem install bddgenx
91
+ ```
92
+
93
+ ---
94
+
95
+ ## 🔧 Configuração
96
+
97
+ ### 1. Instale dependências
67
98
 
68
99
  ```bash
69
100
  bundle install
70
101
  ```
71
102
 
72
- Ou instale diretamente:
103
+ ### 2. Configure seu `.env`
73
104
 
74
105
  ```bash
75
- gem install bddgenx
106
+ cp .env.example .env
76
107
  ```
77
108
 
78
- ## Uso no Código
109
+ Edite o `.env`:
79
110
 
80
- ```ruby
81
- require 'bddgenx'
111
+ ```env
112
+ OPENAI_API_KEY=sk-...
113
+ GEMINI_API_KEY=ya29-...
114
+ BDDGENX_MODE=chatgpt # static | chatgpt | gemini
115
+ ```
82
116
 
83
- # Gera todas as features e steps a partir dos .txt em input/
84
- Bddgenx::Runner.execute
117
+ > 🔐 Dica: nunca versionar o `.env` ele está no `.gitignore`
118
+
119
+ ---
120
+
121
+ ## 🚀 Uso com Rake
122
+
123
+ Com os arquivos `.txt` dentro da pasta `input/`, execute:
124
+
125
+ ```bash
126
+ rake bddgenx:static # geração sem IA
127
+ rake bddgenx:chatgpt # usando ChatGPT
128
+ rake bddgenx:gemini # usando Gemini
85
129
  ```
86
130
 
87
- ## Tarefa Rake (opcional)
131
+ > O modo pode ser sobrescrito via ENV ou `Bddgenx.configure`
88
132
 
89
- Em um projeto Rails ou Ruby com Rake, adicione ao `Rakefile`:
133
+ ---
134
+
135
+ ## 📦 Geração manual via Ruby
90
136
 
91
137
  ```ruby
92
138
  require 'bddgenx'
93
- require 'rake'
94
139
 
95
- namespace :bddgenx do
96
- desc 'Gera .feature e steps a partir de histórias em input/'
97
- task :gerar do
98
- Bddgenx::Runner.execute
99
- end
140
+ Bddgenx.configure do |config|
141
+ config.mode = :chatgpt
142
+ config.openai_api_key_env = 'OPENAI_API_KEY'
100
143
  end
144
+
145
+ Bddgenx::Runner.execute
101
146
  ```
102
147
 
103
- ## Formato do Arquivo de Entrada (`.txt`)
148
+ ---
149
+
150
+ ## 📝 Formato do Arquivo de Entrada (`.txt`)
104
151
 
105
152
  ```txt
106
153
  # language: pt
@@ -113,19 +160,36 @@ Quando preencho <email> e <senha>
113
160
  Então vejo a tela inicial
114
161
 
115
162
  [EXAMPLES]
116
- | email | senha | resultado |
117
- | user@site.com | 123456 | login realizado |
118
- | errado@site.com | senha | credenciais inválidas |
163
+ | email | senha |
164
+ | user@site.com | 123456 |
165
+ | errado@site.com | senha |
119
166
  ```
120
167
 
121
- ## Artefatos de QA
168
+ ---
122
169
 
123
- * **Backup**: versões antigas de `.feature` em `reports/backup` com timestamp
124
- * **PDF**: exporta features em P/B para `reports/pdf` via `PDFExporter`
170
+ ## 🧪 Setup Rápido para Novos Usuários
125
171
 
126
- ## Integração CI/CD
172
+ ```bash
173
+ ruby bin/setup.rb
174
+ ```
175
+
176
+ Esse comando:
177
+
178
+ - Cria `.env` a partir de `.env.example`
179
+ - Garante que `input/` existe
180
+
181
+ ---
127
182
 
128
- Exemplo de GitHub Actions:
183
+ ## 🧾 Artefatos Gerados
184
+
185
+ - ✅ `.feature` → dentro de `features/`
186
+ - ✅ `steps.rb` → dentro de `features/steps/`
187
+ - 🗂️ Backup automático → `reports/backup/`
188
+ - 📄 PDF das features → `reports/pdf/`
189
+
190
+ ---
191
+
192
+ ## ⚙️ CI/CD Exemplo com GitHub Actions
129
193
 
130
194
  ```yaml
131
195
  jobs:
@@ -135,11 +199,15 @@ jobs:
135
199
  - uses: actions/checkout@v3
136
200
  - uses: ruby/setup-ruby@v1
137
201
  with:
138
- ruby-version: '3.x'
202
+ ruby-version: '3.1'
139
203
  - run: bundle install
140
- - run: bundle exec ruby -e "require 'bddgenx'; Bddgenx::Runner.execute(only_new: true)"
204
+ - run: bundle exec rake bddgenx:chatgpt
205
+ env:
206
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
141
207
  ```
142
208
 
209
+ ---
210
+
143
211
  ## Licença
144
212
 
145
213
  MIT © 2025 David Nascimento
data/Rakefile CHANGED
@@ -1,55 +1,49 @@
1
1
  # Rakefile
2
- # Tarefas para geração automática de BDD e relatórios com bddgenx
3
-
2
+ require_relative 'lib/env'
4
3
  require 'rake'
5
- require 'fileutils'
6
- require 'bddgenx'
7
4
 
8
5
  namespace :bddgenx do
9
- desc 'Gerar arquivos .feature, steps, rastreabilidade e backups'
10
- task :gerar, [:only_new, :input_dir] do |t, args|
11
- # Parâmetros: only_new (true/false), input_dir (pasta com .txt)
12
- args.with_defaults(only_new: 'false', input_dir: 'input')
13
- only_new = args.only_new == 'true'
14
- input_dir = args.input_dir
15
-
16
- files = FileList["#{input_dir}/*.txt"]
17
- if files.empty?
18
- puts "❌ Nenhum arquivo encontrado em \#{input_dir}"
19
- next
20
- end
6
+ desc 'Inicializar projeto'
7
+ task :setup do
8
+ Bddgenx::Setup.inicializar_projeto
9
+ end
21
10
 
22
- files.each do |file|
23
- puts "🔄 Processando história: \#{file}"
24
- historia = Bddgenx::Parser.ler_historia(file)
25
- next unless Bddgenx::Validator.validar(historia)
11
+ desc 'Executa a geração BDD usando o modo atual (static, chatgpt, gemini)'
12
+ task :generate do
13
+ puts "⚙️ Modo de geração: #{Bddgenx.configuration.mode}"
26
14
 
27
- feature_path, conteudo = Bddgenx::Generator.gerar_feature(historia)
15
+ # Evita que ARGV contenha o nome da task (como "bddgenx:static")
16
+ ARGV.clear
28
17
 
29
- Bddgenx::Backup.salvar_versao_antiga(feature_path)
30
- Bddgenx::Generator.salvar_feature(feature_path, conteudo)
18
+ Bddgenx::Runner.execute
19
+ end
31
20
 
32
- Bddgenx::StepsGenerator.gerar_passos(feature_path)
33
- Bddgenx::Tracer.adicionar_entrada(historia, feature_path)
21
+ desc 'Gera features no modo estático (sem IA)'
22
+ task :static do
23
+ Bddgenx.configure do |config|
24
+ config.mode = :static
34
25
  end
35
-
36
- puts "✅ Geração concluída#{' (apenas novos)' if only_new}!"
26
+ ENV['BDDGENX_MODE'] = 'static'
27
+ Rake::Task['bddgenx:generate'].invoke
37
28
  end
38
29
 
39
- desc 'Exportar todos os arquivos .feature para PDF'
40
- task :pdf do
41
- puts '📦 Exportando features para PDF...'
42
- result = Bddgenx::PDFExporter.exportar_todos
43
- puts " Gerados: \#{result[:generated].size}, Pulados: \#{result[:skipped].size}"
30
+ desc 'Gera features usando ChatGPT'
31
+ task :chatgpt do
32
+ Bddgenx.configure do |config|
33
+ config.mode = :chatgpt
34
+ config.openai_api_key_env = 'OPENAI_API_KEY'
35
+ end
36
+ ENV['BDDGENX_MODE'] = 'chatgpt'
37
+ Rake::Task['bddgenx:generate'].invoke
44
38
  end
45
39
 
46
- desc 'Remover diretórios gerados (reports/ e features/)'
47
- task :clean do
48
- %w[reports features].each do |dir|
49
- FileUtils.rm_rf(dir)
50
- puts "🗑️ Diretório removido: \#{dir}"
40
+ desc 'Gera features usando Gemini'
41
+ task :gemini do
42
+ Bddgenx.configure do |config|
43
+ config.mode = :gemini
44
+ config.gemini_api_key_env = 'GEMINI_API_KEY'
51
45
  end
46
+ ENV['BDDGENX_MODE'] = 'gemini'
47
+ Rake::Task['bddgenx:generate'].invoke
52
48
  end
53
49
  end
54
-
55
- task default: 'bddgenx:gerar'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.5
1
+ 2.2.0
@@ -0,0 +1,35 @@
1
+ # lib/bddgenx/configuration.rb
2
+ module Bddgenx
3
+ class Configuration
4
+ # :static, :chatgpt ou :gemini
5
+ attr_accessor :mode
6
+
7
+ # Nomes das ENV vars para as chaves
8
+ attr_accessor :openai_api_key_env, :gemini_api_key_env
9
+
10
+ def initialize
11
+ @mode = :static
12
+ @openai_api_key_env = 'OPENAI_API_KEY'
13
+ @gemini_api_key_env = 'GEMINI_API_KEY'
14
+ end
15
+
16
+ # Retorna a chave real, carregada do ENV
17
+ def openai_api_key
18
+ ENV[@openai_api_key_env]
19
+ end
20
+
21
+ def gemini_api_key
22
+ ENV[@gemini_api_key_env]
23
+ end
24
+ end
25
+
26
+ # Singleton de configuração
27
+ def self.configuration
28
+ @configuration ||= Configuration.new
29
+ end
30
+
31
+ # DSL para configurar
32
+ def self.configure
33
+ yield(configuration)
34
+ end
35
+ end
@@ -21,7 +21,7 @@ module Bddgenx
21
21
  # @return [String] Cenários gerados em formato Gherkin com palavras-chave no idioma indicado.
22
22
  #
23
23
  def self.gerar_cenarios(historia, idioma = 'pt')
24
- api_key = ENV['OPENAI_API_KEY']
24
+ api_key = Bddgenx.configuration.openai_api_key # para ChatGPT
25
25
 
26
26
  unless api_key
27
27
  warn "❌ API Key do ChatGPT não encontrada no .env (OPENAI_API_KEY)"
@@ -18,7 +18,7 @@ module Bddgenx
18
18
  # @return [String, nil] Cenários no formato Gherkin, ou nil em caso de erro.
19
19
  #
20
20
  def self.gerar_cenarios(historia, idioma = 'pt')
21
- api_key = ENV['GEMINI_API_KEY']
21
+ api_key = Bddgenx.configuration.gemini_api_key # para Gemini
22
22
 
23
23
  keywords_pt = {
24
24
  feature: "Funcionalidade",
@@ -1,7 +1,7 @@
1
1
  module Bddgenx
2
2
  # Caminho absoluto para o arquivo VERSION, que fica 3 níveis acima deste arquivo:
3
3
  # lib/bddgenx/version.rb → lib/bddgenx → lib → raiz do projeto
4
- VERSION_FILE = File.expand_path("../../VERSION", __FILE__)
4
+ VERSION_FILE = File.expand_path("../../../VERSION", __FILE__)
5
5
 
6
6
  # Lê o conteúdo do arquivo VERSION para definir a constante VERSION
7
7
  # Se o arquivo não existir, exibe um aviso e define o valor padrão "0.0.0"
data/lib/env.rb CHANGED
@@ -15,6 +15,8 @@ require 'dotenv' # Para carregar variáveis de ambiente de arquivos .env
15
15
  require 'unicode' # Para manipulação avançada de strings Unicode (ex: remoção de acentos)
16
16
  require 'bigdecimal' # Para operações matemáticas precisas com decimais
17
17
 
18
+ Dotenv.load
19
+
18
20
  # Configura o caminho base do projeto e carrega as gems definidas no Gemfile (se existir)
19
21
  require 'bundler/setup' if File.exist?(File.expand_path('../../Gemfile', __FILE__))
20
22
 
@@ -35,12 +37,15 @@ require_relative 'bddgenx/generators/runner' # Classe responsá
35
37
 
36
38
  # Parser do arquivo de entrada e versão da gem
37
39
  require_relative 'parser' # Parser para interpretar arquivos de entrada
38
- require_relative 'version' # Informação da versão da gem
40
+ require_relative 'bddgenx/version' # Informação da versão da gem
39
41
 
40
42
  # Relatórios e exportação
41
43
  require_relative 'bddgenx/reports/pdf_exporter' # Exporta relatórios em PDF usando Prawn
42
44
  require_relative 'bddgenx/reports/backup' # Mecanismo de backup dos arquivos gerados
43
45
  require_relative 'bddgenx/reports/tracer' # Rastreabilidade dos processos
44
46
 
47
+ require_relative 'bddgenx/configuration' # Configuração das variaveis de IA
48
+ require_relative '../bin/setup' # Verifica estrutura do projeto, caso nao exista cria a nova.
49
+
45
50
  # Define variável de ambiente global para indicar que o ambiente BDDGENX está em modo desenvolvimento
46
51
  ENV['BDDGENX_ENV'] = 'development'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bddgenx
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Nascimento
@@ -126,6 +126,7 @@ files:
126
126
  - lib/bddgenx/assets/fonts/DejaVuSansMono-BoldOblique.ttf
127
127
  - lib/bddgenx/assets/fonts/DejaVuSansMono-Oblique.ttf
128
128
  - lib/bddgenx/assets/fonts/DejaVuSansMono.ttf
129
+ - lib/bddgenx/configuration.rb
129
130
  - lib/bddgenx/generators/generator.rb
130
131
  - lib/bddgenx/generators/runner.rb
131
132
  - lib/bddgenx/generators/steps_generator.rb
@@ -138,9 +139,9 @@ files:
138
139
  - lib/bddgenx/support/gherkin_cleaner.rb
139
140
  - lib/bddgenx/support/remover_steps_duplicados.rb
140
141
  - lib/bddgenx/support/validator.rb
142
+ - lib/bddgenx/version.rb
141
143
  - lib/env.rb
142
144
  - lib/parser.rb
143
- - lib/version.rb
144
145
  homepage: https://github.com/David-Nascimento/bdd-generation
145
146
  licenses:
146
147
  - MIT