class Bundler::Dsl

def normalize_options(name, version, opts)

def normalize_options(name, version, opts)
  normalize_hash(opts)
  git_names = @git_sources.keys.map(&:to_s)
  invalid_keys = opts.keys - (valid_keys + git_names)
  if invalid_keys.any?
    message = "You passed #{invalid_keys.map{|k| ':'+k }.join(", ")} "
    message << if invalid_keys.size > 1
                 "as options for gem '#{name}', but they are invalid."
               else
                 "as an option for gem '#{name}', but it is invalid."
               end
    message << " Valid options are: #{valid_keys.join(", ")}"
    raise InvalidOption, message
  end
  groups = @groups.dup
  opts["group"] = opts.delete("groups") || opts["group"]
  groups.concat Array(opts.delete("group"))
  groups = [:default] if groups.empty?
  platforms = @platforms.dup
  opts["platforms"] = opts["platform"] || opts["platforms"]
  platforms.concat Array(opts.delete("platforms"))
  platforms.map! { |p| p.to_sym }
  platforms.each do |p|
    next if VALID_PLATFORMS.include?(p)
    raise GemfileError, "`#{p}` is not a valid platform. The available options are: #{VALID_PLATFORMS.inspect}"
  end
  git_name = (git_names & opts.keys).last
  if @git_sources[git_name]
    opts["git"] = @git_sources[git_name].call(opts[git_name])
  end
  ["git", "path"].each do |type|
    if param = opts[type]
      if version.first && version.first =~ /^\s*=?\s*(\d[^\s]*)\s*$/
        options = opts.merge("name" => name, "version" => $1)
      else
        options = opts.dup
      end
      source = send(type, param, options, :prepend => true) {}
      opts["source"] = source
    end
  end
  opts["source"]  ||= @source
  opts["env"]     ||= @env
  opts["platforms"] = platforms.dup
  opts["group"]     = groups
end