Module: ClimateControl

Extended by:
ClimateControl, Gem::Deprecate
Included in:
ClimateControl
Defined in:
lib/climate_control.rb,
lib/climate_control/errors.rb,
lib/climate_control/version.rb

Defined Under Namespace

Classes: UnassignableValueError

Constant Summary collapse

VERSION =
"1.2.0".freeze

Instance Method Summary collapse

Instance Method Details

#envObject



56
57
58
# File 'lib/climate_control.rb', line 56

def env
  ENV
end

#modify(environment_overrides = {}, &block) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/climate_control.rb', line 12

def modify(environment_overrides = {}, &block)
  environment_overrides = environment_overrides.transform_keys(&:to_s)

  SEMAPHORE.synchronize do
    previous = ENV.to_hash

    begin
      copy environment_overrides
    ensure
      middle = ENV.to_hash
    end

    block.call
  ensure
    after = ENV
    (previous.keys | middle.keys | after.keys).each do |key|
      if previous[key] != after[key] && middle[key] == after[key]
        ENV[key] = previous[key]
      end
    end
  end
end

#unsafe_modify(environment_overrides = {}, &block) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/climate_control.rb', line 35

def unsafe_modify(environment_overrides = {}, &block)
  environment_overrides = environment_overrides.transform_keys(&:to_s)

  previous = ENV.to_hash

  begin
    copy environment_overrides
  ensure
    middle = ENV.to_hash
  end

  block.call
ensure
  after = ENV
  (previous.keys | middle.keys | after.keys).each do |key|
    if previous[key] != after[key] && middle[key] == after[key]
      ENV[key] = previous[key]
    end
  end
end