module Envin::Converter

Public Instance Methods

build_child_split(key_split, v, coll=[], level=0) click to toggle source
# File lib/envin/converter.rb, line 15
def build_child_split(key_split, v, coll=[], level=0)
  key_identifier = key_split.take(level + 1).join('-')
  lines = ""
  if !coll.include?(key_identifier) && key_split.length != level + 1
    coll << key_identifier
    lines += "#{' ' * level}#{key_split[level].downcase}:\n"
    child_line, _ = build_child_split(key_split, v,coll, level+1)
    lines += child_line
  else
    lines += "#{' ' * (key_split.length - 1) }#{key_split.last.downcase}: #{v}\n"
  end
  return lines, coll
end
build_yaml_from_env(prefix) click to toggle source
# File lib/envin/converter.rb, line 29
def build_yaml_from_env prefix
  env_prefix = ENV.select{|k,v| k =~ /^#{prefix}/ }
  coll = []
  lines = ""
  Hash[env_prefix.sort].each do |key, v|
    key_split = key.split("__")
    if key_split.length == 1
      lines += "#{key.gsub(/^#{prefix}/, '').downcase}: #{v}\n"
    elsif key_split.length > 1
      key_split[0] = key_split[0].gsub(prefix, '').downcase
      child_line, coll = build_child_split(key_split, v, coll)
      lines += child_line
    end
  end

  if lines != ""
    YAML.load(lines)
  else
    return {}
  end
end
load_yaml(file, root_element="production") click to toggle source
# File lib/envin/converter.rb, line 8
def load_yaml file, root_element="production"
  return {} if !File.exists?(file)
  file_content = ERB.new(File.read(file)).result
  content = YAML.load(file_content)
  (!root_element ? content : content[root_element]) || {}
end
overwrite(source_file:, target_file: false , prefix:, root_element: "production") click to toggle source
# File lib/envin/converter.rb, line 51
def overwrite source_file:, target_file: false , prefix:, root_element: "production"
  target_file = source_file if !target_file
  config_content = File.exist?(source_file) ? load_yaml(source_file, root_element) : {}
  config_env     = build_yaml_from_env(prefix)
  return if config_env.keys.size == 0
  root = {}
  if root_element
    root[root_element] = config_content.deep_merge(config_env)
  else
    root = config_content.deep_merge(config_env)
  end

  File.write(target_file, YAML.dump(root))
end