class Bundler::Dsl

def normalize_options(name, version, opts)

def normalize_options(name, version, opts)
  if name.is_a?(Symbol)
    raise GemfileError, %(You need to specify gem names as Strings. Use 'gem "#{name}"' instead)
  end
  if name =~ /\s/
    raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
  end
  normalize_hash(opts)
  git_names = @git_sources.keys.map(&:to_s)
  validate_keys("gem '#{name}'", opts, valid_keys + git_names)
  groups = @groups.dup
  opts["group"] = opts.delete("groups") || opts["group"]
  groups.concat Array(opts.delete("group"))
  groups = [:default] if groups.empty?
  install_if = @install_conditionals.dup
  install_if.concat Array(opts.delete("install_if"))
  install_if = install_if.reduce(true) do |memo, val|
    memo && (val.respond_to?(:call) ? val.call : val)
  end
  platforms = @platforms.dup
  opts["platforms"] = opts["platform"] || opts["platforms"]
  platforms.concat Array(opts.delete("platforms"))
  platforms.map!(&: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
  # Save sources passed in a key
  if opts.key?("source")
    source = normalize_source(opts["source"])
    opts["source"] = @sources.add_rubygems_source("remotes" => source)
  end
  git_name = (git_names & opts.keys).last
  if @git_sources[git_name]
    opts["git"] = @git_sources[git_name].call(opts[git_name])
  end
  %w(git path).each do |type|
    next unless 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) {}
    opts["source"] = source
  end
  opts["source"] ||= @source
  opts["env"] ||= @env
  opts["platforms"]      = platforms.dup
  opts["group"]          = groups
  opts["should_include"] = install_if
end