Module: Unenviable

Defined in:
lib/unenviable.rb,
lib/unenviable/railtie.rb,
lib/unenviable/env_wrapper.rb

Overview

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

Defined Under Namespace

Classes: ENVWrapper, Railtie

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#env_list=(value) ⇒ Object (writeonly)

Sets the attribute env_list

Parameters:

  • value

    the value to set the attribute env_list to.



11
12
13
# File 'lib/unenviable.rb', line 11

def env_list=(value)
  @env_list = value
end

Class Method Details

.checkObject



13
14
15
16
17
18
19
20
21
22
23
24
25
# 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) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/unenviable.rb', line 46

def self.described?(key)
  @env_list.include?(key)
end

.env_descriptions=(env_list) ⇒ Object



31
32
33
# File 'lib/unenviable.rb', line 31

def self.env_descriptions=(env_list)
  @env_list = env_list
end

.env_descriptions_file_locationObject



27
28
29
# File 'lib/unenviable.rb', line 27

def self.env_descriptions_file_location
  'config/unenviable.yml'
end

.generateObject



50
51
52
53
54
# 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_linesObject



56
57
58
59
60
61
62
63
64
65
66
67
# 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_wrapperObject



35
36
37
38
39
40
# 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_wrapperObject



42
43
44
# File 'lib/unenviable.rb', line 42

def self.remove_wrapper
  ENV.restore_saved if ENV.respond_to?(:close_wrapper)
end