# File lib/map.rb, line 828 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 |key, type| set(key, type.new) unless get(key).is_a?(type) end exploded[:leaves].each do |key, value| set(key, value) end self end