lib/anyway/env.rb in anyway_config-2.3.1 vs lib/anyway/env.rb in anyway_config-2.4.0

- old
+ new

@@ -6,18 +6,35 @@ class Env using RubyNext using Anyway::Ext::DeepDup using Anyway::Ext::Hash + class << self + def from_hash(hash, prefix: nil, memo: {}) + hash.each do |key, value| + prefix_with_key = (prefix && !prefix.empty?) ? "#{prefix}_#{key.to_s.upcase}" : key.to_s.upcase + + if value.is_a?(Hash) + from_hash(value, prefix: "#{prefix_with_key}_", memo:) + else + memo[prefix_with_key] = value.to_s + end + end + + memo + end + end + include Tracing - attr_reader :data, :traces, :type_cast + attr_reader :data, :traces, :type_cast, :env_container - def initialize(type_cast: AutoCast) + def initialize(type_cast: AutoCast, env_container: ENV) @type_cast = type_cast @data = {} @traces = {} + @env_container = env_container end def clear data.clear traces.clear @@ -40,14 +57,14 @@ end private def parse_env(prefix) - match_prefix = "#{prefix}_" - ENV.each_pair.with_object({}) do |(key, val), data| + match_prefix = prefix.empty? ? prefix : "#{prefix}_" + env_container.each_pair.with_object({}) do |(key, val), data| next unless key.start_with?(match_prefix) - path = key.sub(/^#{prefix}_/, "").downcase + path = key.sub(/^#{match_prefix}/, "").downcase paths = path.split("__") trace!(:env, *paths, key:) { data.bury(type_cast.call(val), *paths) } end end