Class: Bddgenx::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/bddgenx/support/validator.rb

Overview

Valida objetos de história garantindo que possuam campos e blocos corretos.

Class Method Summary collapse

Class Method Details

.validar(historia) ⇒ Boolean

Valida o hash de história fornecido.

Verifica:

  • Presença das chaves :como, :quero, :para no cabeçalho

  • Presença de pelo menos um grupo em :grupos

  • Cada grupo deve ter ao menos passos ou exemplos

  • Grupos do tipo “EXAMPLES” devem conter uma tabela de exemplos válida

Parameters:

  • historia (Hash)

    Objeto de história com chaves :como, :quero, :para e :grupos

Returns:

  • (Boolean)

    Retorna true se a história for válida; caso contrário, false



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/bddgenx/support/validator.rb', line 20

def self.validar(historia)
  erros = []

  # Verificação do cabeçalho obrigatório
  unless historia[:como] && historia[:quero] && historia[:para]
    erros << I18n.t('validator.missing_header')
  end

  # Verificação de grupos de passos
  if historia[:grupos].nil? || historia[:grupos].empty?
    erros << I18n.t('validator.no_blocks')
  else
    historia[:grupos].each_with_index do |grupo, idx|
      # Cada grupo deve conter passos ou exemplos
      if (grupo[:passos].nil? || grupo[:passos].empty?) &&
         (grupo[:exemplos].nil? || grupo[:exemplos].empty?)
        erros << I18n.t('validator.empty_group', index: idx + 1, type: grupo[:tipo])
      end

      # Validação específica para blocos de exemplos
      if grupo[:tipo].casecmp('EXAMPLES').zero? &&
         grupo[:exemplos].none? { |l| l.strip.start_with?('|') }
        erros << I18n.t('validator.invalid_examples', index: idx + 1)
      end
    end
  end

  # Exibe erros e retorna false se houver falhas
  if erros.any?
    puts I18n.t('validator.found_errors')
    erros.each { |e| puts "   - #{e}" }
    return false
  end

  # História válida
  true
end