# 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