# File lib/bundler/dsl.rb, line 47
    def gem(name, *args)
      if name.is_a?(Symbol)
        raise GemfileError, %{You need to specify gem names as Strings. Use 'gem "#{name.to_s}"' instead.}
      end

      options = Hash === args.last ? args.pop : {}
      version = args || [">= 0"]

      _deprecated_options(options)
      _normalize_options(name, version, options)

      dep = Dependency.new(name, version, options)

      # if there's already a dependency with this name we try to prefer one
      if current = @dependencies.find { |d| d.name == dep.name }
        if current.requirement != dep.requirement
          if current.type == :development
            @dependencies.delete current
          elsif dep.type == :development
            return
          else
            raise DslError, "You cannot specify the same gem twice with different version requirements. " \
                            "You specified: #{current.name} (#{current.requirement}) and " \
                            "#{dep.name} (#{dep.requirement})"
          end
        end

        if current.source != dep.source
          if current.type == :development
            @dependencies.delete current
          elsif dep.type == :development
            return
          else
            raise DslError, "You cannot specify the same gem twice coming from different sources. You " \
                            "specified that #{dep.name} (#{dep.requirement}) should come from " \
                            "#{current.source || 'an unspecfied source'} and #{dep.source}"
          end
        end
      end

      @dependencies << dep
    end