module Unenviable

Handles loading a YAML file that will describe what ENV variables are necessary for a twelve-factor app in a specific environment.

Attributes

env_list[W]

Public Class Methods

check() click to toggle source
# File lib/unenviable.rb, line 13
def self.check
  load_env_descriptions unless @env_list
  Dotenv.load if Gem::Specification::find_all_by_name('dotenv').any?
  discrepancies = { required: [], optional: [], forbidden: [] }

  @env_list.each do |var, details|
    discrepancies[:required] << var if details[:required] && !ENV[var]
    discrepancies[:optional] << var if !details[:required] && !details[:forbidden] && !ENV[var]
    discrepancies[:forbidden] << var if details[:forbidden] && ENV[var]
  end

  discrepancies
end
described?(key) click to toggle source
# File lib/unenviable.rb, line 46
def self.described?(key)
  @env_list.include?(key)
end
env_descriptions=(env_list) click to toggle source
# File lib/unenviable.rb, line 31
def self.env_descriptions=(env_list)
  @env_list = env_list
end
env_descriptions_file_location() click to toggle source
# File lib/unenviable.rb, line 27
def self.env_descriptions_file_location
  'config/unenviable.yml'
end
generate() click to toggle source
# File lib/unenviable.rb, line 50
def self.generate
  File.open('.env', 'wb') do |f|
    generate_dotenv_lines.each { |l| f.write(l + "\n") }
  end
end
generate_dotenv_lines() click to toggle source
# File lib/unenviable.rb, line 56
def self.generate_dotenv_lines
  load_env_descriptions unless @env_list
  lines = []
  @env_list.each do |var, details|
    lines << "# #{details[:description]}"
    lines << "#{var}=#{details[:initial_value]}" if details[:required]
    lines << "##{var}=#{details[:initial_value]}" unless details[:required]
    lines << ''
  end

  lines
end
install_wrapper() click to toggle source
# File lib/unenviable.rb, line 35
def self.install_wrapper
  load_env_descriptions
  wrapper = Unenviable::ENVWrapper.new
  Object.send(:remove_const, :ENV)
  Object.const_set(:ENV, wrapper)
end
remove_wrapper() click to toggle source
# File lib/unenviable.rb, line 42
def self.remove_wrapper
  ENV.restore_saved if ENV.respond_to?(:close_wrapper)
end

Private Class Methods

load_env_descriptions() click to toggle source

Load the file that descriptions the required environment variables this needn't be called directly, it's called lazily by the functions.

# File lib/unenviable.rb, line 73
def self.load_env_descriptions
  if File.file?(env_descriptions_file_location)
    @base_env_list = YAML.load(File.open(env_descriptions_file_location))
    @env_list = {}
    @base_env_list.each do |var, details|
      @env_list[var] = {}
      details.each { |k, v| @env_list[var][k.to_sym] = v }
    end
  else
    @env_list = {}
  end
end