Skip to content

Commit a43b1af

Browse files
refactor environment variable merging method
1 parent 7ac9393 commit a43b1af

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

lib/climate_control.rb

+11-15
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ module ClimateControl
1010
private_constant :SEMAPHORE
1111

1212
def modify(environment_overrides = {}, &block)
13-
environment_overrides = environment_overrides.transform_keys(&:to_s)
14-
1513
SEMAPHORE.synchronize do
1614
previous = ENV.to_hash
1715

@@ -24,17 +22,11 @@ def modify(environment_overrides = {}, &block)
2422
block.call
2523
ensure
2624
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:)
3226
end
3327
end
3428

3529
def unsafe_modify(environment_overrides = {}, &block)
36-
environment_overrides = environment_overrides.transform_keys(&:to_s)
37-
3830
previous = ENV.to_hash
3931

4032
begin
@@ -46,11 +38,7 @@ def unsafe_modify(environment_overrides = {}, &block)
4638
block.call
4739
ensure
4840
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:)
5442
end
5543

5644
def env
@@ -62,11 +50,19 @@ def env
6250
private
6351

6452
def copy(overrides)
65-
overrides.each do |key, value|
53+
overrides.transform_keys(&:to_s).each do |key, value|
6654
ENV[key] = value
6755
rescue TypeError => e
6856
raise UnassignableValueError,
6957
"attempted to assign #{value} to #{key} but failed (#{e.message})"
7058
end
7159
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
7268
end

0 commit comments

Comments
 (0)