Module: Inquisitive::Environment::Parser

Defined in:
lib/inquisitive/environment.rb

Class Method Summary collapse

Class Method Details

.[](var_name) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/inquisitive/environment.rb', line 43

def [](var_name)
  result = if ENV.has_key? var_name.to_s

    env_var = ENV[var_name]
    if env_var.include? ','
      env_var.split(',').map(&:strip)
    else
      env_var
    end

  elsif env_vars = can_find_env_keys_from(var_name)

    Hash[].tap do |hash|
      env_vars.each do |key|
        set_hash_value_of hash, key
      end
    end

  end

  replace_empty result
end

.can_find_env_keys_from(var_name) ⇒ Object



66
67
68
69
# File 'lib/inquisitive/environment.rb', line 66

def can_find_env_keys_from(var_name)
  found = env_keys_from(var_name)
  Inquisitive.present?(found) ? found : nil
end

.env_keys_from(var_name) ⇒ Object



71
72
73
74
75
# File 'lib/inquisitive/environment.rb', line 71

def env_keys_from(var_name)
  ENV.keys.select do |key|
    key =~ /^#{var_name}__/
  end
end

.replace_empty(value) ⇒ Object



97
98
99
# File 'lib/inquisitive/environment.rb', line 97

def replace_empty(value)
  Inquisitive.present?(value) ? value : NilClass.new(nil)
end

.set_hash_value_of(hash, var) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/inquisitive/environment.rb', line 77

def set_hash_value_of(hash, var)
  keypath = var.split('__').map(&:downcase)
  keypath.shift # discard variable namespace
  hash.tap do |hash|
    keypath.reduce(hash) do |namespace, key|

      namespace[key] = if key == keypath.last
        replace_empty Inquisitive[Parser[var]]
      else
        if namespace[key].kind_of? ::Hash
          namespace[key]
        else
          Hash.new
        end
      end

    end
  end
end