Sha256: 1ac1f0a969ca40347890639728121332cb5f57089926b3b6072f77192143f821

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

require 'psych'
require 'pathname'
require 'base64'

class EnvVariablesService
  class << self
    def substitute_env_variables(compose_file_data)
      compose_file_data.gsub(/\${1,2}\{?([?:\-_A-Za-z0-9]+)\}?/) do |variable|
        next variable if variable.start_with?('$$')

        variable_content = variable.match(/[?:\-_A-Za-z0-9]+/).to_s
        fetch_variable_value(variable_content)
      end
    end

    private

    def fetch_variable_value(variable_content)
      variable_name = variable_content.match(/^[_A-Za-z0-9]+/).to_s
      variable_value = ENV[variable_name]
      return variable_value unless variable_value.nil?
      return fetch_variable_default_value(variable_content) if variable_has_default_value?(variable_content)

      error_message = if variable_has_error_message?(variable_content)
        fetch_env_error_message(variable_content)
      else
        "Environment variable #{variable_name} doesn't exist"
      end
      raise StandardError.new(error_message)
    end

    def variable_has_default_value?(variable_content)
      variable_content.include?('-')
    end

    def fetch_variable_default_value(variable_content)
      variable_content.split('-', 2).last
    end

    def variable_has_error_message?(variable_content)
      variable_content.include?('?')
    end

    def fetch_env_error_message(variable_content)
      variable_content.split('?', 2).last
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
uffizzi-cli-1.0.5 lib/uffizzi/services/env_variables_service.rb