Class: Bddgenx::PropertiesLoader

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

Class Method Summary collapse

Class Method Details

.load_env_variablesObject

Carregar as variáveis do arquivo .env

Este método utiliza a gem dotenv para carregar variáveis de ambiente a partir de um arquivo .env. Ele carrega as variáveis do arquivo .env para o ambiente de execução, onde elas ficam disponíveis via ‘ENV` em qualquer parte do código.



24
25
26
# File 'lib/bddgenx/support/properties_loader.rb', line 24

def self.load_env_variables
  Dotenv.load  # Carrega as variáveis do .env automaticamente

end

.load_propertiesHash

Carregar e substituir propriedades de arquivos .properties

Este método localiza todos os arquivos .properties no diretório raiz do projeto, lê seu conteúdo, substitui os placeholders pelas variáveis de ambiente, carrega as propriedades e mescla essas propriedades em um único hash.

Após carregar as propriedades, ele também define as variáveis de ambiente no Ruby (via ENV) usando as propriedades carregadas, mas não sobrescreve as variáveis de ambiente já definidas.

Returns:

  • (Hash)

    O hash contendo as propriedades carregadas e mescladas dos arquivos .properties.



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/bddgenx/support/properties_loader.rb', line 66

def self.load_properties
  # Carregar variáveis do .env primeiro

  load_env_variables

  # Localizar arquivos .properties na raiz do projeto

  properties_files = Dir.glob(File.expand_path('../*.properties', __dir__))

  properties = {}

  properties_files.each do |file|
    # Forçar a leitura do arquivo com codificação UTF-8 e lidar com caracteres inválidos

    content = read_file_with_correct_encoding(file)

    # Substituir os placeholders antes de carregar as propriedades

    content = replace_placeholders(content)

    # Carregar as propriedades do arquivo

    file_properties = JavaProperties::Properties.load(StringIO.new(content))

    # Mesclar as propriedades carregadas no hash

    properties.merge!(file_properties.to_h)
  end

  # Agora, define as variáveis de ambiente a partir das propriedades carregadas

  set_environment_variables(properties)

  properties
end

.read_file_with_correct_encoding(file) ⇒ String

Função para garantir que o arquivo seja lido com a codificação correta

Este método lê um arquivo especificado com codificação UTF-8. Caso o arquivo contenha caracteres inválidos, eles são substituídos por um caractere de substituição, garantindo que o conteúdo seja lido corretamente.

Parameters:

  • file (String)

    O caminho do arquivo a ser lido.

Returns:

  • (String)

    O conteúdo do arquivo lido, com caracteres inválidos substituídos, se necessário.



50
51
52
53
54
# File 'lib/bddgenx/support/properties_loader.rb', line 50

def self.read_file_with_correct_encoding(file)
  # Lê o arquivo com codificação UTF-8 e ignora caracteres inválidos

  content = File.read(file, encoding: 'UTF-8')
  content.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?')
end

.replace_placeholders(content) ⇒ String

Função para substituir variáveis no conteúdo do arquivo .properties

Este método recebe o conteúdo de um arquivo .properties e substitui os placeholders no formato ‘{VAR_NAME}` pelas variáveis de ambiente correspondentes, se definidas. Caso a variável de ambiente não esteja definida, o placeholder original é mantido no conteúdo.

Parameters:

  • content (String)

    O conteúdo do arquivo .properties a ser processado.

Returns:

  • (String)

    O conteúdo com os placeholders substituídos pelas variáveis de ambiente.



36
37
38
39
40
41
# File 'lib/bddgenx/support/properties_loader.rb', line 36

def self.replace_placeholders(content)
  content.gsub!(/\{\{(\w+)\}\}/) do |match|
    ENV[$1] || match  # Substitui pela variável de ambiente ou mantém o placeholder

  end
  content
end

.set_environment_variables(properties) ⇒ Object

Função para definir variáveis de ambiente a partir das propriedades carregadas

Este método percorre as propriedades carregadas e as define como variáveis de ambiente (ENV) no Ruby. Se a variável de ambiente já estiver definida (por exemplo, pelo .env), ela não será sobrescrita.

Parameters:

  • properties (Hash)

    O hash contendo as propriedades carregadas dos arquivos .properties.



101
102
103
104
105
106
# File 'lib/bddgenx/support/properties_loader.rb', line 101

def self.set_environment_variables(properties)
  properties.each do |key, value|
    # Se a variável de ambiente já estiver definida, não sobrescreve

    ENV[key.upcase] ||= value
  end
end