method

quick

Importance_0
v1_9_3_392 - Show latest stable - 0 notes - Class: Server
quick(req, res) public

No documentation

This method has no description. You can help the Ruby community by adding new notes.

Hide source
# File lib/rubygems/server.rb, line 549
  def quick(req, res)
    Gem::Specification.reset

    res['content-type'] = 'text/plain'
    add_date res

    case req.request_uri.path
    when %^/quick/(Marshal.#{Regexp.escape Gem.marshal_version}/)?(.*?)-([0-9.]+)(-.*?)?\.gemspec\.rz$| then
      marshal_format, name, version, platform = $1, $2, $3, $4
      specs = Gem::Specification.find_all_by_name name, version

      selector = [name, version, platform].map(&:inspect).join ' '

      platform = if platform then
                   Gem::Platform.new platform.sub(/^-/, '')
                 else
                   Gem::Platform::RUBY
                 end

      specs = specs.select { |s| s.platform == platform }

      if specs.empty? then
        res.status = 404
        res.body = "No gems found matching #{selector}"
      elsif specs.length > 1 then
        res.status = 500
        res.body = "Multiple gems found matching #{selector}"
      elsif marshal_format then
        res['content-type'] = 'application/x-deflate'
        res.body << Gem.deflate(Marshal.dump(specs.first))
      end
    else
      raise WEBrick::HTTPStatus::NotFound, "`#{req.path}' not found."
    end
  end
Register or log in to add new notes.