module Metanorma::Utils
def set_nested_value(hash, keys, new_val)
Set hash value using keys path
def set_nested_value(hash, keys, new_val) key = keys[0] if keys.length == 1 hash[key] = hash[key].is_a?(Array) ? (hash[key] << new_val) : hash[key].nil? ? new_val : [hash[key], new_val] else if hash[key].is_a?(Array) hash[key][-1] = {} if !hash[key].empty? && hash[key][-1].nil? hash[key] << {} if hash[key].empty? || !hash[key][-1].is_a?(Hash) set_nested_value(hash[key][-1], keys[1..-1], new_val) elsif hash[key].nil? || hash[key].empty? hash[key] = {} set_nested_value(hash[key], keys[1..-1], new_val) elsif hash[key].is_a?(Hash) && !hash[key][keys[1]] set_nested_value(hash[key], keys[1..-1], new_val) elsif !hash[key][keys[1]] hash[key] = [hash[key], {}] set_nested_value(hash[key][-1], keys[1..-1], new_val) else set_nested_value(hash[key], keys[1..-1], new_val) end end hash end