# File lib/map.rb, line 851 def add(*args) case when args.empty? return [] when args.size == 1 && args.first.is_a?(Hash) hash = args.shift else hash = {} value = args.pop key = Array(args).flatten hash[key] = value end exploded = Map.explode(hash) exploded[:branches].each do |bkey, btype| set(bkey, btype.new) unless get(bkey).is_a?(btype) end exploded[:leaves].each do |lkey, lvalue| set(lkey, lvalue) end self end