Sha256: 6e2aef66459d1d0639199ed6ac27dd0a16dad6b72435b34847098a8c05f29810

Contents?: true

Size: 1.85 KB

Versions: 15

Compression:

Stored size: 1.85 KB

Contents

require 'chamber/environmentable'

module  Chamber
module  Filters
class   EnvironmentFilter
  include Environmentable

  def initialize(options = {})
    self.data = options.fetch(:data)
  end

  ###
  # Internal: Allows the existing environment to be injected into the passed in
  # hash.  The hash that is passed in is *not* modified, instead a new hash is
  # returned.
  #
  # Examples:
  #
  #   ###
  #   # Injects the current environment variables
  #   #
  #   ENV['LEVEL_ONE_1_LEVEL_TWO_1']               = 'env value 1'
  #   ENV['LEVEL_ONE_1_LEVEL_TWO_2_LEVEL_THREE_1'] = 'env value 2'
  #
  #   EnvironmentFilter.execute(
  #     level_one_1: {
  #       level_two_1: 'value 1',
  #       level_two_2: {
  #         level_three_1: 'value 2' } } )
  #
  #   # => {
  #     'level_one_1' => {
  #       'level_two_1' => 'env value 1',
  #       'level_two_2' => {
  #         'level_three_1' => 'env value 2',
  #   }
  #
  #   ###
  #   # Can inject environment variables if said variables are prefixed
  #   #
  #   ENV['PREFIX_LEVEL_TWO_1'] = 'env value 1'
  #   ENV['PREFIX_LEVEL_TWO_2'] = 'env value 2'
  #
  #   EnvironmentFilter.execute({
  #                               level_two_1: 'value 1',
  #                               level_two_2: 'value 2'
  #                             },
  #                             ['prefix'])
  #
  #   # => {
  #     'level_two_1' => 'env value 1',
  #     'level_two_2' => 'env value 2',
  #   }
  #
  #
  def self.execute(options = {})
    self.new(options).send(:execute)
  end

  protected

  attr_accessor :data

  def execute(settings = data, parent_keys = [])
    with_environment(settings, parent_keys,
      ->(key, value, environment_keys) do
        { key => execute(value, environment_keys) }
      end,
      ->(key, value, environment_key) do
        { key => (ENV[environment_key] || value) }
      end)
  end
end
end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
chamber-2.4.0 lib/chamber/filters/environment_filter.rb
chamber-2.3.2 lib/chamber/filters/environment_filter.rb
chamber-2.3.1 lib/chamber/filters/environment_filter.rb
chamber-2.3.0 lib/chamber/filters/environment_filter.rb
chamber-2.2.1 lib/chamber/filters/environment_filter.rb
chamber-2.2.0 lib/chamber/filters/environment_filter.rb
chamber-2.1.9 lib/chamber/filters/environment_filter.rb
chamber-2.1.8 lib/chamber/filters/environment_filter.rb
chamber-2.1.7 lib/chamber/filters/environment_filter.rb
chamber-2.1.6 lib/chamber/filters/environment_filter.rb
chamber-2.1.3 lib/chamber/filters/environment_filter.rb
chamber-2.1.2 lib/chamber/filters/environment_filter.rb
chamber-2.1.1 lib/chamber/filters/environment_filter.rb
chamber-2.1.0 lib/chamber/filters/environment_filter.rb
chamber-2.0.0 lib/chamber/filters/environment_filter.rb