class ClimateControl::Modifier
Public Class Methods
new(env, environment_overrides = {}, &block)
click to toggle source
# File lib/climate_control/modifier.rb, line 3 def initialize(env, environment_overrides = {}, &block) @environment_overrides = stringify_keys(environment_overrides) @block = block @env = env end
Public Instance Methods
process()
click to toggle source
# File lib/climate_control/modifier.rb, line 9 def process @env.synchronize do 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 49 def cache_environment_after_block @env_after_block = clone_environment end
clone_environment()
click to toggle source
# File lib/climate_control/modifier.rb, line 63 def clone_environment @env.to_hash end
copy_overrides_to_environment()
click to toggle source
# File lib/climate_control/modifier.rb, line 32 def copy_overrides_to_environment @environment_overrides.each do |key, value| @env[key] = value rescue TypeError => e raise UnassignableValueError, "attempted to assign #{value} to #{key} but failed (#{e.message})" end end
delete_keys_that_do_not_belong()
click to toggle source
# File lib/climate_control/modifier.rb, line 53 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 45 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 41 def keys_to_remove @environment_overrides.keys end
prepare_environment_for_block()
click to toggle source
# File lib/climate_control/modifier.rb, line 22 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 57 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 28 def run_block @block.call end
stringify_keys(env)
click to toggle source
# File lib/climate_control/modifier.rb, line 67 def stringify_keys(env) env.each_with_object({}) do |(key, value), hash| hash[key.to_s] = value end end