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