# File lib/map.rb, line 804
  def set(*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

    strategy = hash.map{|key, value| [Array(key), value]}

    strategy.each do |key, value|
      leaf_for(key, :autovivify => true) do |leaf, k|
        Map.collection_set(leaf, k, value)
      end
    end

    self
  end