Class: Dip::Environment

Inherits:
Object
  • Object
show all
Defined in:
lib/dip/environment.rb

Constant Summary collapse

VAR_REGEX =
/\$[\{]?(?<var_name>[a-zA-Z_][a-zA-Z0-9_]*)[\}]?/.freeze
SPECIAL_VARS =
{"DIP_OS" => :find_dip_os}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(default_vars) ⇒ Environment



10
11
12
13
14
# File 'lib/dip/environment.rb', line 10

def initialize(default_vars)
  @vars = {}

  merge(default_vars || {})
end

Instance Attribute Details

#varsObject (readonly)

Returns the value of attribute vars.



8
9
10
# File 'lib/dip/environment.rb', line 8

def vars
  @vars
end

Instance Method Details

#[](name) ⇒ Object



23
24
25
# File 'lib/dip/environment.rb', line 23

def [](name)
  vars.fetch(name) { ENV[name] }
end

#[]=(key, value) ⇒ Object



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

def []=(key, value)
  @vars[key] = value
end

#interpolate(value) ⇒ Object Also known as: replace



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/dip/environment.rb', line 31

def interpolate(value)
  value.gsub(VAR_REGEX) do
    var_name = Regexp.last_match[:var_name]

    if SPECIAL_VARS.key?(var_name)
      self[var_name] || send(SPECIAL_VARS[var_name])
    else
      self[var_name]
    end
  end
end

#merge(new_vars) ⇒ Object



16
17
18
19
20
21
# File 'lib/dip/environment.rb', line 16

def merge(new_vars)
  new_vars.each do |key, value|
    key = key.to_s
    @vars[key] = ENV.fetch(key) { interpolate(value.to_s) }
  end
end