Sha256: f878ac107207304b2a9f960959f7991c04dd83e480585a62c1f25e962fb1f394

Contents?: true

Size: 882 Bytes

Versions: 2

Compression:

Stored size: 882 Bytes

Contents

# frozen_string_literal: true

module Anyway
  # Parses environment variables and provides
  # method-like access
  class Env
    using Anyway::Ext::DeepDup
    using Anyway::Ext::StringSerialize

    def initialize
      @data = {}
    end

    def clear
      @data.clear
    end

    def fetch(prefix)
      @data[prefix] ||= parse_env(prefix)
      @data[prefix].deep_dup
    end

    private

    def parse_env(prefix)
      ENV.each_pair.with_object({}) do |(key, val), data|
        next unless key.start_with?(prefix)

        path = key.sub(/^#{prefix}_/, "").downcase
        set_by_path(data, path, val.serialize)
      end
    end

    def set_by_path(to, path, val)
      parts = path.split("__")

      to = get_hash(to, parts.shift) while parts.length > 1

      to[parts.first] = val
    end

    def get_hash(from, name)
      (from[name] ||= {})
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
anyway_config-2.0.0.pre2 lib/anyway/env.rb
anyway_config-2.0.0.pre lib/anyway/env.rb