A FetchError
exception wraps up the various possible IO
and HTTP failures that could happen while downloading from the internet.
A FetchError
that indicates that the reason for not being able to fetch data was that the host could not be contacted
A semi-compatible DSL for the Bundler
Gemfile and Isolate gem dependencies files.
To work with both the Bundler
Gemfile and Isolate formats this implementation takes some liberties to allow compatibility with each, most notably in source
.
A basic gem dependencies file will look like the following:
source 'https://rubygems.org' gem 'rails', '3.2.14a gem 'devise', '~> 2.1', '>= 2.1.3' gem 'cancan' gem 'airbrake' gem 'pg'
RubyGems recommends saving this as gem.deps.rb over Gemfile or Isolate.
To install the gems in this Gemfile use ‘gem install -g` to install it and create a lockfile. The lockfile will ensure that when you make changes to your gem dependencies file a minimum amount of change is made to the dependencies of your gems.
RubyGems can activate all the gems in your dependencies file at startup using the RUBYGEMS_GEMDEPS environment variable or through Gem.use_gemdeps
. See Gem.use_gemdeps
for details and warnings.
See ‘gem help install` and `gem help gem_dependencies` for further details.
Parses a gem.deps.rb.lock file and constructs a LockSet containing the dependencies found inside. If the lock file is missing no LockSet is constructed.
Raised when a bad requirement is encountered
A set of gems for installation sourced from remote sources and local .gem files
A LocalSpecification
comes from a .gem file on the local filesystem.
A set of gems from a gem dependencies lockfile.
The LockSpecification
comes from a lockfile (Gem::RequestSet::Lockfile
).
A LockSpecification’s dependency information is pre-filled from the lockfile.
The local source finds gems in the current directory for fulfilling dependencies.
A Lock
source wraps an installed gem’s source and sorts before other sources during dependency resolution. This allows RubyGems to prefer gems from dependency lock files.
The SpecFetcherSetup
allows easy setup of a remote source in RubyGems tests:
spec_fetcher do |f| f.gem 'a', 1 f.spec 'a', 2 f.gem 'b', 1' 'a' => '~> 1.0' end
The above declaration creates two gems, a-1 and b-1, with a dependency from b to a. The declaration creates an additional spec a-2, but no gem for it (so it cannot be installed).
After the gems are created they are removed from Gem.dir
.
RFC 2617 Digest
Access Authentication for WEBrick
Use this class to add digest authentication to a WEBrick
servlet.
Here is an example of how to set up DigestAuth:
config = { :Realm => 'DigestAuth example realm' } htdigest = WEBrick::HTTPAuth::Htdigest.new 'my_password_file' htdigest.set_passwd config[:Realm], 'username', 'password' htdigest.flush config[:UserDB] = htdigest digest_auth = WEBrick::HTTPAuth::DigestAuth.new config
When using this as with a servlet be sure not to create a new DigestAuth
object in the servlet’s initialize. By default WEBrick
creates a new servlet instance for every request and the DigestAuth
object must be used across requests.
Digest
authentication for proxy servers. See DigestAuth
for details.
Htdigest
accesses apache-compatible digest password files. Passwords are matched to a realm where they are valid. For security, the path for a digest password database should be stored outside of the paths available to the HTTP server.
Htdigest
is intended for use with WEBrick::HTTPAuth::DigestAuth
and stores passwords using cryptographic hashes.
htpasswd = WEBrick::HTTPAuth::Htdigest.new 'my_password_file' htpasswd.set_passwd 'my realm', 'username', 'password' htpasswd.flush
AbstractServlet
allows HTTP server modules to be reused across multiple servers and allows encapsulation of functionality.
By default a servlet will respond to GET, HEAD (through an alias to GET) and OPTIONS requests.
By default a new servlet is initialized for every request. A servlet instance can be reused by overriding ::get_instance
in the AbstractServlet
subclass.
class Simple < WEBrick::HTTPServlet::AbstractServlet def do_GET request, response status, content_type, body = do_stuff_with request response.status = status response['Content-Type'] = content_type response.body = body end def do_stuff_with request return 200, 'text/plain', 'you got a page' end end
This servlet can be mounted on a server at a given path:
server.mount '/simple', Simple
Servlets can be configured via initialize. The first argument is the HTTP server the servlet is being initialized for.
class Configurable < Simple def initialize server, color, size super server @color = color @size = size end def do_stuff_with request content = "<p " \ %q{style="color: #{@color}; font-size: #{@size}"} \ ">Hello, World!" return 200, "text/html", content end end
This servlet must be provided two arguments at mount time:
server.mount '/configurable', Configurable, 'red', '2em'
Servlet for handling CGI
scripts
Example:
server.mount('/cgi/my_script', WEBrick::HTTPServlet::CGIHandler, '/path/to/my_script')
Servlet for serving a single file. You probably want to use the FileHandler
servlet instead as it handles directories and fancy indexes.
Example:
server.mount('/my_page.txt', WEBrick::HTTPServlet::DefaultFileHandler, '/path/to/my_page.txt')
This servlet handles If-Modified-Since and Range
requests.
Serves a directory including fancy indexing and a variety of other options.
Example:
server.mount('/assets', WEBrick::HTTPServlet::FileHandler, '/path/to/assets')
Mounts a proc at a path that accepts a request and response.
Instead of mounting this servlet with WEBrick::HTTPServer#mount
use WEBrick::HTTPServer#mount_proc
:
server.mount_proc '/' do |req, res| res.body = 'it worked!' res.status = 200 end