class ClimateControl::Modifier

Public Class Methods

new(environment_overrides = {}, &block) click to toggle source
# File lib/climate_control/modifier.rb, line 5
def initialize(environment_overrides = {}, &block)
  @environment_overrides = environment_overrides.dup.stringify_keys!
  @block = block
end

Public Instance Methods

process() click to toggle source
# File lib/climate_control/modifier.rb, line 10
def process
  begin
    prepare_environment_for_block
    run_block
  ensure
    cache_environment_after_block
    delete_keys_that_do_not_belong
    revert_changed_keys
  end
end

Private Instance Methods

cache_environment_after_block() click to toggle source
# File lib/climate_control/modifier.rb, line 47
def cache_environment_after_block
  @env_after_block = clone_environment
end
clone_environment() click to toggle source
# File lib/climate_control/modifier.rb, line 61
def clone_environment
  ENV.to_hash
end
copy_overrides_to_environment() click to toggle source
# File lib/climate_control/modifier.rb, line 33
def copy_overrides_to_environment
  @environment_overrides.each do |key, value|
    ENV[key] = value
  end
end
delete_keys_that_do_not_belong() click to toggle source
# File lib/climate_control/modifier.rb, line 51
def delete_keys_that_do_not_belong
  (keys_to_remove - keys_changed_by_block).each {|key| ENV.delete(key) }
end
keys_changed_by_block() click to toggle source
# File lib/climate_control/modifier.rb, line 43
def keys_changed_by_block
  @keys_changed_by_block ||= OverlappingKeysWithChangedValues.new(@env_with_overrides_before_block, @env_after_block).keys
end
keys_to_remove() click to toggle source
# File lib/climate_control/modifier.rb, line 39
def keys_to_remove
  @environment_overrides.keys
end
prepare_environment_for_block() click to toggle source
# File lib/climate_control/modifier.rb, line 23
def prepare_environment_for_block
  @original_env = clone_environment
  copy_overrides_to_environment
  @env_with_overrides_before_block = clone_environment
end
revert_changed_keys() click to toggle source
# File lib/climate_control/modifier.rb, line 55
def revert_changed_keys
  (@original_env.keys - keys_changed_by_block).each do |key|
    ENV[key] = @original_env[key]
  end
end
run_block() click to toggle source
# File lib/climate_control/modifier.rb, line 29
def run_block
  @block.call
end