34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/chef/node/common_api.rb', line 34
def write(*args, &block)
value = block_given? ? yield : args.pop
last = args.pop
prev_memo = prev_key = nil
chain = args.inject(self) do |memo, key|
unless valid_container?(memo, key)
prev_memo[prev_key] = {}
memo = prev_memo[prev_key]
end
prev_memo = memo
prev_key = key
memo[key]
end
unless valid_container?(chain, last)
prev_memo[prev_key] = {}
chain = prev_memo[prev_key]
end
chain[last] = value
end
|