Sha256: 6097594a14a4d48fc5174dc3ff60306aafe89b5b5a53d8f5e860911654a412a5

Contents?: true

Size: 809 Bytes

Versions: 5

Compression:

Stored size: 809 Bytes

Contents

# frozen_string_literal: true

require "deep_merge/core"
require "yaml"

module ConfigX
  class EnvSource < HashSource
    def initialize(env, prefix:, separator:)
      @env = env
      @prefix = prefix
      @separator = separator
    end

    def ==(other)
      other.is_a?(self.class) &&
        source == other.source &&
        prefix == other.prefix &&
        separator == other.separator
    end

    protected

    def source
      env.each_with_object({}) do |(key, value), config|
        next unless key.start_with?(prefix + separator)

        Array(key.split(separator)[1..])
          .reverse_each
          .reduce(YAML.load(value)) { |acc, k| {k.downcase => acc} }
          .tap { DeepMerge.deep_merge!(_1, config) }
      end
    end

    attr_reader :env, :prefix, :separator
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
configx-0.5.0 lib/config_x/env_source.rb
configx-0.4.0 lib/config_x/env_source.rb
configx-0.3.0 lib/config_x/env_source.rb
configx-0.2.0 lib/config_x/env_source.rb
configx-0.1.0 lib/config_x/env_source.rb