class IDL::Options
def _merge(to, from, *keys)
def _merge(to, from, *keys) keys = keys.flatten.collect { |k| k.to_sym } keys = from.keys if keys.empty? keys.each do |k| if from.has_key?(k) v = from[k] k = k.to_sym if to.has_key?(k) case to[k] when Array to[k].concat v when Hash to[k].merge!(Hash === v ? v : v.to_h) when OpenStruct _merge(to[k].__send__(:table), v) else to[k] = v end else to[k] = v end end end to end