@@ -10,8 +10,6 @@ module ClimateControl
10
10
private_constant :SEMAPHORE
11
11
12
12
def modify ( environment_overrides = { } , &block )
13
- environment_overrides = environment_overrides . transform_keys ( &:to_s )
14
-
15
13
SEMAPHORE . synchronize do
16
14
previous = ENV . to_hash
17
15
@@ -24,17 +22,11 @@ def modify(environment_overrides = {}, &block)
24
22
block . call
25
23
ensure
26
24
after = ENV
27
- ( previous . keys | middle . keys | after . keys ) . each do |key |
28
- if previous [ key ] != after [ key ] && middle [ key ] == after [ key ]
29
- ENV [ key ] = previous [ key ]
30
- end
31
- end
25
+ merge ( ENV , previous :, middle :, after :)
32
26
end
33
27
end
34
28
35
29
def unsafe_modify ( environment_overrides = { } , &block )
36
- environment_overrides = environment_overrides . transform_keys ( &:to_s )
37
-
38
30
previous = ENV . to_hash
39
31
40
32
begin
@@ -46,11 +38,7 @@ def unsafe_modify(environment_overrides = {}, &block)
46
38
block . call
47
39
ensure
48
40
after = ENV
49
- ( previous . keys | middle . keys | after . keys ) . each do |key |
50
- if previous [ key ] != after [ key ] && middle [ key ] == after [ key ]
51
- ENV [ key ] = previous [ key ]
52
- end
53
- end
41
+ merge ( ENV , previous :, middle :, after :)
54
42
end
55
43
56
44
def env
@@ -62,11 +50,19 @@ def env
62
50
private
63
51
64
52
def copy ( overrides )
65
- overrides . each do |key , value |
53
+ overrides . transform_keys ( & :to_s ) . each do |key , value |
66
54
ENV [ key ] = value
67
55
rescue TypeError => e
68
56
raise UnassignableValueError ,
69
57
"attempted to assign #{ value } to #{ key } but failed (#{ e . message } )"
70
58
end
71
59
end
60
+
61
+ def merge ( env , previous :, middle :, after :)
62
+ ( previous . keys | middle . keys | after . keys ) . each do |key |
63
+ if previous [ key ] != after [ key ] && middle [ key ] == after [ key ]
64
+ env [ key ] = previous [ key ]
65
+ end
66
+ end
67
+ end
72
68
end
0 commit comments