Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 88

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 216

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 217

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 218

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 219

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 220
PK!-+EEcache.rinu[{ :ancestors{]I"Rack::ShowExceptions:EF[I" Object;FI"Rack::ETag;F[@ I"Rack::Auth::Basic;F[I"AbstractHandler;FI"Rack::Auth::Basic::Request;F[I" Rack::Auth::AbstractRequest;FI"Rack::Auth::Digest::Nonce;F[@ I"Rack::Auth::Digest::Params;F[I" Hash;FI" Rack::Auth::Digest::Request;F[@I"Rack::Auth::Digest::MD5;F[I"AbstractHandler;FI" Rack::Auth::AbstractRequest;F[@ I" Rack::Auth::AbstractHandler;F[@ I"-Rack::Multipart::MultipartPartLimitError;F[I"Errno::EMFILE;FI"Rack::Multipart::Parser;F[@ I"Rack::Multipart::Generator;F[@ I""Rack::Multipart::UploadedFile;F[@ I"Rack::Request;F[@ I"Rack::TempfileReaper;F[@ I"Rack::Deflater;F[@ I"Rack::Deflater::GzipStream;F[@ I""Rack::Deflater::DeflateStream;F[@ I"Rack::ForwardRequest;F[I"Exception;FI"Rack::Recursive;F[@ I"Rack::Lobster;F[@ I" Object;F[I"BasicObject;FI"Rack::ShowStatus;F[@ I"Rack::Response;F[@ I"Rack::Response::Helpers;FI"Rack::Head;F[@ I"Rack::Runtime;F[@ I"Rack::ContentType;F[@ I"Rack::Utils;FI"$Rack::Utils::ParameterTypeError;F[I"TypeError;FI"'Rack::Utils::InvalidParameterError;F[I"ArgumentError;FI"Rack::Utils::Context;F[@ I"Rack::Utils::HeaderHash;F[I" Hash;FI"+Rack::Utils::KeySpaceConstrainedParams;F[@ I"Rack::ContentLength;F[@ @HI"Rack::Cascade;F[@ I"Rack::Sendfile;F[@ I"Rack::MockRequest;F[@ I"$Rack::MockRequest::FatalWarning;F[I"RuntimeError;FI"#Rack::MockRequest::FatalWarner;F[@ I"Rack::MockResponse;F[I"Rack::Response;FI"Rack::File;F[@ I"#Rack::Utils::OkJson::Utf8Error;F[I"StandardError;FI"Rack::Utils::OkJson::Error;F[I"StandardError;FI"Rack::Server;F[@ I"Rack::Server::Options;F[@ I"Rack::Lock;F[@ I"Rack::Reloader;F[@ I"Rack::BodyProxy;F[@ I"Rack::RewindableInput;F[@ I"$Rack::RewindableInput::Tempfile;F[I" Tempfile;FI"Rack::Directory;F[@ I"WEBrick::HTTPResponse;F[@ I"Rack::Handler::WEBrick;F[I"*WEBrick::HTTPServlet::AbstractServlet;FI""Rack::Handler::EventedMongrel;F[I"Rack::Handler::Mongrel;FI"Rack::Handler::SCGI;F[I"SCGI::Processor;FI"Rack::Handler::Mongrel;F[I"Mongrel::HttpHandler;FI"Rack::Handler::LSWS;F[@ I"Rack::Handler::CGI;F[@ I"FCGI::Stream;F[@ I"Rack::Handler::FastCGI;F[@ I"&Rack::Handler::SwiftipliedMongrel;F[@I"Rack::Handler::Thin;F[@ I"Rack::MethodOverride;F[@ I"Rack::Chunked;F[@ @HI"Rack::Chunked::Body;F[@ @HI"Rack::NullLogger;F[@ I"Rack::Session::Pool;F[I"Abstract::ID;FI"Rack::Session::Cookie;F[I"Abstract::ID;FI""Rack::Session::Cookie::Base64;F[@ I"+Rack::Session::Cookie::Base64::Marshal;F[I""Rack::Session::Cookie::Base64;FI"(Rack::Session::Cookie::Base64::JSON;F[@I"+Rack::Session::Cookie::Base64::ZipJSON;F[@I"$Rack::Session::Cookie::Identity;F[@ I"Rack::Session::Memcache;F[I"Abstract::ID;FI")Rack::Session::Abstract::SessionHash;F[I"Enumerable;F@ I" Rack::Session::Abstract::ID;F[@ I"Rack::Builder;F[@ I"Rack::ConditionalGet;F[@ I"Rack::URLMap;F[@ I"Rack::Logger;F[@ I"Rack::Lint;F[@ I"Rack::Lint::LintError;F[I"RuntimeError;FI"Rack::Lint::InputWrapper;F[@ I"Rack::Lint::ErrorWrapper;F[@ I"Rack::Lint::HijackWrapper;F[@ I"Rack::CommonLogger;F[@ I"Rack::Config;F[@ I"Rack::Static;F[@ :attributes{@[I"attr_accessor private_key;FI"attr_accessor time_limit;FI"Rack::Auth::Digest::MD5;F[I"attr_accessor opaque;FI"!attr_writer passwords_hashed;F@[I"attr_accessor realm;F@'[I"attr_accessor content_type;FI""attr_reader original_filename;FI"Rack::Request;F[I"attr_reader env;FI"Rack::ForwardRequest;F[I"attr_reader env;FI"attr_reader url;FI"Rack::Response;F[ I"attr_accessor body;FI"attr_accessor length;FI"attr_accessor status;FI"attr_reader header;FI"attr_reader headers;FI"Rack::Utils::Context;F[I"attr_reader app;FI"attr_reader for;FI"Rack::Cascade;F[I"attr_reader apps;FI"Rack::MockResponse;F[I"attr_accessor errors;FI"!attr_reader original_headers;FI"Rack::File;F[ I" attr_accessor cache_control;FI"attr_accessor path;FI"attr_accessor root;FI"attr_accessor to_path;FI"Rack::Server;F[I"attr_writer options;FI"Rack::Directory;F[I"attr_accessor path;FI"attr_accessor root;FI"attr_reader files;FI"WEBrick::HTTPResponse;F[I"attr_accessor rack;FI"Rack::Handler::SCGI;F[I"attr_accessor app;FI"Rack::Session::Pool;F[I"attr_reader mutex;FI"attr_reader pool;FI"Rack::Session::Cookie;F[I"attr_reader coder;FI"Rack::Session::Memcache;F[I"attr_reader mutex;FI"attr_reader pool;F@[I"attr_writer id;F@[I" attr_reader default_options;FI"attr_reader key;FI"Rack::Utils;F[I""attr_accessor key_space_limit;FI"'attr_accessor multipart_part_limit;FI"$attr_accessor param_depth_limit;FI"Rack::Response::Helpers;F[I"attr_reader headers;FI"!attr_reader original_headers;F:class_methods{HI"Rack::ShowExceptions;F[I"new;FI"Rack::ETag;F[I"new;F@[ I"new;FI" parse;FI"private_key;FI"time_limit;F@[ I" dequote;FI"new;FI" parse;FI"split_header_value;FI"Rack::Auth::Digest::MD5;F[I"new;F@[I"new;F@[I"new;FI"Rack::Multipart::Parser;F[I" create;FI"new;F@%[I"new;F@'[I"new;FI"Rack::Request;F[I"new;FI"Rack::TempfileReaper;F[I"new;FI"Rack::Deflater;F[I"new;F@/[I"new;F@1[I"new;FI"Rack::ForwardRequest;F[I"new;FI"Rack::Recursive;F[I"new;FI"Rack::ShowStatus;F[I"new;FI"Rack::Response;F[I"new;FI"Rack::Head;F[I"new;FI"Rack::Runtime;F[I"new;FI"Rack::ContentType;F[I"new;FI"Rack::Utils::Context;F[I"new;FI"Rack::Utils::HeaderHash;F[I"new;F@T[I"new;FI"Rack::ContentLength;F[I"new;FI"Rack::Cascade;F[I"new;FI"Rack::Sendfile;F[I"new;FI"Rack::MockRequest;F[I" env_for;FI"new;FI"parse_uri_rfc2396;FI"Rack::MockResponse;F[I"new;FI"Rack::File;F[I"new;FI"Rack::Server;F[ I"&default_middleware_by_environment;FI"logging_middleware;FI"middleware;FI"new;FI" start;FI"Rack::Lock;F[I"new;FI"Rack::Reloader;F[I"new;FI"Rack::BodyProxy;F[I"new;FI"Rack::RewindableInput;F[I"new;FI"Rack::Directory;F[I"new;FI"Rack::Handler::WEBrick;F[ I"new;FI"run;FI" shutdown;FI"valid_options;FI"Rack::Handler::SCGI;F[I"new;FI"run;FI"valid_options;FI"Rack::Handler::Mongrel;F[I"new;FI"run;FI"valid_options;FI"Rack::Handler::LSWS;F[ I"run;FI"send_body;FI"send_headers;FI" serve;FI"Rack::Handler::CGI;F[ I"run;FI"send_body;FI"send_headers;FI" serve;FI"Rack::Handler::FastCGI;F[ I"run;FI"send_body;FI"send_headers;FI" serve;FI"valid_options;FI"Rack::Handler::Thin;F[I"run;FI"valid_options;FI"Rack::MethodOverride;F[I"new;FI"Rack::Chunked;F[I"new;FI"Rack::Chunked::Body;F[I"new;FI"Rack::NullLogger;F[I"new;FI"Rack::Session::Pool;F[I"new;FI"Rack::Session::Cookie;F[I"new;FI"Rack::Session::Memcache;F[I"new;F@[ I" find;FI"new;FI"set;FI"set_options;F@[I"new;FI"Rack::Builder;F[ I"app;FI"new;FI"new_from_string;FI"parse_file;FI"Rack::ConditionalGet;F[I"new;FI"Rack::URLMap;F[I"new;FI"Rack::Logger;F[I"new;FI"Rack::Lint;F[I"new;FI"Rack::CommonLogger;F[I"new;FI"Rack::Config;F[I"new;FI"Rack::Static;F[I"new;FI" Rack;F[I" release;FI" version;FI"Rack::Utils;F[I"best_q_match;FI"build_nested_query;FI"build_query;FI"byte_ranges;FI" bytesize;FI"clean_path_info;FI"delete_cookie_header!;FI" escape;FI"escape_html;FI"escape_path;FI"key_space_limit;FI"multipart_part_limit;FI"normalize_params;FI"param_depth_limit;FI"params_hash_type?;FI"parse_nested_query;FI"parse_query;FI" q_values;FI" rfc2109;FI" rfc2822;FI"secure_compare;FI"select_best_encoding;FI"set_cookie_header!;FI"status_code;FI" unescape;FI"Rack::Multipart;F[I"build_multipart;FI"parse_multipart;FI"Rack::Utils::Multipart;F[@@I"Rack::Handler;F[ I" default;FI"get;FI" pick;FI" register;FI"try_require;FI"Rack::Mime;F[I" match?;FI"mime_type;F: encodingIu: Encoding US-ASCII;F:instance_methods{NI"Rack::ShowExceptions;F[ I" call;FI"dump_exception;FI"prefers_plaintext?;FI" pretty;FI"Rack::ETag;F[I" call;FI"Rack::Auth::Basic;F[I" call;F@[I" basic?;FI"credentials;FI" username;F@[ I" digest;FI" fresh?;FI" stale?;FI" to_s;FI" valid?;F@[ I"[];FI"[]=;FI" quote;FI" to_s;F@[ I"correct_uri?;FI" digest?;FI" method;FI"method_missing;FI" nonce;FI" params;FI"respond_to?;FI"Rack::Auth::Digest::MD5;F[ I" call;FI" opaque;FI"passwords_hashed;FI"passwords_hashed?;F@[ I" params;FI" parts;FI"provided?;FI" request;FI" scheme;F@[I" realm;FI"Rack::Multipart::Parser;F[I" parse;F@%[I" dump;F@'[ I"content_type;FI"local_path;FI"original_filename;FI" path;FI"respond_to?;FI"Rack::Request;F[@I"GET;FI" POST;FI"[];FI"[]=;FI"accept_encoding;FI"accept_language;FI" base_url;FI" body;FI"content_charset;FI"content_length;FI"content_type;FI" cookies;FI" delete?;FI"delete_param;FI"env;FI"form_data?;FI" fullpath;FI" get?;FI" head?;FI" host;FI"host_with_port;FI"ip;FI" link?;FI" logger;FI"media_type;FI"media_type_params;FI" options?;FI" params;FI"parse_http_accept_header;FI"parse_multipart;FI"parse_query;FI"parseable_data?;FI" patch?;FI" path;FI"path_info;FI"path_info=;FI" port;FI" post?;FI" put?;FI"query_string;FI" referer;FI" referrer;FI" reject_trusted_ip_addresses;FI"request_method;FI" scheme;FI"script_name;FI"script_name=;FI" session;FI"session_options;FI"split_ip_addresses;FI" ssl?;FI" trace?;FI"trusted_proxy?;FI" unlink?;FI"update_param;FI"url;FI"user_agent;FI"values_at;FI" xhr?;FI"Rack::TempfileReaper;F[I" call;FI"Rack::Deflater;F[I" call;F@/[I" close;FI" each;FI" write;F@1[I" close;FI" each;FI"Rack::ForwardRequest;F[I"env;FI"url;FI"Rack::Recursive;F[I" _call;FI" call;FI" include;FI"Rack::Lobster;F[I" call;FI"Rack::ShowStatus;F[I" call;FI"Rack::Response;F[I"[];FI"[]=;FI" body;FI" close;FI"delete_cookie;FI" each;FI" empty?;FI" finish;FI" header;FI" headers;FI" length;FI" redirect;FI"set_cookie;FI" status;FI" to_a;FI" to_ary;FI" write;FI"Rack::Head;F[I" call;FI"Rack::Runtime;F[I" call;FI"Rack::ContentType;F[I" call;FI"Rack::Utils::Context;F[ I"app;FI" call;FI" context;FI"for;FI"recontext;FI"Rack::Utils::HeaderHash;F[I"[];FI"[]=;FI" delete;FI" each;FI" has_key?;FI" include?;FI" key?;FI" member?;FI" merge;FI" merge!;FI" replace;FI" to_hash;F@T[ I"[];FI"[]=;FI" key?;FI"to_params_hash;FI"Rack::ContentLength;F[I" call;FI"Rack::Cascade;F[ I"<<;FI"add;FI" apps;FI" call;FI" include?;FI"Rack::Sendfile;F[I" call;FI"Rack::MockRequest;F[ I" delete;FI"get;FI" head;FI" options;FI" patch;FI" post;FI"put;FI" request;F@a[ I" flush;FI" puts;FI" string;FI" write;FI"Rack::MockResponse;F[ I"=~;FI" body;FI" empty?;FI" errors;FI" match;FI"original_headers;FI"Rack::File;F[ I" _call;FI"cache_control;FI" call;FI" each;FI" path;FI" root;FI" serving;FI" to_path;FI"Rack::Server;F[ I"app;FI"default_options;FI"middleware;FI" options;FI" server;FI" start;FI"Rack::Server::Options;F[I"handler_opts;FI" parse!;FI"Rack::Lock;F[I" call;FI"Rack::Reloader;F[I" call;FI" reload!;FI"safe_load;FI"Rack::BodyProxy;F[ I" close;FI" closed?;FI" each;FI"method_missing;FI"respond_to?;FI"Rack::RewindableInput;F[ I" close;FI" each;FI" gets;FI" read;FI" rewind;F@z[I" _close;FI"Rack::Directory;F[I" _call;FI" call;FI"check_forbidden;FI" each;FI"entity_not_found;FI" files;FI"filesize_format;FI"list_directory;FI"list_path;FI" path;FI" root;FI" stat;FI"WEBrick::HTTPResponse;F[I"_rack_setup_header;FI" rack;FI"setup_header;FI"Rack::Handler::WEBrick;F[I" service;FI"Rack::Handler::SCGI;F[I"app;FI"process_request;FI"Rack::Handler::Mongrel;F[I" process;FI"FCGI::Stream;F[I"_rack_read_without_buffer;FI" read;FI"Rack::MethodOverride;F[I" call;FI"method_override;FI"Rack::Chunked;F[I" call;FI"chunkable_version?;FI"Rack::Chunked::Body;F[I" close;FI" each;FI"Rack::NullLogger;F[I"<<;FI"add;FI" call;FI" close;FI"datetime_format;FI"datetime_format=;FI" debug;FI" debug?;FI" error;FI" error?;FI" fatal;FI" fatal?;FI"formatter;FI"formatter=;FI" info;FI" info?;FI" level;FI" level=;FI" progname;FI"progname=;FI"sev_threshold;FI"sev_threshold=;FI" unknown;FI" warn;FI" warn?;FI"Rack::Session::Pool;F[ I"destroy_session;FI"generate_sid;FI"get_session;FI" mutex;FI" pool;FI"set_session;FI"with_lock;FI"Rack::Session::Cookie;F[I" coder;F@[I" decode;FI" encode;F@[I" decode;FI" encode;F@[I" decode;FI" encode;F@[I" decode;FI" encode;F@[I" decode;FI" encode;FI"Rack::Session::Memcache;F[ I"destroy_session;FI"generate_sid;FI"get_session;FI" mutex;FI" pool;FI"set_session;FI"with_lock;F@[I"[];FI"[]=;FI" clear;FI" delete;FI" destroy;FI" each;FI" empty?;FI" exists?;FI" fetch;FI" has_key?;FI"id;FI" include?;FI" inspect;FI" key?;FI" keys;FI" loaded?;FI" merge!;FI" options;FI" replace;FI" store;FI" to_hash;FI" update;FI" values;F@[ I" call;FI" context;FI"default_options;FI"key;FI"Rack::Builder;F[ I" call;FI"map;FI"run;FI" to_app;FI"use;FI" warmup;FI"Rack::ConditionalGet;F[I" call;FI"Rack::URLMap;F[I" call;FI" remap;FI"Rack::Logger;F[I" call;FI"Rack::CommonLogger;F[I" call;FI"Rack::Config;F[I" call;FI"Rack::Static;F[ I"applicable_rules;FI" call;FI"can_serve;FI"overwrite_file_path;FI"route_file;FI"Rack::Response::Helpers;F[I"accepted?;FI"bad_request?;FI"client_error?;FI"content_length;FI"content_type;FI" created?;FI"forbidden?;FI" headers;FI"i_m_a_teapot?;FI" include?;FI"informational?;FI" invalid?;FI" location;FI"method_not_allowed?;FI"not_found?;FI"ok?;FI"original_headers;FI"redirect?;FI"redirection?;FI"server_error?;FI"successful?;FI"unauthorized?;FI"unprocessable?;FI"Rack::Utils::OkJson;F[I" decode;FI" encode;FI" valenc;FI"Rack::Reloader::Stat;F[I"figure_path;FI" rotation;FI"safe_stat;F: modules[lI" FCGI;FI"FCGI::Stream;F@ I" Rack;FI"Rack::Auth;FI" Rack::Auth::AbstractHandler;F@I"Rack::Auth::Basic;FI"Rack::Auth::Basic::Request;FI"Rack::Auth::Digest;FI"Rack::Auth::Digest::MD5;FI"Rack::Auth::Digest::Nonce;FI"Rack::Auth::Digest::Params;FI" Rack::Auth::Digest::Request;FI"Rack::BodyProxy;FI"Rack::Builder;FI"Rack::Cascade;FI"Rack::Chunked;FI"Rack::Chunked::Body;FI"Rack::CommonLogger;FI"Rack::ConditionalGet;FI"Rack::Config;FI"Rack::ContentLength;FI"Rack::ContentType;FI"Rack::Deflater;FI""Rack::Deflater::DeflateStream;FI"Rack::Deflater::GzipStream;FI"Rack::Directory;FI"Rack::ETag;FI"Rack::File;FI"Rack::ForwardRequest;FI"Rack::Handler;FI"Rack::Handler::CGI;FI""Rack::Handler::EventedMongrel;FI"Rack::Handler::FastCGI;FI"Rack::Handler::LSWS;F@I"Rack::Handler::SCGI;FI"&Rack::Handler::SwiftipliedMongrel;FI"Rack::Handler::Thin;FI"Rack::Handler::WEBrick;FI"Rack::Head;FI"Rack::Lint;FI"Rack::Lint::ErrorWrapper;FI"Rack::Lint::HijackWrapper;FI"Rack::Lint::InputWrapper;FI"Rack::Lint::LintError;FI"Rack::Lobster;FI"Rack::Lock;FI"Rack::Logger;FI"Rack::MethodOverride;FI"Rack::Mime;FI"Rack::MockRequest;FI"#Rack::MockRequest::FatalWarner;FI"$Rack::MockRequest::FatalWarning;FI"Rack::MockResponse;FI"Rack::Multipart;FI"Rack::Multipart::Generator;FI"-Rack::Multipart::MultipartPartLimitError;FI"Rack::Multipart::Parser;FI""Rack::Multipart::UploadedFile;FI"Rack::NullLogger;FI"Rack::Recursive;FI"Rack::Reloader;FI"Rack::Reloader::Stat;FI"Rack::Request;F@e@AI"Rack::RewindableInput;FI"$Rack::RewindableInput::Tempfile;FI"Rack::Runtime;FI"Rack::Sendfile;FI"Rack::Server;FI"Rack::Server::Options;FI"Rack::Session;FI"Rack::Session::Abstract;FI" Rack::Session::Abstract::ID;FI")Rack::Session::Abstract::SessionHash;FI"Rack::Session::Cookie;F@I"(Rack::Session::Cookie::Base64::JSON;FI"+Rack::Session::Cookie::Base64::Marshal;FI"+Rack::Session::Cookie::Base64::ZipJSON;FI"$Rack::Session::Cookie::Identity;FI"Rack::Session::Memcache;FI"Rack::Session::Pool;FI"Rack::ShowExceptions;FI"Rack::ShowStatus;FI"Rack::Static;FI"Rack::TempfileReaper;FI"Rack::URLMap;F@HI"Rack::Utils::Context;FI"Rack::Utils::HeaderHash;FI"'Rack::Utils::InvalidParameterError;FI"+Rack::Utils::KeySpaceConstrainedParams;FI"Rack::Utils::Multipart;FI"Rack::Utils::OkJson;FI"Rack::Utils::OkJson::Error;FI"#Rack::Utils::OkJson::Utf8Error;FI"$Rack::Utils::ParameterTypeError;FI" WEBrick;FI"WEBrick::HTTPResponse;FPK![oFF created.ridnu[Thu, 05 Dec 2019 17:59:30 -0500 lib/rack.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/showexceptions.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/etag.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/auth/basic.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/auth/digest/nonce.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/auth/digest/params.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/auth/digest/request.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/auth/digest/md5.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/auth/abstract/request.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/auth/abstract/handler.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/multipart/parser.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/multipart/generator.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/multipart/uploaded_file.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/request.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/tempfile_reaper.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/deflater.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/recursive.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/lobster.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/backports/uri/common_193.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/backports/uri/common_18.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/backports/uri/common_192.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/showstatus.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/response.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/head.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/runtime.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/content_type.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/utils.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/content_length.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/cascade.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/sendfile.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/mock.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/file.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/utils/okjson.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/server.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/lock.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/reloader.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/body_proxy.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/rewindable_input.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/directory.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/webrick.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/evented_mongrel.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/scgi.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/mongrel.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/lsws.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/cgi.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/fastcgi.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/swiftiplied_mongrel.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler/thin.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/methodoverride.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/chunked.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/nulllogger.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/session/pool.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/session/cookie.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/session/memcache.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/session/abstract/id.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/handler.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/builder.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/multipart.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/conditionalget.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/urlmap.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/mime.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/logger.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/lint.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/commonlogger.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/config.rb Thu, 05 Dec 2019 17:59:30 -0500 lib/rack/static.rb Thu, 05 Dec 2019 17:59:30 -0500 README.rdoc Thu, 05 Dec 2019 17:59:30 -0500 KNOWN-ISSUES Thu, 05 Dec 2019 17:59:30 -0500 HISTORY.md Thu, 05 Dec 2019 17:59:30 -0500 PK!I::task.rbnu[# frozen_string_literal: true begin gem 'rdoc' rescue Gem::LoadError end unless defined?(RDoc) require_relative '../task' ## # RDoc::RI::Task creates ri data in ./.rdoc for your project. # # It contains the following tasks: # # [ri] # Build ri data # # [clobber_ri] # Delete ri data files. This target is automatically added to the main # clobber target. # # [reri] # Rebuild the ri data from scratch even if they are not out of date. # # Simple example: # # require 'rdoc/ri/task' # # RDoc::RI::Task.new do |ri| # ri.main = 'README.md' # ri.rdoc_files.include 'README.md', 'lib/**/*.rb' # end # # For further configuration details see RDoc::Task. class RDoc::RI::Task < RDoc::Task DEFAULT_NAMES = { # :nodoc: :clobber_rdoc => :clobber_ri, :rdoc => :ri, :rerdoc => :reri, } ## # Create an ri task with the given name. See RDoc::Task for documentation on # setting names. def initialize(name = DEFAULT_NAMES) # :yield: self super end def clobber_task_description # :nodoc: "Remove RI data files" end ## # Sets default task values def defaults super @rdoc_dir = '.rdoc' end def rdoc_task_description # :nodoc: 'Build RI data files' end def rerdoc_task_description # :nodoc: 'Rebuild RI data files' end end PK!4}TTstore.rbnu[# frozen_string_literal: true module RDoc::RI Store = RDoc::Store # :nodoc: end PK!Vnrr formatter.rbnu[# frozen_string_literal: true ## # For RubyGems backwards compatibility module RDoc::RI::Formatter # :nodoc: end PK!D9naapaths.rbnu[# frozen_string_literal: true require_relative '../rdoc' ## # The directories where ri data lives. Paths can be enumerated via ::each, or # queried individually via ::system_dir, ::site_dir, ::home_dir and ::gem_dir. module RDoc::RI::Paths #:stopdoc: require 'rbconfig' version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] BASE = File.join RbConfig::CONFIG['ridir'], version HOMEDIR = RDoc.home #:startdoc: ## # Iterates over each selected path yielding the directory and type. # # Yielded types: # :system:: Where Ruby's ri data is stored. Yielded when +system+ is # true # :site:: Where ri for installed libraries are stored. Yielded when # +site+ is true. Normally no ri data is stored here. # :home:: ~/.rdoc. Yielded when +home+ is true. # :gem:: ri data for an installed gem. Yielded when +gems+ is true. # :extra:: ri data directory from the command line. Yielded for each # entry in +extra_dirs+ def self.each(system = true, site = true, home = true, gems = :latest, *extra_dirs) # :yields: directory, type return enum_for __method__, system, site, home, gems, *extra_dirs unless block_given? extra_dirs.each do |dir| yield dir, :extra end yield system_dir, :system if system yield site_dir, :site if site yield home_dir, :home if home and HOMEDIR gemdirs(gems).each do |dir| yield dir, :gem end if gems nil end ## # The ri directory for the gem with +gem_name+. def self.gem_dir(name, version) req = Gem::Requirement.new "= #{version}" spec = Gem::Specification.find_by_name name, req File.join spec.doc_dir, 'ri' end ## # The latest installed gems' ri directories. +filter+ can be :all or # :latest. # # A +filter+ :all includes all versions of gems and includes gems without # ri documentation. def self.gemdirs(filter = :latest) ri_paths = {} all = Gem::Specification.map do |spec| [File.join(spec.doc_dir, 'ri'), spec.name, spec.version] end if filter == :all then gemdirs = [] all.group_by do |_, name, _| name end.sort_by do |group, _| group end.map do |group, items| items.sort_by do |_, _, version| version end.reverse_each do |dir,| gemdirs << dir end end return gemdirs end all.each do |dir, name, ver| next unless File.exist? dir if ri_paths[name].nil? or ver > ri_paths[name].first then ri_paths[name] = [ver, name, dir] end end ri_paths.sort_by { |_, (_, name, _)| name }.map { |k, v| v.last } rescue LoadError [] end ## # The location of the rdoc data in the user's home directory. # # Like ::system, ri data in the user's home directory is rare and predates # libraries distributed via RubyGems. ri data is rarely generated into this # directory. def self.home_dir HOMEDIR end ## # Returns existing directories from the selected documentation directories # as an Array. # # See also ::each def self.path(system = true, site = true, home = true, gems = :latest, *extra_dirs) path = raw_path system, site, home, gems, *extra_dirs path.select { |directory| File.directory? directory } end ## # Returns selected documentation directories including nonexistent # directories. # # See also ::each def self.raw_path(system, site, home, gems, *extra_dirs) path = [] each(system, site, home, gems, *extra_dirs) do |dir, type| path << dir end path.compact end ## # The location of ri data installed into the site dir. # # Historically this was available for documentation installed by Ruby # libraries predating RubyGems. It is unlikely to contain any content for # modern Ruby installations. def self.site_dir File.join BASE, 'site' end ## # The location of the built-in ri data. # # This data is built automatically when `make` is run when Ruby is # installed. If you did not install Ruby by hand you may need to install # the documentation yourself. Please consult the documentation for your # package manager or Ruby installer for details. You can also use the # rdoc-data gem to install system ri data for common versions of Ruby. def self.system_dir File.join BASE, 'system' end end PK!E## driver.rbnu[# frozen_string_literal: true require 'optparse' require_relative '../../rdoc' require_relative 'formatter' # For RubyGems backwards compatibility # TODO: Fix weird documentation with `require_relative` ## # The RI driver implements the command-line ri tool. # # The driver supports: # * loading RI data from: # * Ruby's standard library # * RubyGems # * ~/.rdoc # * A user-supplied directory # * Paging output (uses RI_PAGER environment variable, PAGER environment # variable or the less, more and pager programs) # * Interactive mode with tab-completion # * Abbreviated names (ri Zl shows Zlib documentation) # * Colorized output # * Merging output from multiple RI data sources class RDoc::RI::Driver ## # Base Driver error class class Error < RDoc::RI::Error; end ## # Raised when a name isn't found in the ri data stores class NotFoundError < Error def initialize(klass, suggestion_proc = nil) # :nodoc: @klass = klass @suggestion_proc = suggestion_proc end ## # Name that wasn't found def name @klass end def message # :nodoc: str = "Nothing known about #{@klass}" suggestions = @suggestion_proc&.call if suggestions and !suggestions.empty? str += "\nDid you mean? #{suggestions.join("\n ")}" end str end end ## # Show all method documentation following a class or module attr_accessor :show_all ## # An RDoc::RI::Store for each entry in the RI path attr_accessor :stores ## # Controls the user of the pager vs $stdout attr_accessor :use_stdout ## # Default options for ri def self.default_options options = {} options[:interactive] = false options[:profile] = false options[:show_all] = false options[:expand_refs] = true options[:use_stdout] = !$stdout.tty? options[:width] = 72 # By default all standard paths are used. options[:use_system] = true options[:use_site] = true options[:use_home] = true options[:use_gems] = true options[:extra_doc_dirs] = [] return options end ## # Dump +data_path+ using pp def self.dump(data_path) require 'pp' File.open data_path, 'rb' do |io| pp Marshal.load(io.read) end end ## # Parses +argv+ and returns a Hash of options def self.process_args(argv) options = default_options opts = OptionParser.new do |opt| opt.program_name = File.basename $0 opt.version = RDoc::VERSION opt.release = nil opt.summary_indent = ' ' * 4 opt.banner = <<-EOT Usage: #{opt.program_name} [options] [name ...] Where name can be: Class | Module | Module::Class Class::method | Class#method | Class.method | method gem_name: | gem_name:README | gem_name:History ruby: | ruby:NEWS | ruby:globals All class names may be abbreviated to their minimum unambiguous form. If a name is ambiguous, all valid options will be listed. A '.' matches either class or instance methods, while #method matches only instance and ::method matches only class methods. README and other files may be displayed by prefixing them with the gem name they're contained in. If the gem name is followed by a ':' all files in the gem will be shown. The file name extension may be omitted where it is unambiguous. 'ruby' can be used as a pseudo gem name to display files from the Ruby core documentation. Use 'ruby:' by itself to get a list of all available core documentation files. For example: #{opt.program_name} Fil #{opt.program_name} File #{opt.program_name} File.new #{opt.program_name} zip #{opt.program_name} rdoc:README #{opt.program_name} ruby:comments Note that shell quoting or escaping may be required for method names containing punctuation: #{opt.program_name} 'Array.[]' #{opt.program_name} compact\\! To see the default directories #{opt.program_name} will search, run: #{opt.program_name} --list-doc-dirs Specifying the --system, --site, --home, --gems, or --doc-dir options will limit ri to searching only the specified directories. ri options may be set in the RI environment variable. The ri pager can be set with the RI_PAGER environment variable or the PAGER environment variable. EOT opt.separator nil opt.separator "Options:" opt.separator nil opt.on("--[no-]interactive", "-i", "In interactive mode you can repeatedly", "look up methods with autocomplete.") do |interactive| options[:interactive] = interactive end opt.separator nil opt.on("--[no-]all", "-a", "Show all documentation for a class or", "module.") do |show_all| options[:show_all] = show_all end opt.separator nil opt.on("--[no-]list", "-l", "List classes ri knows about.") do |list| options[:list] = list end opt.separator nil opt.on("--[no-]pager", "Send output to a pager,", "rather than directly to stdout.") do |use_pager| options[:use_stdout] = !use_pager end opt.separator nil opt.on("-T", "Synonym for --no-pager.") do options[:use_stdout] = true end opt.separator nil opt.on("--width=WIDTH", "-w", OptionParser::DecimalInteger, "Set the width of the output.") do |width| options[:width] = width end opt.separator nil opt.on("--server[=PORT]", Integer, "Run RDoc server on the given port.", "The default port is 8214.") do |port| options[:server] = port || 8214 end opt.separator nil formatters = RDoc::Markup.constants.grep(/^To[A-Z][a-z]+$/).sort formatters = formatters.sort.map do |formatter| formatter.to_s.sub('To', '').downcase end formatters -= %w[html label test] # remove useless output formats opt.on("--format=NAME", "-f", "Use the selected formatter. The default", "formatter is bs for paged output and ansi", "otherwise. Valid formatters are:", "#{formatters.join(', ')}.", formatters) do |value| options[:formatter] = RDoc::Markup.const_get "To#{value.capitalize}" end opt.separator nil opt.on("--[no-]expand-refs", "Expand rdoc-refs at the end of output") do |value| options[:expand_refs] = value end opt.separator nil opt.on("--help", "-h", "Show help and exit.") do puts opts exit end opt.separator nil opt.on("--version", "-v", "Output version information and exit.") do puts "#{opts.program_name} #{opts.version}" exit end opt.separator nil opt.separator "Data source options:" opt.separator nil opt.on("--[no-]list-doc-dirs", "List the directories from which ri will", "source documentation on stdout and exit.") do |list_doc_dirs| options[:list_doc_dirs] = list_doc_dirs end opt.separator nil opt.on("--doc-dir=DIRNAME", "-d", Array, "List of directories from which to source", "documentation in addition to the standard", "directories. May be repeated.") do |value| value.each do |dir| unless File.directory? dir then raise OptionParser::InvalidArgument, "#{dir} is not a directory" end options[:extra_doc_dirs] << File.expand_path(dir) end end opt.separator nil opt.on("--no-standard-docs", "Do not include documentation from", "the Ruby standard library, site_lib,", "installed gems, or ~/.rdoc.", "Use with --doc-dir.") do options[:use_system] = false options[:use_site] = false options[:use_gems] = false options[:use_home] = false end opt.separator nil opt.on("--[no-]system", "Include documentation from Ruby's", "standard library. Defaults to true.") do |value| options[:use_system] = value end opt.separator nil opt.on("--[no-]site", "Include documentation from libraries", "installed in site_lib.", "Defaults to true.") do |value| options[:use_site] = value end opt.separator nil opt.on("--[no-]gems", "Include documentation from RubyGems.", "Defaults to true.") do |value| options[:use_gems] = value end opt.separator nil opt.on("--[no-]home", "Include documentation stored in ~/.rdoc.", "Defaults to true.") do |value| options[:use_home] = value end opt.separator nil opt.separator "Debug options:" opt.separator nil opt.on("--[no-]profile", "Run with the ruby profiler.") do |value| options[:profile] = value end opt.separator nil opt.on("--dump=CACHE", "Dump data from an ri cache or data file.") do |value| unless File.readable?(value) abort "#{value.inspect} is not readable" end if File.directory?(value) abort "#{value.inspect} is a directory" end options[:dump_path] = File.new(value) end end argv = ENV['RI'].to_s.split(' ').concat argv opts.parse! argv options[:names] = argv options[:use_stdout] ||= !$stdout.tty? options[:use_stdout] ||= options[:interactive] options[:width] ||= 72 options rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e puts opts puts puts e exit 1 end ## # Runs the ri command line executable using +argv+ def self.run(argv = ARGV) options = process_args argv if options[:dump_path] then dump options[:dump_path] return end ri = new options ri.run end ## # Creates a new driver using +initial_options+ from ::process_args def initialize(initial_options = {}) @paging = false @classes = nil options = self.class.default_options.update(initial_options) @formatter_klass = options[:formatter] require 'profile' if options[:profile] @names = options[:names] @list = options[:list] @doc_dirs = [] @stores = [] RDoc::RI::Paths.each(options[:use_system], options[:use_site], options[:use_home], options[:use_gems], *options[:extra_doc_dirs]) do |path, type| @doc_dirs << path store = RDoc::RI::Store.new(RDoc::Options.new, path: path, type: type) store.load_cache @stores << store end @list_doc_dirs = options[:list_doc_dirs] @interactive = options[:interactive] @server = options[:server] @use_stdout = options[:use_stdout] @show_all = options[:show_all] @width = options[:width] @expand_refs = options[:expand_refs] end ## # Adds paths for undocumented classes +also_in+ to +out+ def add_also_in(out, also_in) return if also_in.empty? out << RDoc::Markup::Rule.new(1) out << RDoc::Markup::Paragraph.new("Also found in:") paths = RDoc::Markup::Verbatim.new also_in.each do |store| paths.parts.push store.friendly_path, "\n" end out << paths end ## # Adds a class header to +out+ for class +name+ which is described in # +classes+. def add_class(out, name, classes) heading = if classes.all? { |klass| klass.module? } then name else superclass = classes.map do |klass| klass.superclass unless klass.module? end.compact.shift || 'Object' superclass = superclass.full_name unless String === superclass "#{name} < #{superclass}" end out << RDoc::Markup::Heading.new(1, heading) out << RDoc::Markup::BlankLine.new end ## # Adds "(from ...)" to +out+ for +store+ def add_from(out, store) out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})") end ## # Adds +extends+ to +out+ def add_extends(out, extends) add_extension_modules out, 'Extended by', extends end ## # Adds a list of +extensions+ to this module of the given +type+ to +out+. # add_includes and add_extends call this, so you should use those directly. def add_extension_modules(out, type, extensions) return if extensions.empty? out << RDoc::Markup::Rule.new(1) out << RDoc::Markup::Heading.new(1, "#{type}:") extensions.each do |modules, store| if modules.length == 1 then add_extension_modules_single out, store, modules.first else add_extension_modules_multiple out, store, modules end end end ## # Renders multiple included +modules+ from +store+ to +out+. def add_extension_modules_multiple(out, store, modules) # :nodoc: out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})") wout, with = modules.partition { |incl| incl.comment.empty? } out << RDoc::Markup::BlankLine.new unless with.empty? with.each do |incl| out << RDoc::Markup::Paragraph.new(incl.name) out << RDoc::Markup::BlankLine.new out << incl.comment.parse end unless wout.empty? then verb = RDoc::Markup::Verbatim.new wout.each do |incl| verb.push incl.name, "\n" end out << verb end end ## # Adds a single extension module +include+ from +store+ to +out+ def add_extension_modules_single(out, store, include) # :nodoc: name = include.name path = store.friendly_path out << RDoc::Markup::Paragraph.new("#{name} (from #{path})") if include.comment then out << RDoc::Markup::BlankLine.new out << include.comment.parse end end ## # Adds +includes+ to +out+ def add_includes(out, includes) add_extension_modules out, 'Includes', includes end ## # Looks up the method +name+ and adds it to +out+ def add_method(out, name) filtered = lookup_method name method_document out, name, filtered end ## # Adds documentation for all methods in +klass+ to +out+ def add_method_documentation(out, klass) klass.method_list.each do |method| begin add_method out, method.full_name rescue NotFoundError next end end end ## # Adds a list of +methods+ to +out+ with a heading of +name+ def add_method_list(out, methods, name) return if methods.empty? out << RDoc::Markup::Heading.new(1, "#{name}:") out << RDoc::Markup::BlankLine.new if @use_stdout and !@interactive then out.concat methods.map { |method| RDoc::Markup::Verbatim.new method } else out << RDoc::Markup::IndentedParagraph.new(2, methods.join(', ')) end out << RDoc::Markup::BlankLine.new end ## # Returns ancestor classes of +klass+ def ancestors_of(klass) ancestors = [] unexamined = [klass] seen = [] loop do break if unexamined.empty? current = unexamined.shift seen << current stores = classes[current] next unless stores and not stores.empty? klasses = stores.flat_map do |store| store.ancestors[current] || [] end.uniq klasses = klasses - seen ancestors.concat klasses unexamined.concat klasses end ancestors.reverse end ## # For RubyGems backwards compatibility def class_cache # :nodoc: end ## # Builds a RDoc::Markup::Document from +found+, +klasess+ and +includes+ def class_document(name, found, klasses, includes, extends) also_in = [] out = RDoc::Markup::Document.new add_class out, name, klasses add_includes out, includes add_extends out, extends found.each do |store, klass| render_class out, store, klass, also_in end add_also_in out, also_in expand_rdoc_refs_at_the_bottom(out) out end ## # Adds the class +comment+ to +out+. def class_document_comment(out, document) # :nodoc: unless document.empty? then out << RDoc::Markup::Rule.new(1) if document.merged? then parts = document.parts parts = parts.zip [RDoc::Markup::BlankLine.new] * parts.length parts.flatten! parts.pop out.concat parts else out << comment end end end ## # Adds the constants from +klass+ to the Document +out+. def class_document_constants(out, klass) # :nodoc: return if klass.constants.empty? out << RDoc::Markup::Heading.new(1, "Constants:") out << RDoc::Markup::BlankLine.new list = RDoc::Markup::List.new :NOTE constants = klass.constants.sort_by { |constant| constant.name } list.items.concat constants.map { |constant| parts = constant.comment.parse.parts parts << RDoc::Markup::Paragraph.new('[not documented]') if parts.empty? RDoc::Markup::ListItem.new(constant.name, *parts) } out << list out << RDoc::Markup::BlankLine.new end ## # Hash mapping a known class or module to the stores it can be loaded from def classes return @classes if @classes @classes = {} @stores.each do |store| store.cache[:modules].each do |mod| # using default block causes searched-for modules to be added @classes[mod] ||= [] @classes[mod] << store end end @classes end ## # Returns the stores wherein +name+ is found along with the classes, # extends and includes that match it def classes_and_includes_and_extends_for(name) klasses = [] extends = [] includes = [] found = @stores.map do |store| begin klass = store.load_class name klasses << klass extends << [klass.extends, store] if klass.extends includes << [klass.includes, store] if klass.includes [store, klass] rescue RDoc::Store::MissingFileError end end.compact extends.reject! do |modules,| modules.empty? end includes.reject! do |modules,| modules.empty? end [found, klasses, includes, extends] end ## # Completes +name+ based on the caches. For Readline def complete(name) completions = [] klass, selector, method = parse_name name complete_klass name, klass, selector, method, completions complete_method name, klass, selector, completions completions.uniq.select {|s| s.start_with? name }.sort end def complete_klass(name, klass, selector, method, completions) # :nodoc: klasses = classes.keys # may need to include Foo when given Foo:: klass_name = method ? name : klass if name !~ /#|\./ then completions.replace klasses.grep(/^#{Regexp.escape klass_name}[^:]*$/) completions.concat klasses.grep(/^#{Regexp.escape name}[^:]*$/) if name =~ /::$/ completions << klass if classes.key? klass # to complete a method name elsif selector then completions << klass if classes.key? klass elsif classes.key? klass_name then completions << klass_name end end def complete_method(name, klass, selector, completions) # :nodoc: if completions.include? klass and name =~ /#|\.|::/ then methods = list_methods_matching name if not methods.empty? then # remove Foo if given Foo:: and a method was found completions.delete klass elsif selector then # replace Foo with Foo:: as given completions.delete klass completions << "#{klass}#{selector}" end methods.each do |klass_sel_method| match = klass_sel_method.match(/^(.+)(#|\.|::)([^#.:]+)$/) # match[2] is `::` for class method and `#` for instance method. # To be consistent with old completion that completes `['Foo#i', 'Foo::c']` for `Foo.`, # `.` should be a wildcard for both `#` and `::` here. if match && match[2] == selector || selector == '.' completions << match[1] + selector + match[3] end end end end ## # Converts +document+ to text and writes it to the pager def display(document) page do |io| f = formatter(io) f.width = @width if @width and f.respond_to?(:width) text = document.accept f io.write text end end ## # Outputs formatted RI data for class +name+. Groups undocumented classes def display_class(name) return if name =~ /#|\./ found, klasses, includes, extends = classes_and_includes_and_extends_for name return if found.empty? out = class_document name, found, klasses, includes, extends display out end ## # Outputs formatted RI data for method +name+ def display_method(name) out = RDoc::Markup::Document.new add_method out, name expand_rdoc_refs_at_the_bottom(out) display out end ## # Outputs formatted RI data for the class or method +name+. # # Returns true if +name+ was found, false if it was not an alternative could # be guessed, raises an error if +name+ couldn't be guessed. def display_name(name) if name =~ /\w:(\w|$)/ then display_page name return true end return true if display_class name display_method name if name =~ /::|#|\./ true rescue NotFoundError matches = list_methods_matching name if name =~ /::|#|\./ matches = classes.keys.grep(/^#{Regexp.escape name}/) if matches.empty? raise if matches.empty? page do |io| io.puts "#{name} not found, maybe you meant:" io.puts io.puts matches.sort.join("\n") end false end ## # Displays each name in +name+ def display_names(names) names.each do |name| name = expand_name name display_name name end end ## # Outputs formatted RI data for page +name+. def display_page(name) store_name, page_name = name.split ':', 2 store = @stores.find { |s| s.source == store_name } return display_page_list store if page_name.empty? pages = store.cache[:pages] unless pages.include? page_name then found_names = pages.select do |n| n =~ /#{Regexp.escape page_name}\.[^.]+$/ end if found_names.length.zero? then return display_page_list store, pages elsif found_names.length > 1 then return display_page_list store, found_names, page_name end page_name = found_names.first end page = store.load_page page_name display page.comment.parse end ## # Outputs a formatted RI page list for the pages in +store+. def display_page_list(store, pages = store.cache[:pages], search = nil) out = RDoc::Markup::Document.new title = if search then "#{search} pages" else 'Pages' end out << RDoc::Markup::Heading.new(1, "#{title} in #{store.friendly_path}") out << RDoc::Markup::BlankLine.new list = RDoc::Markup::List.new(:BULLET) pages.each do |page| list << RDoc::Markup::Paragraph.new(page) end out << list display out end def check_did_you_mean # :nodoc: if defined? DidYouMean::SpellChecker true else begin require 'did_you_mean' if defined? DidYouMean::SpellChecker true else false end rescue LoadError false end end end ## # Expands abbreviated klass +klass+ into a fully-qualified class. "Zl::Da" # will be expanded to Zlib::DataError. def expand_class(klass) class_names = classes.keys ary = class_names.grep(Regexp.new("\\A#{klass.gsub(/(?=::|\z)/, '[^:]*')}\\z")) if ary.length != 1 && ary.first != klass if check_did_you_mean suggestion_proc = -> { DidYouMean::SpellChecker.new(dictionary: class_names).correct(klass) } raise NotFoundError.new(klass, suggestion_proc) else raise NotFoundError, klass end end ary.first end ## # Expands the class portion of +name+ into a fully-qualified class. See # #expand_class. def expand_name(name) klass, selector, method = parse_name name return [selector, method].join if klass.empty? case selector when ':' then [find_store(klass), selector, method] else [expand_class(klass), selector, method] end.join end ## # Filters the methods in +found+ trying to find a match for +name+. def filter_methods(found, name) regexp = name_regexp name filtered = found.find_all do |store, methods| methods.any? { |method| method.full_name =~ regexp } end return filtered unless filtered.empty? found end ## # Yields items matching +name+ including the store they were found in, the # class being searched for, the class they were found in (an ancestor) the # types of methods to look up (from #method_type), and the method name being # searched for def find_methods(name) klass, selector, method = parse_name name types = method_type selector klasses = nil ambiguous = klass.empty? if ambiguous then klasses = classes.keys else klasses = ancestors_of klass klasses.unshift klass end methods = [] klasses.each do |ancestor| ancestors = classes[ancestor] next unless ancestors klass = ancestor if ambiguous ancestors.each do |store| methods << [store, klass, ancestor, types, method] end end methods = methods.sort_by do |_, k, a, _, m| [k, a, m].compact end methods.each do |item| yield(*item) # :yields: store, klass, ancestor, types, method end self end ## # Finds a store that matches +name+ which can be the name of a gem, "ruby", # "home" or "site". # # See also RDoc::Store#source def find_store(name) @stores.each do |store| source = store.source return source if source == name return source if store.type == :gem and source =~ /^#{Regexp.escape name}-\d/ end raise RDoc::RI::Driver::NotFoundError, name end ## # Creates a new RDoc::Markup::Formatter. If a formatter is given with -f, # use it. If we're outputting to a pager, use bs, otherwise ansi. def formatter(io) if @formatter_klass then @formatter_klass.new elsif paging? or !io.tty? then RDoc::Markup::ToBs.new else RDoc::Markup::ToAnsi.new end end ## # Runs ri interactively using Readline if it is available. def interactive puts "\nEnter the method name you want to look up." begin require 'readline' rescue LoadError end if defined? Readline then Readline.completion_proc = method :complete puts "You can use tab to autocomplete." end puts "Enter a blank line to exit.\n\n" loop do name = if defined? Readline then Readline.readline ">> ", true else print ">> " $stdin.gets end return if name.nil? or name.empty? begin display_name expand_name(name.strip) rescue NotFoundError => e puts e.message end end rescue Interrupt exit end ## # Lists classes known to ri starting with +names+. If +names+ is empty all # known classes are shown. def list_known_classes(names = []) classes = [] stores.each do |store| classes << store.module_names end classes = classes.flatten.uniq.sort unless names.empty? then filter = Regexp.union names.map { |name| /^#{name}/ } classes = classes.grep filter end page do |io| if paging? or io.tty? then if names.empty? then io.puts "Classes and Modules known to ri:" else io.puts "Classes and Modules starting with #{names.join ', '}:" end io.puts end io.puts classes.join("\n") end end ## # Returns an Array of methods matching +name+ def list_methods_matching(name) found = [] find_methods name do |store, klass, ancestor, types, method| if types == :instance or types == :both then methods = store.instance_methods[ancestor] if methods then matches = methods.grep(/^#{Regexp.escape method.to_s}/) matches = matches.map do |match| "#{klass}##{match}" end found.concat matches end end if types == :class or types == :both then methods = store.class_methods[ancestor] next unless methods matches = methods.grep(/^#{Regexp.escape method.to_s}/) matches = matches.map do |match| "#{klass}::#{match}" end found.concat matches end end found.uniq end ## # Loads RI data for method +name+ on +klass+ from +store+. +type+ and # +cache+ indicate if it is a class or instance method. def load_method(store, cache, klass, type, name) methods = store.public_send(cache)[klass] return unless methods method = methods.find do |method_name| method_name == name end return unless method store.load_method klass, "#{type}#{method}" rescue RDoc::Store::MissingFileError => e comment = RDoc::Comment.new("missing documentation at #{e.file}") comment.parse method = RDoc::AnyMethod.new nil, name method.comment = comment method end ## # Returns an Array of RI data for methods matching +name+ def load_methods_matching(name) found = [] find_methods name do |store, klass, ancestor, types, method| methods = [] methods << load_method(store, :class_methods, ancestor, '::', method) if [:class, :both].include? types methods << load_method(store, :instance_methods, ancestor, '#', method) if [:instance, :both].include? types found << [store, methods.compact] end found.reject do |path, methods| methods.empty? end end ## # Returns a filtered list of methods matching +name+ def lookup_method(name) found = load_methods_matching name if found.empty? if check_did_you_mean methods = [] _, _, method_name = parse_name name find_methods name do |store, klass, ancestor, types, method| methods.push(*store.class_methods[klass]) if [:class, :both].include? types methods.push(*store.instance_methods[klass]) if [:instance, :both].include? types end methods = methods.uniq suggestion_proc = -> { DidYouMean::SpellChecker.new(dictionary: methods).correct(method_name) } raise NotFoundError.new(name, suggestion_proc) else raise NotFoundError, name end end filter_methods found, name end ## # Builds a RDoc::Markup::Document from +found+, +klasses+ and +includes+ def method_document(out, name, filtered) out << RDoc::Markup::Heading.new(1, name) out << RDoc::Markup::BlankLine.new filtered.each do |store, methods| methods.each do |method| render_method out, store, method, name end end out end ## # Returns the type of method (:both, :instance, :class) for +selector+ def method_type(selector) case selector when '.', nil then :both when '#' then :instance else :class end end ## # Returns a regular expression for +name+ that will match an # RDoc::AnyMethod's name. def name_regexp(name) klass, type, name = parse_name name case type when '#', '::' then /^#{klass}#{type}#{Regexp.escape name}$/ else /^#{klass}(#|::)#{Regexp.escape name}$/ end end ## # Paginates output through a pager program. def page if pager = setup_pager then begin yield pager ensure pager.close end else yield $stdout end rescue Errno::EPIPE ensure @paging = false end ## # Are we using a pager? def paging? @paging end ## # Extracts the class, selector and method name parts from +name+ like # Foo::Bar#baz. # # NOTE: Given Foo::Bar, Bar is considered a class even though it may be a # method def parse_name(name) parts = name.split(/(::?|#|\.)/) if parts.length == 1 then if parts.first =~ /^[a-z]|^([%&*+\/<>^`|~-]|\+@|-@|<<|<=>?|===?|=>|=~|>>|\[\]=?|~@)$/ then type = '.' meth = parts.pop else type = nil meth = nil end elsif parts.length == 2 or parts.last =~ /::|#|\./ then type = parts.pop meth = nil elsif parts[1] == ':' then klass = parts.shift type = parts.shift meth = parts.join elsif parts[-2] != '::' or parts.last !~ /^[A-Z]/ then meth = parts.pop type = parts.pop end klass ||= parts.join [klass, type, meth] end ## # Renders the +klass+ from +store+ to +out+. If the klass has no # documentable items the class is added to +also_in+ instead. def render_class(out, store, klass, also_in) # :nodoc: document = klass.comment.parse # TODO the store's cache should always return an empty Array class_methods = store.class_methods[klass.full_name] || [] instance_methods = store.instance_methods[klass.full_name] || [] attributes = store.attributes[klass.full_name] || [] if document.empty? and instance_methods.empty? and class_methods.empty? then also_in << store return end add_from out, store class_document_comment out, document if class_methods or instance_methods or not klass.constants.empty? then out << RDoc::Markup::Rule.new(1) end class_document_constants out, klass add_method_list out, class_methods, 'Class methods' add_method_list out, instance_methods, 'Instance methods' add_method_list out, attributes, 'Attributes' add_method_documentation out, klass if @show_all end def render_method(out, store, method, name) # :nodoc: out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})") unless name =~ /^#{Regexp.escape method.parent_name}/ then out << RDoc::Markup::Heading.new(3, "Implementation from #{method.parent_name}") end out << RDoc::Markup::Rule.new(1) render_method_arguments out, method.arglists render_method_superclass out, method if method.is_alias_for al = method.is_alias_for alias_for = store.load_method al.parent_name, "#{al.name_prefix}#{al.name}" render_method_comment out, method, alias_for else render_method_comment out, method end end def render_method_arguments(out, arglists) # :nodoc: return unless arglists arglists = arglists.chomp.split "\n" arglists = arglists.map { |line| line + "\n" } out << RDoc::Markup::Verbatim.new(*arglists) out << RDoc::Markup::Rule.new(1) end def render_method_comment(out, method, alias_for = nil)# :nodoc: if alias_for unless method.comment.nil? or method.comment.empty? out << RDoc::Markup::BlankLine.new out << method.comment.parse end out << RDoc::Markup::BlankLine.new out << RDoc::Markup::Paragraph.new("(This method is an alias for #{alias_for.full_name}.)") out << RDoc::Markup::BlankLine.new out << alias_for.comment.parse out << RDoc::Markup::BlankLine.new else out << RDoc::Markup::BlankLine.new out << method.comment.parse out << RDoc::Markup::BlankLine.new end end def render_method_superclass(out, method) # :nodoc: return unless method.respond_to?(:superclass_method) and method.superclass_method out << RDoc::Markup::BlankLine.new out << RDoc::Markup::Heading.new(4, "(Uses superclass method #{method.superclass_method})") out << RDoc::Markup::Rule.new(1) end ## # Looks up and displays ri data according to the options given. def run if @list_doc_dirs then puts @doc_dirs elsif @list then list_known_classes @names elsif @server then start_server elsif @interactive or @names.empty? then interactive else display_names @names end rescue NotFoundError => e abort e.message end ## # Sets up a pager program to pass output through. Tries the RI_PAGER and # PAGER environment variables followed by pager, less then more. def setup_pager return if @use_stdout pagers = [ENV['RI_PAGER'], ENV['PAGER'], 'pager', 'less', 'more'] require 'shellwords' pagers.compact.uniq.each do |pager| pager = Shellwords.split(pager) next if pager.empty? io = IO.popen(pager, 'w') rescue next next if $? and $?.pid == io.pid and $?.exited? # pager didn't work @paging = true return io end @use_stdout = true nil end ## # Starts a WEBrick server for ri. def start_server begin require 'webrick' rescue LoadError abort "webrick is not found. You may need to `gem install webrick` to install webrick." end server = WEBrick::HTTPServer.new :Port => @server extra_doc_dirs = @stores.map {|s| s.type == :extra ? s.path : nil}.compact server.mount '/', RDoc::Servlet, nil, extra_doc_dirs trap 'INT' do server.shutdown end trap 'TERM' do server.shutdown end server.start end RDOC_REFS_REGEXP = /\[rdoc-ref:([\w.]+)(@.*)?\]/ def expand_rdoc_refs_at_the_bottom(out) return unless @expand_refs extracted_rdoc_refs = [] out.each do |part| content = if part.respond_to?(:text) part.text else next end rdoc_refs = content.scan(RDOC_REFS_REGEXP).uniq.map do |file_name, _anchor| file_name end extracted_rdoc_refs.concat(rdoc_refs) end found_pages = extracted_rdoc_refs.map do |ref| begin @stores.first.load_page(ref) rescue RDoc::Store::MissingFileError end end.compact found_pages.each do |page| out << RDoc::Markup::Heading.new(4, "Expanded from #{page.full_name}") out << RDoc::Markup::BlankLine.new out << page.comment.parse end end end PK!/^  *WEBrick/HTTPResponse/cdesc-HTTPResponse.rinu[U:RDoc::NormalClass[iI"HTTPResponse:EFI"WEBrick::HTTPResponse;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"LThis monkey patch allows for applications to perform their own chunking;FI";through WEBrick::HTTPResponse iff rack is set to true.;F: @fileI" lib/rack/handler/webrick.rb;F; 0[[ I" rack;FI"RW;F: publicF@[[[[I" class;F[[; [[:protected[[: private[[I" instance;F[[; [[I"_rack_setup_header;F@[I"setup_header;F@[; [[; [PK!&WEBrick/HTTPResponse/setup_header-i.rinu[U:RDoc::AnyMethod[iI"setup_header:EFI"'WEBrick::HTTPResponse#setup_header;FF: publico:RDoc::Markup::Document: @parts[: @file000[[I"_rack_setup_header;Fo;; [; 0I"();FI" lib/rack/handler/webrick.rb;FPK!-)BQWEBrick/HTTPResponse/rack-i.rinu[U:RDoc::Attr[ iI" rack:EFI"WEBrick::HTTPResponse#rack;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI" lib/rack/handler/webrick.rb;FPK!t,WEBrick/HTTPResponse/_rack_setup_header-i.rinu[U:RDoc::AnyMethod[iI"_rack_setup_header:EFI"-WEBrick::HTTPResponse#_rack_setup_header;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI" lib/rack/handler/webrick.rb;FPK!QߗWEBrick/cdesc-WEBrick.rinu[U:RDoc::NormalModule[iI" WEBrick:EF@0o:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!maFCGI/cdesc-FCGI.rinu[U:RDoc::NormalModule[iI" FCGI:EF@0o:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!N0,,FCGI/Stream/cdesc-Stream.rinu[U:RDoc::NormalClass[iI" Stream:EFI"FCGI::Stream;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I"_rack_read_without_buffer;FI" lib/rack/handler/fastcgi.rb;F[I" read;F@ [; [[; [PK!5 *FCGI/Stream/_rack_read_without_buffer-i.rinu[U:RDoc::AnyMethod[iI"_rack_read_without_buffer:EFI"+FCGI::Stream#_rack_read_without_buffer;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(n, buffer=nil);FI" lib/rack/handler/fastcgi.rb;FPK!H7FCGI/Stream/read-i.rinu[U:RDoc::AnyMethod[iI" read:EFI"FCGI::Stream#read;FF: publico:RDoc::Markup::Document: @parts[: @file000[[I"_rack_read_without_buffer;Fo;; [; 0I"(n, buffer=nil);FI" lib/rack/handler/fastcgi.rb;FPK!_Object/cdesc-Object.rinu[U:RDoc::NormalClass[iI" Object:EF@I"BasicObject;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK! nRack/ShowStatus/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::ShowStatus::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/showstatus.rb;FPK!f-#Rack/ShowStatus/cdesc-ShowStatus.rinu[U:RDoc::NormalClass[iI"ShowStatus:EFI"Rack::ShowStatus;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"CRack::ShowStatus catches all empty responses and replaces them;FI"&with a site explaining the error.;Fo:RDoc::Markup::BlankLineo; ;[I"GAdditional details can be put into rack.showstatus.detail;FI"Fand will be shown as HTML. If such details exist, the error page;FI"9is always rendered, even if the reply was not empty.;F: @fileI"lib/rack/showstatus.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[;[PK!I Rack/ShowStatus/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::ShowStatus#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/showstatus.rb;FPK!oM^Rack/Recursive/_call-i.rinu[U:RDoc::AnyMethod[iI" _call:EFI"Rack::Recursive#_call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/recursive.rb;FPK!N%Rack/Recursive/include-i.rinu[U:RDoc::AnyMethod[iI" include:EFI"Rack::Recursive#include;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(env, path);FI"lib/rack/recursive.rb;FPK!9)Rack/Recursive/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Recursive::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/recursive.rb;FPK!duFF!Rack/Recursive/cdesc-Recursive.rinu[U:RDoc::NormalClass[iI"Recursive:EFI"Rack::Recursive;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[ I"ARack::Recursive allows applications called down the chain to;FI"3include data from other applications (by using;FI"<rack['rack.recursive.include'][...] or raise a;FI"+ForwardRequest to redirect internally.;F: @fileI"lib/rack/recursive.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" _call;F@[I" call;F@[I" include;F@[; [[; [PK!+ӳǠRack/Recursive/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Recursive#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/recursive.rb;FPK!0 pRack/MockResponse/%3d%7e-i.rinu[U:RDoc::AnyMethod[iI"=~:EFI"Rack::MockResponse#=~;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (other);FI"lib/rack/mock.rb;FPK!r\\'Rack/MockResponse/cdesc-MockResponse.rinu[U:RDoc::NormalClass[iI"MockResponse:EFI"Rack::MockResponse;FI"Rack::Response;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"FRack::MockResponse provides useful helpers for testing your apps.;FI"DUsually, you don't create the MockResponse on your own, but use;FI"MockRequest.;F: @fileI"lib/rack/mock.rb;F; 0[[ I" errors;FI"RW;F: publicF@[ I"original_headers;FI"R;F; F@[[[[I" class;F[[; [[I"new;F@[:protected[[: private[[I" instance;F[[; [ [I"=~;F@[I" body;F@[I" empty?;F@[I" match;F@[; [[; [PK!HORack/MockResponse/errors-i.rinu[U:RDoc::Attr[ iI" errors:EFI"Rack::MockResponse#errors;FI"RW;F: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I" Errors;F: @file0FI"lib/rack/mock.rb;FPK!DRack/MockResponse/empty%3f-i.rinu[U:RDoc::AnyMethod[iI" empty?:EFI"Rack::MockResponse#empty?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/mock.rb;FPK!*w9Rack/MockResponse/match-i.rinu[U:RDoc::AnyMethod[iI" match:EFI"Rack::MockResponse#match;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (other);FI"lib/rack/mock.rb;FPK!w"B'Rack/MockResponse/original_headers-i.rinu[U:RDoc::Attr[ iI"original_headers:EFI"(Rack::MockResponse#original_headers;FI"R;F: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I" Headers;F: @file0FI"lib/rack/mock.rb;FPK!}SRack/MockResponse/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::MockResponse::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"5(status, headers, body, errors=StringIO.new(""));FI"lib/rack/mock.rb;FPK!myRack/MockResponse/body-i.rinu[U:RDoc::AnyMethod[iI" body:EFI"Rack::MockResponse#body;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/mock.rb;FPK!®+Rack/Multipart/UploadedFile/local_path-i.rinu[U:RDoc::AnyMethod[iI"local_path:EFI"-Rack::Multipart::UploadedFile#local_path;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"(lib/rack/multipart/uploaded_file.rb;FPK!vi.Rack/Multipart/UploadedFile/respond_to%3f-i.rinu[U:RDoc::AnyMethod[iI"respond_to?:EFI".Rack::Multipart::UploadedFile#respond_to?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (*args);FI"(lib/rack/multipart/uploaded_file.rb;FPK!v%Rack/Multipart/UploadedFile/path-i.rinu[U:RDoc::AnyMethod[iI" path:EFI"'Rack::Multipart::UploadedFile#path;FF: publico:RDoc::Markup::Document: @parts[: @file000[[I"local_path;Fo;; [; 0I"();FI"(lib/rack/multipart/uploaded_file.rb;FPK!ek$Rack/Multipart/UploadedFile/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"'Rack::Multipart::UploadedFile::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"8(path, content_type = "text/plain", binary = false);FI"(lib/rack/multipart/uploaded_file.rb;FPK!mLR1Rack/Multipart/UploadedFile/cdesc-UploadedFile.rinu[U:RDoc::NormalClass[iI"UploadedFile:EFI""Rack::Multipart::UploadedFile;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[ I"content_type;FI"RW;F: publicFI"(lib/rack/multipart/uploaded_file.rb;F[ I"original_filename;FI"R;F; F@[[[[I" class;F[[; [[I"new;F@[:protected[[: private[[I" instance;F[[; [[I"local_path;F@[I" path;F@[I"respond_to?;F@[; [[; [PK!$6--2Rack/Multipart/UploadedFile/original_filename-i.rinu[U:RDoc::Attr[ iI"original_filename:EFI"4Rack::Multipart::UploadedFile#original_filename;FI"R;F: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"CThe filename, *not* including the path, of the "uploaded" file;F: @file0FI"(lib/rack/multipart/uploaded_file.rb;FPK![  -Rack/Multipart/UploadedFile/content_type-i.rinu[U:RDoc::Attr[ iI"content_type:EFI"/Rack::Multipart::UploadedFile#content_type;FI"RW;F: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I",The content type of the "uploaded" file;F: @file0FI"(lib/rack/multipart/uploaded_file.rb;FPK!nK#Rack/Multipart/parse_multipart-c.rinu[U:RDoc::AnyMethod[iI"parse_multipart:EFI"%Rack::Multipart::parse_multipart;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/multipart.rb;FPK!~  GRack/Multipart/MultipartPartLimitError/cdesc-MultipartPartLimitError.rinu[U:RDoc::NormalClass[iI"MultipartPartLimitError:EFI"-Rack::Multipart::MultipartPartLimitError;FI"Errno::EMFILE;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!Dm!Rack/Multipart/Generator/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"$Rack::Multipart::Generator::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(params, first = true);FI"$lib/rack/multipart/generator.rb;FPK!T2/+++Rack/Multipart/Generator/cdesc-Generator.rinu[U:RDoc::NormalClass[iI"Generator:EFI"Rack::Multipart::Generator;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[I"new;FI"$lib/rack/multipart/generator.rb;F[:protected[[: private[[I" instance;F[[; [[I" dump;F@[; [[; [PK!h"Rack/Multipart/Generator/dump-i.rinu[U:RDoc::AnyMethod[iI" dump:EFI"$Rack::Multipart::Generator#dump;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/multipart/generator.rb;FPK!g2#Rack/Multipart/build_multipart-c.rinu[U:RDoc::AnyMethod[iI"build_multipart:EFI"%Rack::Multipart::build_multipart;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(params, first = true);FI"lib/rack/multipart.rb;FPK!ۃ!Rack/Multipart/cdesc-Multipart.rinu[U:RDoc::NormalModule[iI"Multipart:EFI"Rack::Multipart;F0o:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"5A multipart form data parser, adapted from IOWA.;Fo:RDoc::Markup::BlankLineo; ;[I"Rack/Request/host-i.rinu[U:RDoc::AnyMethod[iI" host:EFI"Rack::Request#host;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!`2  Rack/Request/trace%3f-i.rinu[U:RDoc::AnyMethod[iI" trace?:EFI"Rack::Request#trace?;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"LChecks the HTTP request method (or verb) to see if it was of type TRACE;F: @file000[I"();FI"lib/rack/request.rb;FPK!*Rack/Request/params-i.rinu[U:RDoc::AnyMethod[iI" params:EFI"Rack::Request#params;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"$The union of GET and POST data.;Fo:RDoc::Markup::BlankLineo; ; [I"Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to destructively modify params.;F: @file000[I"();FI"lib/rack/request.rb;FPK!СRack/Request/fullpath-i.rinu[U:RDoc::AnyMethod[iI" fullpath:EFI"Rack::Request#fullpath;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!@Rack/Request/post%3f-i.rinu[U:RDoc::AnyMethod[iI" post?:EFI"Rack::Request#post?;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"KChecks the HTTP request method (or verb) to see if it was of type POST;F: @file000[I"();FI"lib/rack/request.rb;FPK!Қg,!Rack/Request/content_charset-i.rinu[U:RDoc::AnyMethod[iI"content_charset:EFI""Rack::Request#content_charset;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [ I"DThe character set of the request body if a "charset" media type;FI"Dparameter was given, or nil if no "charset" was specified. Note;FI"Cthat, per RFC2616, text/* media types that specify no explicit;FI"-charset are to be considered ISO-8859-1.;F: @file000[I"();FI"lib/rack/request.rb;FPK!Y כRack/Request/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Request::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/request.rb;FPK!%i::Rack/Request/media_type-i.rinu[U:RDoc::AnyMethod[iI"media_type:EFI"Rack::Request#media_type;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"EThe media type (type/subtype) portion of the CONTENT_TYPE header;FI"Bwithout any media type parameters. e.g., when CONTENT_TYPE is;FI"@"text/plain;charset=utf-8", the media-type is "text/plain".;Fo:RDoc::Markup::BlankLineo; ; [I"AFor more information on the use of media types in HTTP, see:;FI"Ahttp://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7;F: @file000[I"();FI"lib/rack/request.rb;FPK!0}۬Rack/Request/parse_query-i.rinu[U:RDoc::AnyMethod[iI"parse_query:EFI"Rack::Request#parse_query;FF:protectedo:RDoc::Markup::Document: @parts[: @file000[I" (qs);FI"lib/rack/request.rb;FPK!%Y*Rack/Request/parse_http_accept_header-i.rinu[U:RDoc::AnyMethod[iI"parse_http_accept_header:EFI"+Rack::Request#parse_http_accept_header;FF:protectedo:RDoc::Markup::Document: @parts[: @file000[I" (header);FI"lib/rack/request.rb;FPK!j#\[ Rack/Request/host_with_port-i.rinu[U:RDoc::AnyMethod[iI"host_with_port:EFI"!Rack::Request#host_with_port;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!zxRack/Request/user_agent-i.rinu[U:RDoc::AnyMethod[iI"user_agent:EFI"Rack::Request#user_agent;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!l伙Rack/Request/xhr%3f-i.rinu[U:RDoc::AnyMethod[iI" xhr?:EFI"Rack::Request#xhr?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!mRack/Request/port-i.rinu[U:RDoc::AnyMethod[iI" port:EFI"Rack::Request#port;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!<ߖRack/Request/get%3f-i.rinu[U:RDoc::AnyMethod[iI" get?:EFI"Rack::Request#get?;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"JChecks the HTTP request method (or verb) to see if it was of type GET;F: @file000[I"();FI"lib/rack/request.rb;FPK![9 Rack/Request/request_method-i.rinu[U:RDoc::AnyMethod[iI"request_method:EFI"!Rack::Request#request_method;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!rʭ Rack/Request/content_length-i.rinu[U:RDoc::AnyMethod[iI"content_length:EFI"!Rack::Request#content_length;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!N+_ERack/Request/link%3f-i.rinu[U:RDoc::AnyMethod[iI" link?:EFI"Rack::Request#link?;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"KChecks the HTTP request method (or verb) to see if it was of type LINK;F: @file000[I"();FI"lib/rack/request.rb;FPK!ɼRack/Request/form_data%3f-i.rinu[U:RDoc::AnyMethod[iI"form_data?:EFI"Rack::Request#form_data?;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [ I"FDetermine whether the request body contains form-data by checking;FI"9the request Content-Type for one of the media-types:;FI"F"application/x-www-form-urlencoded" or "multipart/form-data". The;FI">list of form-data media types can be modified through the;FI"#+FORM_DATA_MEDIA_TYPES+ array.;Fo:RDoc::Markup::BlankLineo; ; [I"@A request body is also assumed to contain form-data when no;FI"DContent-Type header is provided and the request_method is POST.;F: @file000[I"();FI"lib/rack/request.rb;FPK!"[Rack/Request/ip-i.rinu[U:RDoc::AnyMethod[iI"ip:EFI"Rack::Request#ip;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!HIRack/Request/session-i.rinu[U:RDoc::AnyMethod[iI" session:EFI"Rack::Request#session;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK! Rack/Request/referrer-i.rinu[U:RDoc::AnyMethod[iI" referrer:EFI"Rack::Request#referrer;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!Rack/Request/%5b%5d-i.rinu[U:RDoc::AnyMethod[iI"[]:EFI"Rack::Request#[];FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"%shortcut for request.params[key];F: @file000[I" (key);FI"lib/rack/request.rb;FPK!!Rack/Request/parse_multipart-i.rinu[U:RDoc::AnyMethod[iI"parse_multipart:EFI""Rack::Request#parse_multipart;FF:protectedo:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/request.rb;FPK!0X"Rack/Request/trusted_proxy%3f-i.rinu[U:RDoc::AnyMethod[iI"trusted_proxy?:EFI"!Rack::Request#trusted_proxy?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (ip);FI"lib/rack/request.rb;FPK!֝Rack/Request/env-i.rinu[U:RDoc::Attr[ iI"env:EFI"Rack::Request#env;FI"R;F: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"$The environment of the request.;F: @file0FI"lib/rack/request.rb;FPK!:tؘ  Rack/Request/patch%3f-i.rinu[U:RDoc::AnyMethod[iI" patch?:EFI"Rack::Request#patch?;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"LChecks the HTTP request method (or verb) to see if it was of type PATCH;F: @file000[I"();FI"lib/rack/request.rb;FPK!2  Rack/Request/update_param-i.rinu[U:RDoc::AnyMethod[iI"update_param:EFI"Rack::Request#update_param;FF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"TDestructively update a parameter, whether it's in GET and/or POST. Returns nil.;Fo:RDoc::Markup::BlankLineo; ; [I"The parameter is updated wherever it was previous defined, so GET, POST, or both. If it wasn't previously defined, it's inserted into GET.;F@o; ; [I"&env['rack.input'] is not touched.;F: @file000[I" (k, v);FI"lib/rack/request.rb;FPK!I=Rack/Request/options%3f-i.rinu[U:RDoc::AnyMethod[iI" options?:EFI"Rack::Request#options?;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"NChecks the HTTP request method (or verb) to see if it was of type OPTIONS;F: @file000[I"();FI"lib/rack/request.rb;FPK!ZU!Rack/Request/session_options-i.rinu[U:RDoc::AnyMethod[iI"session_options:EFI""Rack::Request#session_options;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK! -Rack/Request/reject_trusted_ip_addresses-i.rinu[U:RDoc::AnyMethod[iI" reject_trusted_ip_addresses:EFI".Rack::Request#reject_trusted_ip_addresses;FF:protectedo:RDoc::Markup::Document: @parts[: @file000[I"(ip_addresses);FI"lib/rack/request.rb;FPK!gXRack/Request/script_name-i.rinu[U:RDoc::AnyMethod[iI"script_name:EFI"Rack::Request#script_name;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK!Z32Rack/Request/head%3f-i.rinu[U:RDoc::AnyMethod[iI" head?:EFI"Rack::Request#head?;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"KChecks the HTTP request method (or verb) to see if it was of type HEAD;F: @file000[I"();FI"lib/rack/request.rb;FPK!&#Rack/Request/media_type_params-i.rinu[U:RDoc::AnyMethod[iI"media_type_params:EFI"$Rack::Request#media_type_params;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [ I"EThe media type parameters provided in CONTENT_TYPE as a Hash, or;FI"Can empty Hash if no CONTENT_TYPE or media-type parameters were;FI"Jprovided. e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8",;FI"2this method responds with the following Hash:;Fo:RDoc::Markup::Verbatim; [I"{ 'charset' => 'utf-8' };F: @file000[I"();FI"lib/rack/request.rb;FPK!mm8!Rack/Request/accept_language-i.rinu[U:RDoc::AnyMethod[iI"accept_language:EFI""Rack::Request#accept_language;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/request.rb;FPK! pick ['thin', 'webrick'] ;FI"=> Rack::Handler::WEBrick;F: @file000[I"(server_names);FI"lib/rack/handler.rb;FPK!ұRack/Handler/CGI/send_body-c.rinu[U:RDoc::AnyMethod[iI"send_body:EFI""Rack::Handler::CGI::send_body;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (body);FI"lib/rack/handler/cgi.rb;FPK!9AARack/Handler/CGI/cdesc-CGI.rinu[U:RDoc::NormalClass[iI"CGI:EFI"Rack::Handler::CGI;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[ [I"run;FI"lib/rack/handler/cgi.rb;F[I"send_body;F@[I"send_headers;F@[I" serve;F@[:protected[[: private[[I" instance;F[[; [[; [[; [PK!W"Rack/Handler/CGI/send_headers-c.rinu[U:RDoc::AnyMethod[iI"send_headers:EFI"%Rack::Handler::CGI::send_headers;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(status, headers);FI"lib/rack/handler/cgi.rb;FPK!f.!Rack/Handler/CGI/run-c.rinu[U:RDoc::AnyMethod[iI"run:EFI"Rack::Handler::CGI::run;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, options=nil);FI"lib/rack/handler/cgi.rb;FPK!=ƨRack/Handler/CGI/serve-c.rinu[U:RDoc::AnyMethod[iI" serve:EFI"Rack::Handler::CGI::serve;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/handler/cgi.rb;FPK!Y0"Rack/Handler/WEBrick/shutdown-c.rinu[U:RDoc::AnyMethod[iI" shutdown:EFI"%Rack::Handler::WEBrick::shutdown;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI" lib/rack/handler/webrick.rb;FPK!RꮽRack/Handler/WEBrick/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI" Rack::Handler::WEBrick::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(server, app);FI" lib/rack/handler/webrick.rb;FPK!"'Rack/Handler/WEBrick/valid_options-c.rinu[U:RDoc::AnyMethod[iI"valid_options:EFI"*Rack::Handler::WEBrick::valid_options;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI" lib/rack/handler/webrick.rb;FPK!;0Rack/Handler/WEBrick/run-c.rinu[U:RDoc::AnyMethod[iI"run:EFI" Rack::Handler::WEBrick::run;FT: publico:RDoc::Markup::Document: @parts[: @file00I" server;F[I"(app, options={});FI" lib/rack/handler/webrick.rb;FPK!%V!Rack/Handler/WEBrick/service-i.rinu[U:RDoc::AnyMethod[iI" service:EFI"#Rack::Handler::WEBrick#service;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(req, res);FI" lib/rack/handler/webrick.rb;FPK!՘||%Rack/Handler/WEBrick/cdesc-WEBrick.rinu[U:RDoc::NormalClass[iI" WEBrick:EFI"Rack::Handler::WEBrick;FI"*WEBrick::HTTPServlet::AbstractServlet;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[ [I"new;FI" lib/rack/handler/webrick.rb;F[I"run;F@[I" shutdown;F@[I"valid_options;F@[:protected[[: private[[I" instance;F[[; [[I" service;F@[; [[; [PK!> xXX%Rack/Handler/Mongrel/cdesc-Mongrel.rinu[U:RDoc::NormalClass[iI" Mongrel:EFI"Rack::Handler::Mongrel;FI"Mongrel::HttpHandler;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[I"new;FI" lib/rack/handler/mongrel.rb;F[I"run;F@[I"valid_options;F@[:protected[[: private[[I" instance;F[[; [[I" process;F@[; [[; [PK!A)Rack/Handler/Mongrel/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI" Rack::Handler::Mongrel::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI" lib/rack/handler/mongrel.rb;FPK!߽'Rack/Handler/Mongrel/valid_options-c.rinu[U:RDoc::AnyMethod[iI"valid_options:EFI"*Rack::Handler::Mongrel::valid_options;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI" lib/rack/handler/mongrel.rb;FPK!ܢvRack/Handler/Mongrel/run-c.rinu[U:RDoc::AnyMethod[iI"run:EFI" Rack::Handler::Mongrel::run;FT: publico:RDoc::Markup::Document: @parts[: @file00I" server;F[I"(app, options={});FI" lib/rack/handler/mongrel.rb;FPK!s!Rack/Handler/Mongrel/process-i.rinu[U:RDoc::AnyMethod[iI" process:EFI"#Rack::Handler::Mongrel#process;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(request, response);FI" lib/rack/handler/mongrel.rb;FPK!$  ;Rack/Handler/SwiftipliedMongrel/cdesc-SwiftipliedMongrel.rinu[U:RDoc::NormalClass[iI"SwiftipliedMongrel:EFI"&Rack::Handler::SwiftipliedMongrel;FI"Rack::Handler::Mongrel;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!ܫ{ͬRack/Handler/default-c.rinu[U:RDoc::AnyMethod[iI" default:EFI"Rack::Handler::default;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(options = {});FI"lib/rack/handler.rb;FPK!vL!!Rack/Handler/Thin/cdesc-Thin.rinu[U:RDoc::NormalClass[iI" Thin:EFI"Rack::Handler::Thin;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[I"run;FI"lib/rack/handler/thin.rb;F[I"valid_options;F@[:protected[[: private[[I" instance;F[[; [[; [[; [PK!$Rack/Handler/Thin/valid_options-c.rinu[U:RDoc::AnyMethod[iI"valid_options:EFI"'Rack::Handler::Thin::valid_options;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/handler/thin.rb;FPK!jRack/Handler/Thin/run-c.rinu[U:RDoc::AnyMethod[iI"run:EFI"Rack::Handler::Thin::run;FT: publico:RDoc::Markup::Document: @parts[: @file00I" server;F[I"(app, options={});FI"lib/rack/handler/thin.rb;FPK!Rack/Handler/cdesc-Handler.rinu[U:RDoc::NormalModule[iI" Handler:EFI"Rack::Handler;F0o:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I".*Handlers* connect web servers with Rack.;Fo:RDoc::Markup::BlankLineo; ;[I"ARack includes Handlers for Thin, WEBrick, FastCGI, CGI, SCGI;FI"and LiteSpeed.;F@o; ;[I"MHandlers usually are activated by calling MyHandler.run(myapp).;FI"DA second optional hash can be passed to include server-specific;FI"configuration.;F: @fileI"lib/rack/handler.rb;F; 0[[[[[I" class;F[[: public[ [I" default;F@[I"get;F@[I" pick;F@[I" register;F@[I"try_require;F@[:protected[[: private[[I" instance;F[[; [[; [[;[PK!މ#Rack/Handler/FastCGI/send_body-c.rinu[U:RDoc::AnyMethod[iI"send_body:EFI"&Rack::Handler::FastCGI::send_body;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(out, body);FI" lib/rack/handler/fastcgi.rb;FPK!o&Rack/Handler/FastCGI/send_headers-c.rinu[U:RDoc::AnyMethod[iI"send_headers:EFI")Rack::Handler::FastCGI::send_headers;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(out, status, headers);FI" lib/rack/handler/fastcgi.rb;FPK!'Rack/Handler/FastCGI/valid_options-c.rinu[U:RDoc::AnyMethod[iI"valid_options:EFI"*Rack::Handler::FastCGI::valid_options;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI" lib/rack/handler/fastcgi.rb;FPK!sRack/Handler/FastCGI/run-c.rinu[U:RDoc::AnyMethod[iI"run:EFI" Rack::Handler::FastCGI::run;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, options={});FI" lib/rack/handler/fastcgi.rb;FPK!K%ee%Rack/Handler/FastCGI/cdesc-FastCGI.rinu[U:RDoc::NormalClass[iI" FastCGI:EFI"Rack::Handler::FastCGI;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[ [I"run;FI" lib/rack/handler/fastcgi.rb;F[I"send_body;F@[I"send_headers;F@[I" serve;F@[I"valid_options;F@[:protected[[: private[[I" instance;F[[; [[; [[; [PK!eW*YRack/Handler/FastCGI/serve-c.rinu[U:RDoc::AnyMethod[iI" serve:EFI""Rack::Handler::FastCGI::serve;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(request, app);FI" lib/rack/handler/fastcgi.rb;FPK!ËȯRack/Handler/register-c.rinu[U:RDoc::AnyMethod[iI" register:EFI"Rack::Handler::register;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(server, klass);FI"lib/rack/handler.rb;FPK!ym Rack/Handler/LSWS/send_body-c.rinu[U:RDoc::AnyMethod[iI"send_body:EFI"#Rack::Handler::LSWS::send_body;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (body);FI"lib/rack/handler/lsws.rb;FPK!X #Rack/Handler/LSWS/send_headers-c.rinu[U:RDoc::AnyMethod[iI"send_headers:EFI"&Rack::Handler::LSWS::send_headers;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(status, headers);FI"lib/rack/handler/lsws.rb;FPK!DDRack/Handler/LSWS/cdesc-LSWS.rinu[U:RDoc::NormalClass[iI" LSWS:EFI"Rack::Handler::LSWS;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[ [I"run;FI"lib/rack/handler/lsws.rb;F[I"send_body;F@[I"send_headers;F@[I" serve;F@[:protected[[: private[[I" instance;F[[; [[; [[; [PK!<Rack/Handler/LSWS/run-c.rinu[U:RDoc::AnyMethod[iI"run:EFI"Rack::Handler::LSWS::run;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, options=nil);FI"lib/rack/handler/lsws.rb;FPK!ERack/Handler/LSWS/serve-c.rinu[U:RDoc::AnyMethod[iI" serve:EFI"Rack::Handler::LSWS::serve;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/handler/lsws.rb;FPK!`f&Rack/Handler/SCGI/process_request-i.rinu[U:RDoc::AnyMethod[iI"process_request:EFI"(Rack::Handler::SCGI#process_request;FF: publico:RDoc::Markup::Document: @parts[: @file000[I""(request, input_body, socket);FI"lib/rack/handler/scgi.rb;FPK!|Rack/Handler/SCGI/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Handler::SCGI::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(settings = {});FI"lib/rack/handler/scgi.rb;FPK!eRack/Handler/SCGI/app-i.rinu[U:RDoc::Attr[ iI"app:EFI"Rack::Handler::SCGI#app;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/handler/scgi.rb;FPK!"$Rack/Handler/SCGI/valid_options-c.rinu[U:RDoc::AnyMethod[iI"valid_options:EFI"'Rack::Handler::SCGI::valid_options;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/handler/scgi.rb;FPK!`JllRack/Handler/SCGI/cdesc-SCGI.rinu[U:RDoc::NormalClass[iI" SCGI:EFI"Rack::Handler::SCGI;FI"SCGI::Processor;Fo:RDoc::Markup::Document: @parts[: @file0[[ I"app;FI"RW;F: publicFI"lib/rack/handler/scgi.rb;F[[[[I" class;F[[; [[I"new;F@[I"run;F@[I"valid_options;F@[:protected[[: private[[I" instance;F[[; [[I"process_request;F@[; [[; [PK!6Rack/Handler/SCGI/run-c.rinu[U:RDoc::AnyMethod[iI"run:EFI"Rack::Handler::SCGI::run;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, options=nil);FI"lib/rack/handler/scgi.rb;FPK!(Rack/Handler/get-c.rinu[U:RDoc::AnyMethod[iI"get:EFI"Rack::Handler::get;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (server);FI"lib/rack/handler.rb;FPK!5LބRack/Handler/try_require-c.rinu[U:RDoc::AnyMethod[iI"try_require:EFI"Rack::Handler::try_require;FT: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"KTransforms server-name constants to their canonical form as filenames,;FI"Gthen tries to require them but silences the LoadError if not found;Fo:RDoc::Markup::BlankLineo; ; [I"Naming convention:;F@o:RDoc::Markup::Verbatim; [ I"Foo # => 'foo' ;FI"FooBar # => 'foo_bar.rb' ;FI"FooBAR # => 'foobar.rb' ;FI"FOObar # => 'foobar.rb' ;FI"FOOBAR # => 'foobar.rb' ;FI"$FooBarBaz # => 'foo_bar_baz.rb';F: @file000[I"(prefix, const_name);FI"lib/rack/handler.rb;FPK!&3Rack/Handler/EventedMongrel/cdesc-EventedMongrel.rinu[U:RDoc::NormalClass[iI"EventedMongrel:EFI""Rack::Handler::EventedMongrel;FI"Rack::Handler::Mongrel;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!  Rack/Head/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Head::new;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"FRack::Head returns an empty body for all HEAD requests. It leaves;FI""all other requests unchanged.;F: @file000[I" (app);FI"lib/rack/head.rb;FPK!QRack/Head/cdesc-Head.rinu[U:RDoc::NormalClass[iI" Head:EFI"Rack::Head;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[I"new;FI"lib/rack/head.rb;F[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[; [PK!Rack/Head/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Head#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/head.rb;FPK!$$Rack/Utils/select_best_encoding-c.rinu[U:RDoc::AnyMethod[iI"select_best_encoding:EFI"&Rack::Utils::select_best_encoding;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"+(available_encodings, accept_encoding);FI"lib/rack/utils.rb;FPK! ORack/Utils/bytesize-c.rinu[U:RDoc::AnyMethod[iI" bytesize:EFI"Rack::Utils::bytesize;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (string);FI"lib/rack/utils.rb;FPK!nBRack/Utils/key_space_limit-c.rinu[U:RDoc::Attr[ iI"key_space_limit:EFI"!Rack::Utils::key_space_limit;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0TI"lib/rack/utils.rb;FPK!nK)Rack/Utils/Multipart/parse_multipart-c.rinu[U:RDoc::AnyMethod[iI"parse_multipart:EFI"%Rack::Multipart::parse_multipart;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/multipart.rb;FPK!g2)Rack/Utils/Multipart/build_multipart-c.rinu[U:RDoc::AnyMethod[iI"build_multipart:EFI"%Rack::Multipart::build_multipart;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(params, first = true);FI"lib/rack/multipart.rb;FPK!L6'Rack/Utils/Multipart/cdesc-Multipart.rinu[U:RDoc::NormalModule[iI"Multipart:EFI"Rack::Utils::Multipart;F0o:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"5A multipart form data parser, adapted from IOWA.;Fo:RDoc::Markup::BlankLineo; ;[I" $Rack/Utils/multipart_part_limit-c.rinu[U:RDoc::Attr[ iI"multipart_part_limit:EFI"&Rack::Utils::multipart_part_limit;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0TI"lib/rack/utils.rb;FPK!?Rack/Utils/InvalidParameterError/cdesc-InvalidParameterError.rinu[U:RDoc::NormalClass[iI"InvalidParameterError:EFI"'Rack::Utils::InvalidParameterError;FI"ArgumentError;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"OInvalidParameterError is the error that is raised when incoming structural;FI"Mparameters (parsed by parse_nested_query) contain invalid format or byte;FI"sequence.;F: @fileI"lib/rack/utils.rb;F; 0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!ڂ"Rack/Utils/build_nested_query-c.rinu[U:RDoc::AnyMethod[iI"build_nested_query:EFI"$Rack::Utils::build_nested_query;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(value, prefix = nil);FI"lib/rack/utils.rb;FPK!,Rack/Utils/cdesc-Utils.rinu[U:RDoc::NormalModule[iI" Utils:EFI"Rack::Utils;F0o:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"FRack::Utils contains a grab-bag of useful methods for writing web;FI";applications adopted from all kinds of Ruby libraries.;F: @fileI"lib/rack/utils.rb;F; 0[[ I"key_space_limit;FI"RW;F: publicT@[ I"multipart_part_limit;FI"RW;F; T@[ I"param_depth_limit;FI"RW;F; T@[ [I"DEFAULT_SEP;Fo;;[; 0@[I"ESCAPE_HTML;Fo;;[; 0@[I"ESCAPE_HTML_PATTERN;Fo;;[o; ;[I"EOn 1.8, there is a kcode = 'u' bug that allows for XSS otherwise;FI"RTODO doesn't apply to jruby, so a better condition above might be preferable?;F; 0@[I"HTTP_STATUS_CODES;Fo;;[o; ;[I"@Every standard HTTP code mapped to the appropriate message.;FI"Generated with:;FI"[curl -s https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv | \;Fo:RDoc::Markup::Verbatim;[I"Oruby -ne 'm = /^(\d{3}),(?!Unassigned|\(Unused\))([^,]+)/.match($_) and \ ;FI"8 puts "#{m[1]} => \x27#{m[2].strip}\x27,"';F; 0@[I"STATUS_WITH_NO_ENTITY_BODY;Fo;;[o; ;[I"IResponses with HTTP status codes that should not have an entity body;F; 0@[I"SYMBOL_TO_STATUS_CODE;Fo;;[; 0@[I"Multipart;Fo;;[; 0@[I"PATH_SEPS;Fo;;[; 0@[[[I" class;F[[; [[I"best_q_match;F@[I"build_nested_query;F@[I"build_query;F@[I"byte_ranges;F@[I" bytesize;F@[I"clean_path_info;F@[I"delete_cookie_header!;F@[I" escape;F@[I"escape_html;F@[I"escape_path;F@[I"normalize_params;F@[I"params_hash_type?;F@[I"parse_nested_query;F@[I"parse_query;F@[I" q_values;F@[I" rfc2109;F@[I" rfc2822;F@[I"secure_compare;F@[I"select_best_encoding;F@[I"set_cookie_header!;F@[I"status_code;F@[I" unescape;F@[:protected[[: private[[I" instance;F[[; [[; [[;[PK!n9Rack/Utils/ParameterTypeError/cdesc-ParameterTypeError.rinu[U:RDoc::NormalClass[iI"ParameterTypeError:EFI"$Rack::Utils::ParameterTypeError;FI"TypeError;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"LParameterTypeError is the error that is raised when incoming structural;FI"Iparameters (parsed by parse_nested_query) contain conflicting types.;F: @fileI"lib/rack/utils.rb;F; 0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!jZRack/Utils/escape-c.rinu[U:RDoc::AnyMethod[iI" escape:EFI"Rack::Utils::escape;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"(URI escapes. (CGI style space to +);F: @file000[I"(s);FI"lib/rack/utils.rb;FPK!Rack/Utils/byte_ranges-c.rinu[U:RDoc::AnyMethod[iI"byte_ranges:EFI"Rack::Utils::byte_ranges;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"LParses the "Range:" header, if present, into an array of Range objects.;FI"CReturns nil if the header is missing or syntactically invalid.;FI"BReturns an empty array if none of the ranges are satisfiable.;F: @file000[I"(env, size);FI"lib/rack/utils.rb;FPK!ۨ[$Rack/Utils/set_cookie_header%21-c.rinu[U:RDoc::AnyMethod[iI"set_cookie_header!:EFI"$Rack::Utils::set_cookie_header!;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(header, key, value);FI"lib/rack/utils.rb;FPK!j[ Rack/Utils/normalize_params-c.rinu[U:RDoc::AnyMethod[iI"normalize_params:EFI""Rack::Utils::normalize_params;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"Nnormalize_params recursively expands parameters into structural types. If;FI"Mthe structural types represented by two different parameter names are in;FI".conflict, a ParameterTypeError is raised.;F: @file000[I"=(params, name, v = nil, depth = Utils.param_depth_limit);FI"lib/rack/utils.rb;FPK!-Rack/Utils/KeySpaceConstrainedParams/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"0Rack::Utils::KeySpaceConstrainedParams::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"$(limit = Utils.key_space_limit);FI"lib/rack/utils.rb;FPK!l{}0Rack/Utils/KeySpaceConstrainedParams/key%3f-i.rinu[U:RDoc::AnyMethod[iI" key?:EFI"0Rack::Utils::KeySpaceConstrainedParams#key?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (key);FI"lib/rack/utils.rb;FPK!GŌ0Rack/Utils/KeySpaceConstrainedParams/%5b%5d-i.rinu[U:RDoc::AnyMethod[iI"[]:EFI".Rack::Utils::KeySpaceConstrainedParams#[];FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (key);FI"lib/rack/utils.rb;FPK!zmmGRack/Utils/KeySpaceConstrainedParams/cdesc-KeySpaceConstrainedParams.rinu[U:RDoc::NormalClass[iI"KeySpaceConstrainedParams:EFI"+Rack::Utils::KeySpaceConstrainedParams;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[I"new;FI"lib/rack/utils.rb;F[:protected[[: private[[I" instance;F[[; [ [I"[];F@[I"[]=;F@[I" key?;F@[I"to_params_hash;F@[; [[; [PK!h8Rack/Utils/KeySpaceConstrainedParams/to_params_hash-i.rinu[U:RDoc::AnyMethod[iI"to_params_hash:EFI":Rack::Utils::KeySpaceConstrainedParams#to_params_hash;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/utils.rb;FPK!)@3Rack/Utils/KeySpaceConstrainedParams/%5b%5d%3d-i.rinu[U:RDoc::AnyMethod[iI"[]=:EFI"/Rack::Utils::KeySpaceConstrainedParams#[]=;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(key, value);FI"lib/rack/utils.rb;FPK!'Rack/Utils/delete_cookie_header%21-c.rinu[U:RDoc::AnyMethod[iI"delete_cookie_header!:EFI"'Rack::Utils::delete_cookie_header!;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(header, key, value = {});FI"lib/rack/utils.rb;FPK!JRack/Utils/clean_path_info-c.rinu[U:RDoc::AnyMethod[iI"clean_path_info:EFI"!Rack::Utils::clean_path_info;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(path_info);FI"lib/rack/utils.rb;FPK!ၱRack/Utils/escape_html-c.rinu[U:RDoc::AnyMethod[iI"escape_html:EFI"Rack::Utils::escape_html;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"GEscape ampersands, brackets and quotes to their HTML/XML entities.;F: @file000[I" (string);FI"lib/rack/utils.rb;FPK!'ɿRack/Utils/rfc2822-c.rinu[U:RDoc::AnyMethod[iI" rfc2822:EFI"Rack::Utils::rfc2822;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (time);FI"lib/rack/utils.rb;FPK!rRack/Utils/unescape-c.rinu[U:RDoc::AnyMethod[iI" unescape:EFI"Rack::Utils::unescape;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"$(s, encoding = Encoding::UTF_8);FI"lib/rack/utils.rb;FPK! uWRack/Utils/best_q_match-c.rinu[U:RDoc::AnyMethod[iI"best_q_match:EFI"Rack::Utils::best_q_match;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"&(q_value_header, available_mimes);FI"lib/rack/utils.rb;FPK!q!Rack/Utils/param_depth_limit-c.rinu[U:RDoc::Attr[ iI"param_depth_limit:EFI"#Rack::Utils::param_depth_limit;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0TI"lib/rack/utils.rb;FPK!ΊRack/URLMap/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::URLMap::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(map = {});FI"lib/rack/urlmap.rb;FPK!YORack/URLMap/remap-i.rinu[U:RDoc::AnyMethod[iI" remap:EFI"Rack::URLMap#remap;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (map);FI"lib/rack/urlmap.rb;FPK!HwҢRack/URLMap/cdesc-URLMap.rinu[U:RDoc::NormalClass[iI" URLMap:EFI"Rack::URLMap;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"ARack::URLMap takes a hash mapping urls or paths to apps, and;FI"Gdispatches accordingly. Support for HTTP/1.1 host names exists if;FI"?the URLs start with http:// or https://.;Fo:RDoc::Markup::BlankLineo; ;[ I"EURLMap modifies the SCRIPT_NAME and PATH_INFO such that the part;FI"Erelevant for dispatch is in the SCRIPT_NAME, and the rest in the;FI">PATH_INFO. This should be taken care of when you need to;FI"2reconstruct the URL in order to create links.;F@o; ;[I"EURLMap dispatches in such a way that the longest paths are tried;FI")first, since they are most specific.;F: @fileI"lib/rack/urlmap.rb;F; 0[[[I"NEGATIVE_INFINITY;Fo;;[; 0@[I" INFINITY;Fo;;[; 0@[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[I" remap;F@[; [[;[PK!l/RIRack/URLMap/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::URLMap#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/urlmap.rb;FPK!îXRack/RewindableInput/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::RewindableInput::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (io);FI"!lib/rack/rewindable_input.rb;FPK!ˁu-Rack/RewindableInput/cdesc-RewindableInput.rinu[U:RDoc::NormalClass[iI"RewindableInput:EFI"Rack::RewindableInput;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"ZClass which can make any IO object rewindable, including non-rewindable ones. It does;FI"Ethis by buffering the data into a tempfile, which is rewindable.;Fo:RDoc::Markup::BlankLineo; ;[I"Zrack.input is required to be rewindable, so if your input stream IO is non-rewindable;FI"Xby nature (e.g. a pipe or a socket) then you can wrap it in an object of this class;FI""to easily make it rewindable.;F@o; ;[I"YDon't forget to call #close when you're done. This frees up temporary resources that;FI"MRewindableInput uses, though it does *not* close the original IO object.;F: @fileI"!lib/rack/rewindable_input.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [ [I" close;F@[I" each;F@[I" gets;F@[I" read;F@[I" rewind;F@[; [[;[PK!hRack/RewindableInput/each-i.rinu[U:RDoc::AnyMethod[iI" each:EFI"Rack::RewindableInput#each;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (&block);FI"!lib/rack/rewindable_input.rb;FPK! 0Rack/RewindableInput/read-i.rinu[U:RDoc::AnyMethod[iI" read:EFI"Rack::RewindableInput#read;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (*args);FI"!lib/rack/rewindable_input.rb;FPK!d Rack/RewindableInput/rewind-i.rinu[U:RDoc::AnyMethod[iI" rewind:EFI"!Rack::RewindableInput#rewind;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"!lib/rack/rewindable_input.rb;FPK!ѶRack/RewindableInput/close-i.rinu[U:RDoc::AnyMethod[iI" close:EFI" Rack::RewindableInput#close;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"FCloses this RewindableInput object without closing the originally;FI"Rwrapped IO oject. Cleans up any temporary resources that this RewindableInput;FI"has created.;Fo:RDoc::Markup::BlankLineo; ; [I"SThis method may be called multiple times. It does nothing on subsequent calls.;F: @file000[I"();FI"!lib/rack/rewindable_input.rb;FPK!@\)Rack/RewindableInput/Tempfile/_close-i.rinu[U:RDoc::AnyMethod[iI" _close:EFI"+Rack::RewindableInput::Tempfile#_close;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"!lib/rack/rewindable_input.rb;FPK!E/Rack/RewindableInput/Tempfile/cdesc-Tempfile.rinu[U:RDoc::NormalClass[iI" Tempfile:EFI"$Rack::RewindableInput::Tempfile;FI" Tempfile;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"=Ruby's Tempfile class has a bug. Subclass it and fix it.;F: @fileI"!lib/rack/rewindable_input.rb;F; 0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" _close;F@[; [[; [PK!jӪRack/RewindableInput/gets-i.rinu[U:RDoc::AnyMethod[iI" gets:EFI"Rack::RewindableInput#gets;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"!lib/rack/rewindable_input.rb;FPK!(->(Rack/Auth/Basic/Request/credentials-i.rinu[U:RDoc::AnyMethod[iI"credentials:EFI"+Rack::Auth::Basic::Request#credentials;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/auth/basic.rb;FPK!' &URR(Rack/Auth/Basic/Request/cdesc-Request.rinu[U:RDoc::NormalClass[iI" Request:EFI"Rack::Auth::Basic::Request;FI" Rack::Auth::AbstractRequest;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" basic?;FI"lib/rack/auth/basic.rb;F[I"credentials;F@ [I" username;F@ [; [[; [PK!33%Rack/Auth/Basic/Request/basic%3f-i.rinu[U:RDoc::AnyMethod[iI" basic?:EFI"&Rack::Auth::Basic::Request#basic?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/auth/basic.rb;FPK!f8v!%Rack/Auth/Basic/Request/username-i.rinu[U:RDoc::AnyMethod[iI" username:EFI"(Rack::Auth::Basic::Request#username;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/auth/basic.rb;FPK!zzRack/Auth/Basic/cdesc-Basic.rinu[U:RDoc::NormalClass[iI" Basic:EFI"Rack::Auth::Basic;FI"AbstractHandler;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"MRack::Auth::Basic implements HTTP Basic Authentication, as per RFC 2617.;Fo:RDoc::Markup::BlankLineo; ;[I"CInitialize with the Rack application that you want protecting,;FI"Gand a block that checks if a username and password pair are valid.;F@o; ;[I"3See also: example/protectedlobster.rb;F: @fileI"lib/rack/auth/basic.rb;F; 0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[;[PK!Rack/Auth/Basic/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Auth::Basic#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/auth/basic.rb;FPK!md+%Rack/Auth/AbstractRequest/scheme-i.rinu[U:RDoc::AnyMethod[iI" scheme:EFI"'Rack::Auth::AbstractRequest#scheme;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"&lib/rack/auth/abstract/request.rb;FPK!?ڹ%Rack/Auth/AbstractRequest/params-i.rinu[U:RDoc::AnyMethod[iI" params:EFI"'Rack::Auth::AbstractRequest#params;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"&lib/rack/auth/abstract/request.rb;FPK!62Rack/Auth/AbstractRequest/cdesc-AbstractRequest.rinu[U:RDoc::NormalClass[iI"AbstractRequest:EFI" Rack::Auth::AbstractRequest;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[I"AUTHORIZATION_KEYS;Fo;;[; 0I"&lib/rack/auth/abstract/request.rb;F[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [ [I" params;F@[I" parts;F@[I"provided?;F@[I" request;F@[I" scheme;F@[; [[; [PK!("Rack/Auth/AbstractRequest/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"%Rack::Auth::AbstractRequest::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"&lib/rack/auth/abstract/request.rb;FPK!_& &Rack/Auth/AbstractRequest/request-i.rinu[U:RDoc::AnyMethod[iI" request:EFI"(Rack::Auth::AbstractRequest#request;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"&lib/rack/auth/abstract/request.rb;FPK!XN$Rack/Auth/AbstractRequest/parts-i.rinu[U:RDoc::AnyMethod[iI" parts:EFI"&Rack::Auth::AbstractRequest#parts;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"&lib/rack/auth/abstract/request.rb;FPK!7Ŀ*Rack/Auth/AbstractRequest/provided%3f-i.rinu[U:RDoc::AnyMethod[iI"provided?:EFI"*Rack::Auth::AbstractRequest#provided?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"&lib/rack/auth/abstract/request.rb;FPK!`2Rack/Auth/AbstractHandler/cdesc-AbstractHandler.rinu[U:RDoc::NormalClass[iI"AbstractHandler:EFI" Rack::Auth::AbstractHandler;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"PRack::Auth::AbstractHandler implements common authentication functionality.;Fo:RDoc::Markup::BlankLineo; ;[I",+realm+ should be set for all handlers.;F: @fileI"&lib/rack/auth/abstract/handler.rb;F; 0[[ I" realm;FI"RW;F: publicF@[[[[I" class;F[[; [[I"new;F@[:protected[[: private[[I" instance;F[[; [[; [[;[PK!W$Rack/Auth/AbstractHandler/realm-i.rinu[U:RDoc::Attr[ iI" realm:EFI"&Rack::Auth::AbstractHandler#realm;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"&lib/rack/auth/abstract/handler.rb;FPK!d]"Rack/Auth/AbstractHandler/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"%Rack::Auth::AbstractHandler::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"%(app, realm=nil, &authenticator);FI"&lib/rack/auth/abstract/handler.rb;FPK!Rack/Auth/cdesc-Auth.rinu[U:RDoc::NormalModule[iI" Auth:EFI"Rack::Auth;F0o:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!e_+Rack/Auth/Digest/Request/respond_to%3f-i.rinu[U:RDoc::AnyMethod[iI"respond_to?:EFI",Rack::Auth::Digest::Request#respond_to?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (sym, *);FI"$lib/rack/auth/digest/request.rb;FPK!H,Rack/Auth/Digest/Request/correct_uri%3f-i.rinu[U:RDoc::AnyMethod[iI"correct_uri?:EFI"-Rack::Auth::Digest::Request#correct_uri?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/auth/digest/request.rb;FPK!.$Rack/Auth/Digest/Request/params-i.rinu[U:RDoc::AnyMethod[iI" params:EFI"'Rack::Auth::Digest::Request#params;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/auth/digest/request.rb;FPK!wsO׵#Rack/Auth/Digest/Request/nonce-i.rinu[U:RDoc::AnyMethod[iI" nonce:EFI"&Rack::Auth::Digest::Request#nonce;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/auth/digest/request.rb;FPK!>,Rack/Auth/Digest/Request/method_missing-i.rinu[U:RDoc::AnyMethod[iI"method_missing:EFI"/Rack::Auth::Digest::Request#method_missing;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(sym, *args);FI"$lib/rack/auth/digest/request.rb;FPK! 5h$Rack/Auth/Digest/Request/method-i.rinu[U:RDoc::AnyMethod[iI" method:EFI"'Rack::Auth::Digest::Request#method;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/auth/digest/request.rb;FPK!Q)Rack/Auth/Digest/Request/cdesc-Request.rinu[U:RDoc::NormalClass[iI" Request:EFI" Rack::Auth::Digest::Request;FI" Rack::Auth::AbstractRequest;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [ [I"correct_uri?;FI"$lib/rack/auth/digest/request.rb;F[I" digest?;F@ [I" method;F@ [I"method_missing;F@ [I" nonce;F@ [I" params;F@ [I"respond_to?;F@ [; [[; [PK!Q\'Rack/Auth/Digest/Request/digest%3f-i.rinu[U:RDoc::AnyMethod[iI" digest?:EFI"(Rack::Auth::Digest::Request#digest?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/auth/digest/request.rb;FPK!-O*Rack/Auth/Digest/MD5/passwords_hashed-i.rinu[U:RDoc::Attr[ iI"passwords_hashed:EFI"-Rack::Auth::Digest::MD5#passwords_hashed;FI"W;F: publico:RDoc::Markup::Document: @parts[: @file0FI" lib/rack/auth/digest/md5.rb;FPK!=,Rack/Auth/Digest/MD5/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"!Rack::Auth::Digest::MD5::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"1(app, realm=nil, opaque=nil, &authenticator);FI" lib/rack/auth/digest/md5.rb;FPK!YT-Rack/Auth/Digest/MD5/passwords_hashed%3f-i.rinu[U:RDoc::AnyMethod[iI"passwords_hashed?:EFI".Rack::Auth::Digest::MD5#passwords_hashed?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI" lib/rack/auth/digest/md5.rb;FPK!}WJJ!Rack/Auth/Digest/MD5/cdesc-MD5.rinu[U:RDoc::NormalClass[iI"MD5:EFI"Rack::Auth::Digest::MD5;FI"AbstractHandler;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"DRack::Auth::Digest::MD5 implements the MD5 algorithm version of;FI"1HTTP Digest Authentication, as per RFC 2617.;Fo:RDoc::Markup::BlankLineo; ;[I"EInitialize with the [Rack] application that you want protecting,;FI"Iand a block that looks up a plaintext password for a given username.;F@o; ;[I"F+opaque+ needs to be set to a constant base64/hexadecimal string.;F: @fileI" lib/rack/auth/digest/md5.rb;F; 0[[ I" opaque;FI"RW;F: publicF@[ I"passwords_hashed;FI"W;F; F@[[I"QOP;Fo;;[; 0@[[[I" class;F[[; [[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[I"passwords_hashed?;F@[; [[;[PK!Rack/Auth/Digest/MD5/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"!Rack::Auth::Digest::MD5#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI" lib/rack/auth/digest/md5.rb;FPK!i[ Rack/Auth/Digest/MD5/opaque-i.rinu[U:RDoc::Attr[ iI" opaque:EFI"#Rack::Auth::Digest::MD5#opaque;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI" lib/rack/auth/digest/md5.rb;FPK!qoq"Rack/Auth/Digest/Nonce/digest-i.rinu[U:RDoc::AnyMethod[iI" digest:EFI"%Rack::Auth::Digest::Nonce#digest;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI""lib/rack/auth/digest/nonce.rb;FPK!ϵʞ$Rack/Auth/Digest/Nonce/valid%3f-i.rinu[U:RDoc::AnyMethod[iI" valid?:EFI"%Rack::Auth::Digest::Nonce#valid?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI""lib/rack/auth/digest/nonce.rb;FPK! V Rack/Auth/Digest/Nonce/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"#Rack::Auth::Digest::Nonce::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"/(timestamp = Time.now, given_digest = nil);FI""lib/rack/auth/digest/nonce.rb;FPK! )"&Rack/Auth/Digest/Nonce/time_limit-c.rinu[U:RDoc::Attr[ iI"time_limit:EFI"*Rack::Auth::Digest::Nonce::time_limit;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0TI""lib/rack/auth/digest/nonce.rb;FPK!CVV$Rack/Auth/Digest/Nonce/fresh%3f-i.rinu[U:RDoc::AnyMethod[iI" fresh?:EFI"%Rack::Auth::Digest::Nonce#fresh?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI""lib/rack/auth/digest/nonce.rb;FPK!c0HH%Rack/Auth/Digest/Nonce/cdesc-Nonce.rinu[U:RDoc::NormalClass[iI" Nonce:EFI"Rack::Auth::Digest::Nonce;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"ERack::Auth::Digest::Nonce is the default nonce generator for the;FI"4Rack::Auth::Digest::MD5 authentication handler.;Fo:RDoc::Markup::BlankLineo; ;[I"5+private_key+ needs to set to a constant string.;F@o; ;[I"J+time_limit+ can be optionally set to an integer (number of seconds),;FI"3to limit the validity of the generated nonces.;F: @fileI""lib/rack/auth/digest/nonce.rb;F; 0[[ I"private_key;FI"RW;F: publicT@[ I"time_limit;FI"RW;F; T@[[[[I" class;F[[; [[I"new;F@[I" parse;F@[:protected[[: private[[I" instance;F[[; [ [I" digest;F@[I" fresh?;F@[I" stale?;F@[I" to_s;F@[I" valid?;F@[; [[;[PK!3$Rack/Auth/Digest/Nonce/stale%3f-i.rinu[U:RDoc::AnyMethod[iI" stale?:EFI"%Rack::Auth::Digest::Nonce#stale?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI""lib/rack/auth/digest/nonce.rb;FPK!N'Rack/Auth/Digest/Nonce/private_key-c.rinu[U:RDoc::Attr[ iI"private_key:EFI"+Rack::Auth::Digest::Nonce::private_key;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0TI""lib/rack/auth/digest/nonce.rb;FPK!iȯ Rack/Auth/Digest/Nonce/to_s-i.rinu[U:RDoc::AnyMethod[iI" to_s:EFI"#Rack::Auth::Digest::Nonce#to_s;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI""lib/rack/auth/digest/nonce.rb;FPK!ׯ !Rack/Auth/Digest/Nonce/parse-c.rinu[U:RDoc::AnyMethod[iI" parse:EFI"%Rack::Auth::Digest::Nonce::parse;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (string);FI""lib/rack/auth/digest/nonce.rb;FPK!XC Rack/Auth/Digest/Params/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"$Rack::Auth::Digest::Params::new;FT: publico:RDoc::Markup::Document: @parts[: @file00I" self;F[I"();FI"#lib/rack/auth/digest/params.rb;FPK!|$Rack/Auth/Digest/Params/dequote-c.rinu[U:RDoc::AnyMethod[iI" dequote:EFI"(Rack::Auth::Digest::Params::dequote;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"#lib/rack/auth/digest/params.rb;FPK!vf#Rack/Auth/Digest/Params/%5b%5d-i.rinu[U:RDoc::AnyMethod[iI"[]:EFI""Rack::Auth::Digest::Params#[];FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(k);FI"#lib/rack/auth/digest/params.rb;FPK!!Rack/Auth/Digest/Params/to_s-i.rinu[U:RDoc::AnyMethod[iI" to_s:EFI"$Rack::Auth::Digest::Params#to_s;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"#lib/rack/auth/digest/params.rb;FPK!Ú"Rack/Auth/Digest/Params/parse-c.rinu[U:RDoc::AnyMethod[iI" parse:EFI"&Rack::Auth::Digest::Params::parse;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"#lib/rack/auth/digest/params.rb;FPK!_/Rack/Auth/Digest/Params/split_header_value-c.rinu[U:RDoc::AnyMethod[iI"split_header_value:EFI"3Rack::Auth::Digest::Params::split_header_value;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"#lib/rack/auth/digest/params.rb;FPK!/b'Rack/Auth/Digest/Params/cdesc-Params.rinu[U:RDoc::NormalClass[iI" Params:EFI"Rack::Auth::Digest::Params;FI" Hash;Fo:RDoc::Markup::Document: @parts[: @file0[[[I" UNQUOTED;Fo;;[; 0I"#lib/rack/auth/digest/params.rb;F[[[I" class;F[[: public[ [I" dequote;F@[I"new;F@[I" parse;F@[I"split_header_value;F@[:protected[[: private[[I" instance;F[[; [ [I"[];F@[I"[]=;F@[I" quote;F@[I" to_s;F@[; [[; [PK!Mn4"Rack/Auth/Digest/Params/quote-i.rinu[U:RDoc::AnyMethod[iI" quote:EFI"%Rack::Auth::Digest::Params#quote;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"#lib/rack/auth/digest/params.rb;FPK!t.&Rack/Auth/Digest/Params/%5b%5d%3d-i.rinu[U:RDoc::AnyMethod[iI"[]=:EFI"#Rack::Auth::Digest::Params#[]=;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (k, v);FI"#lib/rack/auth/digest/params.rb;FPK!L4: Rack/Auth/Digest/cdesc-Digest.rinu[U:RDoc::NormalModule[iI" Digest:EFI"Rack::Auth::Digest;F0o:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!n1Rack/TempfileReaper/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::TempfileReaper::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI" lib/rack/tempfile_reaper.rb;FPK!bb+Rack/TempfileReaper/cdesc-TempfileReaper.rinu[U:RDoc::NormalClass[iI"TempfileReaper:EFI"Rack::TempfileReaper;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"_Middleware tracks and cleans Tempfiles created throughout a request (i.e. Rack::Multipart);FI"IIdeas/strategy based on posts by Eric Wong and Charles Oliver Nutter;FI"chttps://groups.google.com/forum/#!searchin/rack-devel/temp/rack-devel/brK8eh-MByw/sw61oJJCGRMJ;F: @fileI" lib/rack/tempfile_reaper.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[; [PK!=֫Rack/TempfileReaper/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::TempfileReaper#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI" lib/rack/tempfile_reaper.rb;FPK!WTRack/Sendfile/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Sendfile::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"&(app, variation=nil, mappings=[]);FI"lib/rack/sendfile.rb;FPK!b>>Rack/Sendfile/cdesc-Sendfile.rinu[U:RDoc::NormalClass[iI" Sendfile:EFI"Rack::Sendfile;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[)S:RDoc::Markup::Heading: leveli: textI" Sendfile;Fo:RDoc::Markup::BlankLineo:RDoc::Markup::Paragraph;[ I"EThe Sendfile middleware intercepts responses whose body is being;FI"Iserved from a file and replaces it with a server specific X-Sendfile;FI"Mheader. The web server is then responsible for writing the file contents;FI"Lto the client. This can dramatically reduce the amount of work required;FI"Oby the Ruby backend and takes advantage of the web server's optimized file;FI"delivery code.;F@o; ;[ I"JIn order to take advantage of this middleware, the response body must;FI"Irespond to +to_path+ and the request must include an X-Sendfile-Type;FI"Kheader. Rack::File and other components implement +to_path+ so there's;FI"Lrarely anything you need to do in your application. The X-Sendfile-Type;FI"Mheader is typically set in your web servers configuration. The following;FI"!sections attempt to document;F@S; ; i; I" Nginx;F@o; ;[I"NNginx supports the X-Accel-Redirect header. This is similar to X-Sendfile;FI"Ibut requires parts of the filesystem to be mapped into a private URL;FI"hierarchy.;F@o; ;[I"KThe following example shows the Nginx configuration required to create;FI"La private "/files/" area, enable X-Accel-Redirect, and pass the special;FI"@X-Sendfile-Type and X-Accel-Mapping headers to the backend:;F@o:RDoc::Markup::Verbatim;[I"location ~ /files/(.*) { ;FI" internal; ;FI" alias /var/www/$1; ;FI"} ;FI" ;FI"location / { ;FI" proxy_redirect off; ;FI" ;FI"5 proxy_set_header Host $host; ;FI"< proxy_set_header X-Real-IP $remote_addr; ;FI"J proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ;FI" ;FI"@ proxy_set_header X-Sendfile-Type X-Accel-Redirect; ;FI"A proxy_set_header X-Accel-Mapping /var/www/=/files/; ;FI" ;FI"2 proxy_pass http://127.0.0.1:8080/; ;FI"} ;Fo; ;[ I"MNote that the X-Sendfile-Type header must be set exactly as shown above.;FI"OThe X-Accel-Mapping header should specify the location on the file system,;FI"Mfollowed by an equals sign (=), followed name of the private URL pattern;FI"Jthat it maps to. The middleware performs a simple substitution on the;FI"resulting path.;F@o; ;[I"9See Also: http://wiki.codemongers.com/NginxXSendfile;F@S; ; i; I" lighttpd;F@o; ;[I"LLighttpd has supported some variation of the X-Sendfile header for some;FI"Mtime, although only recent version support X-Sendfile in a reverse proxy;FI"configuration.;F@o;;[I"&$HTTP["host"] == "example.com" { ;FI"% proxy-core.protocol = "http" ;FI", proxy-core.balancer = "round-robin" ;FI" proxy-core.backends = ( ;FI" "127.0.0.1:8000", ;FI" "127.0.0.1:8001", ;FI" ... ;FI" ) ;FI" ;FI"/ proxy-core.allow-x-sendfile = "enable" ;FI"' proxy-core.rewrite-request = ( ;FI"6 "X-Sendfile-Type" => (".*" => "X-Sendfile") ;FI" ) ;FI" } ;Fo; ;[I"JSee Also: http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore;F@S; ; i; I" Apache;F@o; ;[I"FX-Sendfile is supported under Apache 2.x using a separate module:;F@o; ;[I"%https://tn123.org/mod_xsendfile/;F@o; ;[I"GOnce the module is compiled and installed, you can enable it using;FI" XSendFile config directive:;F@o;;[I"2RequestHeader Set X-Sendfile-Type X-Sendfile ;FI"/ProxyPassReverse / http://localhost:8001/ ;FI"XSendFile on ;FS; ; i; I"Mapping parameter;F@o; ;[ I"BThe third parameter allows for an overriding extension of the;FI"QX-Accel-Mapping header. Mappings should be provided in tuples of internal to;FI"Nexternal. The internal values may contain regular expression syntax, they;FI",will be matched with case indifference.;F: @fileI"lib/rack/sendfile.rb;F;0[[[I"F;Fo;;[;0@}[[[I" class;F[[: public[[I"new;F@}[:protected[[: private[[I" instance;F[[;[[I" call;F@}[;[[;[PK!#ՎRack/Sendfile/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Sendfile#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/sendfile.rb;FPK!ja&Rack/Lint/LintError/cdesc-LintError.rinu[U:RDoc::NormalClass[iI"LintError:EFI"Rack::Lint::LintError;FI"RuntimeError;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!;Rack/Lint/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Lint::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/lint.rb;FPK!Xjr,Rack/Lint/ErrorWrapper/cdesc-ErrorWrapper.rinu[U:RDoc::NormalClass[iI"ErrorWrapper:EFI"Rack::Lint::ErrorWrapper;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!0oRack/Lint/cdesc-Lint.rinu[U:RDoc::NormalClass[iI" Lint:EFI"Rack::Lint;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"?Rack::Lint validates your application and the requests and;FI"*responses according to the Rack spec.;F: @fileI"lib/rack/lint.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[; [[; [PK!7*,Rack/Lint/InputWrapper/cdesc-InputWrapper.rinu[U:RDoc::NormalClass[iI"InputWrapper:EFI"Rack::Lint::InputWrapper;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!cfE.Rack/Lint/HijackWrapper/cdesc-HijackWrapper.rinu[U:RDoc::NormalClass[iI"HijackWrapper:EFI"Rack::Lint::HijackWrapper;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!LSdRack/CommonLogger/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::CommonLogger::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, logger=nil);FI"lib/rack/commonlogger.rb;FPK!>kee'Rack/CommonLogger/cdesc-CommonLogger.rinu[U:RDoc::NormalClass[iI"CommonLogger:EFI"Rack::CommonLogger;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[ I"FRack::CommonLogger forwards every request to the given +app+, and;FI"logs a line in the;FI"R{Apache common log format}[http://httpd.apache.org/docs/1.3/logs.html#common];FI"to the +logger+.;Fo:RDoc::Markup::BlankLineo; ;[I"LIf +logger+ is nil, CommonLogger will fall back +rack.errors+, which is;FI"%an instance of Rack::NullLogger.;F@o; ;[ I"M+logger+ can be any class, including the standard library Logger, and is;FI"\expected to have either +write+ or +<<+ method, which accepts the CommonLogger::FORMAT.;FI"HAccording to the SPEC, the error stream must also respond to +puts+;FI"I(which takes a single argument that responds to +to_s+), and +flush+;FI"M(which is called without arguments in order to make the error appear for;FI" sure);F: @fileI"lib/rack/commonlogger.rb;F; 0[[[I" FORMAT;Fo;;[o; ;[I"ICommon Log Format: http://httpd.apache.org/docs/1.3/logs.html#common;F@o:RDoc::Markup::Verbatim;[I"Jlilith.local - - [07/Aug/2006 23:58:02 -0400] "GET / HTTP/1.1" 500 - ;FI" ;FI"+%{%s - %s [%s] "%s %s%s %s" %d %s\n} %;F; 0@![[[I" class;F[[: public[[I"new;F@![:protected[[: private[[I" instance;F[[; [[I" call;F@![;[[;[PK!xSRack/CommonLogger/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::CommonLogger#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/commonlogger.rb;FPK!eV$Rack/Deflater/DeflateStream/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"'Rack::Deflater::DeflateStream::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (body);FI"lib/rack/deflater.rb;FPK!s9%Rack/Deflater/DeflateStream/each-i.rinu[U:RDoc::AnyMethod[iI" each:EFI"'Rack::Deflater::DeflateStream#each;FF: publico:RDoc::Markup::Document: @parts[: @file00I"deflate(part, SYNC_FLUSH);F[I"();FI"lib/rack/deflater.rb;FPK!.jzYY2Rack/Deflater/DeflateStream/cdesc-DeflateStream.rinu[U:RDoc::NormalClass[iI"DeflateStream:EFI""Rack::Deflater::DeflateStream;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[I"DEFLATE_ARGS;Fo;;[; 0I"lib/rack/deflater.rb;F[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" close;F@[I" each;F@[; [[; [PK!Ӿ&Rack/Deflater/DeflateStream/close-i.rinu[U:RDoc::AnyMethod[iI" close:EFI"(Rack::Deflater::DeflateStream#close;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/deflater.rb;FPK!)Rack/Deflater/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Deflater::new;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"'Creates Rack::Deflater middleware.;Fo:RDoc::Markup::BlankLineo:RDoc::Markup::List: @type: LABEL: @items[o:RDoc::Markup::ListItem: @labelI"app;F; [o; ; [I"rack app instance;Fo;;I" options;F; [o; ; [I"#hash of deflater options, i.e.;FI"S'if' - a lambda enabling / disabling deflation based on returned boolean value;Fo:RDoc::Markup::Verbatim; [I"^e.g use Rack::Deflater, :if => lambda { |env, status, headers, body| body.length > 512 } ;Fo; ; [I"B'include' - a list of content types that should be compressed;F: @file000[I"(app, options = {});FI"lib/rack/deflater.rb;FPK!#KKRack/Deflater/cdesc-Deflater.rinu[U:RDoc::NormalClass[iI" Deflater:EFI"Rack::Deflater;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I";This middleware enables compression of http responses.;Fo:RDoc::Markup::BlankLineo; ;[I"0Currently supported compression algorithms:;F@o:RDoc::Markup::Verbatim;[I" * gzip ;FI"* deflate ;FI"$* identity (no transformation) ;Fo; ;[ I"GThe middleware automatically detects when compression is supported;FI"Dand allowed. For example no transformation is made when a cache;FI"Hdirective of 'no-transform' is present, or when the response status;FI"3code is one that doesn't allow an entity body.;F: @fileI"lib/rack/deflater.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@ [:protected[[: private[[I" instance;F[[; [[I" call;F@ [;[[;[PK!zBAA,Rack/Deflater/GzipStream/cdesc-GzipStream.rinu[U:RDoc::NormalClass[iI"GzipStream:EFI"Rack::Deflater::GzipStream;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[I"new;FI"lib/rack/deflater.rb;F[:protected[[: private[[I" instance;F[[; [[I" close;F@[I" each;F@[I" write;F@[; [[; [PK!%[!Rack/Deflater/GzipStream/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"$Rack::Deflater::GzipStream::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(body, mtime);FI"lib/rack/deflater.rb;FPK!#"Rack/Deflater/GzipStream/each-i.rinu[U:RDoc::AnyMethod[iI" each:EFI"$Rack::Deflater::GzipStream#each;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (&block);FI"lib/rack/deflater.rb;FPK!# #Rack/Deflater/GzipStream/write-i.rinu[U:RDoc::AnyMethod[iI" write:EFI"%Rack::Deflater::GzipStream#write;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (data);FI"lib/rack/deflater.rb;FPK!IV#Rack/Deflater/GzipStream/close-i.rinu[U:RDoc::AnyMethod[iI" close:EFI"%Rack::Deflater::GzipStream#close;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/deflater.rb;FPK!!Rack/Deflater/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Deflater#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/deflater.rb;FPK!vB|Rack/ConditionalGet/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::ConditionalGet::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/conditionalget.rb;FPK!DD+Rack/ConditionalGet/cdesc-ConditionalGet.rinu[U:RDoc::NormalClass[iI"ConditionalGet:EFI"Rack::ConditionalGet;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[ I"DMiddleware that enables conditional GET using If-None-Match and;FI"HIf-Modified-Since. The application should set either or both of the;FI"GLast-Modified or Etag response headers according to RFC 2616. When;FI"Ieither of the conditions is met, the response body is set to be zero;FI"?length and the response status is set to 304 Not Modified.;Fo:RDoc::Markup::BlankLineo; ;[I"KApplications that defer response body generation until the body's each;FI"Lmessage is received will avoid response body generation completely when;FI"a conditional GET matches.;F@o; ;[I"8Adapted from Michael Klishin's Merb implementation:;FI"jhttps://github.com/wycats/merb/blob/master/merb-core/lib/merb-core/rack/middleware/conditional_get.rb;F: @fileI"lib/rack/conditionalget.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[;[PK!xàRack/ConditionalGet/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::ConditionalGet#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/conditionalget.rb;FPK!F̼Rack/Reloader/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Reloader::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I")(app, cooldown = 10, backend = Stat);FI"lib/rack/reloader.rb;FPK!Kx''Rack/Reloader/safe_load-i.rinu[U:RDoc::AnyMethod[iI"safe_load:EFI"Rack::Reloader#safe_load;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"DA safe Kernel::load, issuing the hooks depending on the results;F: @file000[I"$(file, mtime, stderr = $stderr);FI"lib/rack/reloader.rb;FPK!vORack/Reloader/reload%21-i.rinu[U:RDoc::AnyMethod[iI" reload!:EFI"Rack::Reloader#reload!;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(stderr = $stderr);FI"lib/rack/reloader.rb;FPK!bӛ** Rack/Reloader/Stat/cdesc-Stat.rinu[U:RDoc::NormalModule[iI" Stat:EFI"Rack::Reloader::Stat;F0o:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I"figure_path;FI"lib/rack/reloader.rb;F[I" rotation;F@[I"safe_stat;F@[; [[; [PK! #qa#Rack/Reloader/Stat/figure_path-i.rinu[U:RDoc::AnyMethod[iI"figure_path:EFI"%Rack::Reloader::Stat#figure_path;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"MTakes a relative or absolute +file+ name, a couple possible +paths+ that;FI"Mthe +file+ might reside in. Returns the full path and File::Stat for the;FI" path.;F: @file000[I"(file, paths);FI"lib/rack/reloader.rb;FPK!ԡ Rack/Reloader/Stat/rotation-i.rinu[U:RDoc::AnyMethod[iI" rotation:EFI""Rack::Reloader::Stat#rotation;FF: publico:RDoc::Markup::Document: @parts[: @file00I"found, mtime;F[I"();FI"lib/rack/reloader.rb;FPK!rd!Rack/Reloader/Stat/safe_stat-i.rinu[U:RDoc::AnyMethod[iI"safe_stat:EFI"#Rack::Reloader::Stat#safe_stat;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (file);FI"lib/rack/reloader.rb;FPK!auRack/Reloader/cdesc-Reloader.rinu[U:RDoc::NormalClass[iI" Reloader:EFI"Rack::Reloader;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"$High performant source reloader;Fo:RDoc::Markup::BlankLineo; ;[I"(This class acts as Rack middleware.;F@o; ;[I"PWhat makes it especially suited for use in a production environment is that;FI"Nany file will only be checked once and there will only be made one system;FI"call stat(2).;F@o; ;[I"NPlease note that this will not reload files in the background, it does so;FI"only when actively called.;F@o; ;[I"MIt is performing a check/reload cycle at the start of every request, but;FI"Galso respects a cool down time, during which nothing will be done.;F: @fileI"lib/rack/reloader.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@"[:protected[[: private[[I" instance;F[[; [[I" call;F@"[I" reload!;F@"[I"safe_load;F@"[; [[;[PK!dRack/Reloader/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Reloader#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/reloader.rb;FPK!1-RRack/File/_call-i.rinu[U:RDoc::AnyMethod[iI" _call:EFI"Rack::File#_call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/file.rb;FPK!|Rack/File/path-i.rinu[U:RDoc::Attr[ iI" path:EFI"Rack::File#path;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/file.rb;FPK!LO'Rack/File/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::File::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"4(root, headers={}, default_mime = 'text/plain');FI"lib/rack/file.rb;FPK!aRack/File/root-i.rinu[U:RDoc::Attr[ iI" root:EFI"Rack::File#root;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/file.rb;FPK!͑KRack/File/cache_control-i.rinu[U:RDoc::Attr[ iI"cache_control:EFI"Rack::File#cache_control;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/file.rb;FPK!0ӝRack/File/each-i.rinu[U:RDoc::AnyMethod[iI" each:EFI"Rack::File#each;FF: publico:RDoc::Markup::Document: @parts[: @file00I" part;F[I"();FI"lib/rack/file.rb;FPK!dRack/File/to_path-i.rinu[U:RDoc::Attr[ iI" to_path:EFI"Rack::File#to_path;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/file.rb;FPK!RRack/File/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::File#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/file.rb;FPK!*ZRack/File/serving-i.rinu[U:RDoc::AnyMethod[iI" serving:EFI"Rack::File#serving;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/file.rb;FPK!Rack/File/cdesc-File.rinu[U:RDoc::NormalClass[iI" File:EFI"Rack::File;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[ I"ORack::File serves files below the +root+ directory given, according to the;FI"#path info of the Rack request.;FI"Ke.g. when Rack::File.new("/etc") is used, you can access 'passwd' file;FI"$as http://localhost:9292/passwd;Fo:RDoc::Markup::BlankLineo; ;[I"GHandlers can detect if bodies are a Rack::File, and use mechanisms;FI"!like sendfile on the +path+.;F: @fileI"lib/rack/file.rb;F; 0[ [ I"cache_control;FI"RW;F: publicF@[ I" path;FI"RW;F; F@[ I" root;FI"RW;F; F@[ I" to_path;FI"RW;F; F@[[I"ALLOWED_VERBS;Fo;;[; 0@[I"ALLOW_HEADER;Fo;;[; 0@[I"F;Fo;;[; 0@[[[I" class;F[[; [[I"new;F@[:protected[[: private[[I" instance;F[[; [ [I" _call;F@[I" call;F@[I" each;F@[I" serving;F@[; [[;[PK!.Rack/release-c.rinu[U:RDoc::AnyMethod[iI" release:EFI"Rack::release;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"0Return the Rack release as a dotted string.;F: @file000[I"();FI"lib/rack.rb;FPK!<!Rack/Builder/new_from_string-c.rinu[U:RDoc::AnyMethod[iI"new_from_string:EFI"#Rack::Builder::new_from_string;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"&(builder_script, file="(rackup)");FI"lib/rack/builder.rb;FPK!zrRack/Builder/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Builder::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(default_app = nil,&block);FI"lib/rack/builder.rb;FPK!AA}Rack/Builder/warmup-i.rinu[U:RDoc::AnyMethod[iI" warmup:EFI"Rack::Builder#warmup;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"ETakes a lambda or block that is used to warm-up the application.;Fo:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"warmup do |app| ;FI"+ client = Rack::MockRequest.new(app) ;FI" client.get('/') ;FI" end ;FI" ;FI"use SomeMiddleware ;FI"run MyApp;F: @file000[I"(prc=nil, &block);FI"lib/rack/builder.rb;FPK!+Rack/Builder/parse_file-c.rinu[U:RDoc::AnyMethod[iI"parse_file:EFI"Rack::Builder::parse_file;FT: publico:RDoc::Markup::Document: @parts[: @file000[I")(config, opts = Server::Options.new);FI"lib/rack/builder.rb;FPK!Rack/Builder/cdesc-Builder.rinu[U:RDoc::NormalClass[iI" Builder:EFI"Rack::Builder;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"GRack::Builder implements a small DSL to iteratively construct Rack;FI"applications.;Fo:RDoc::Markup::BlankLineo; ;[I" Example:;F@o:RDoc::Markup::Verbatim;[I"require 'rack/lobster' ;FI" app = Rack::Builder.new do ;FI" use Rack::CommonLogger ;FI" use Rack::ShowExceptions ;FI" map "/lobster" do ;FI" use Rack::Lint ;FI" run Rack::Lobster.new ;FI" end ;FI" end ;FI" ;FI" run app ;Fo; ;[I"Or;F@o; ;[ I" app = Rack::Builder.app do ;FI" use Rack::CommonLogger ;FI"L run lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['OK']] } ;FI" end ;FI" ;FI" run app ;Fo; ;[I"L+use+ adds middleware to the stack, +run+ dispatches to an application.;FI"GYou can use +map+ to construct a Rack::URLMap in a convenient way.;F: @fileI"lib/rack/builder.rb;F; 0[[[[[I" class;F[[: public[ [I"app;F@2[I"new;F@2[I"new_from_string;F@2[I"parse_file;F@2[:protected[[: private[[I" instance;F[[; [ [I" call;F@2[I"map;F@2[I"run;F@2[I" to_app;F@2[I"use;F@2[I" warmup;F@2[;[[;[PK!zRack/Builder/run-i.rinu[U:RDoc::AnyMethod[iI"run:EFI"Rack::Builder#run;FF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"\Takes an argument that is an object that responds to #call and returns a Rack response.;FI"2The simplest form of this is a lambda object:;Fo:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"Lrun lambda { |env| [200, { "Content-Type" => "text/plain" }, ["OK"]] } ;Fo; ; [I"(However this could also be a class:;F@o; ; [ I"class Heartbeat ;FI" def self.call(env) ;FI": [200, { "Content-Type" => "text/plain" }, ["OK"]] ;FI" end ;FI" end ;FI" ;FI"run Heartbeat;F: @file000[I" (app);FI"lib/rack/builder.rb;FPK! /Rack/Builder/map-i.rinu[U:RDoc::AnyMethod[iI"map:EFI"Rack::Builder#map;FF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I",Creates a route within the application.;Fo:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"Rack::Builder.app do ;FI" map '/' do ;FI" run Heartbeat ;FI" end ;FI" end ;Fo; ; [I"_The +use+ method can also be used here to specify middleware to run under a specific path:;F@o; ; [ I"Rack::Builder.app do ;FI" map '/' do ;FI" use Middleware ;FI" run Heartbeat ;FI" end ;FI" end ;Fo; ; [I"`This example includes a piece of middleware which will run before requests hit +Heartbeat+.;F: @file000[I"(path, &block);FI"lib/rack/builder.rb;FPK!`m!yRack/Builder/to_app-i.rinu[U:RDoc::AnyMethod[iI" to_app:EFI"Rack::Builder#to_app;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/builder.rb;FPK!6js{{Rack/Builder/use-i.rinu[U:RDoc::AnyMethod[iI"use:EFI"Rack::Builder#use;FF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I",Specifies middleware to use in a stack.;Fo:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"class Middleware ;FI" def initialize(app) ;FI" @app = app ;FI" end ;FI" ;FI" def call(env) ;FI"8 env["rack.some_header"] = "setting an example" ;FI" @app.call(env) ;FI" end ;FI" end ;FI" ;FI"use Middleware ;FI"Lrun lambda { |env| [200, { "Content-Type" => "text/plain" }, ["OK"]] } ;Fo; ; [I"^All requests through to this application will first be processed by the middleware class.;FI"[The +call+ method in this example sets an additional environment key which then can be;FI"/referenced in the application if required.;F: @file000[I" (middleware, *args, &block);FI"lib/rack/builder.rb;FPK!ARack/Builder/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Builder#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/builder.rb;FPK! Rack/Builder/app-c.rinu[U:RDoc::AnyMethod[iI"app:EFI"Rack::Builder::app;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (default_app = nil, &block);FI"lib/rack/builder.rb;FPK! JXRack/Static/can_serve-i.rinu[U:RDoc::AnyMethod[iI"can_serve:EFI"Rack::Static#can_serve;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (path);FI"lib/rack/static.rb;FPK!^Rack/Static/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Static::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, options={});FI"lib/rack/static.rb;FPK!?!Rack/Static/applicable_rules-i.rinu[U:RDoc::AnyMethod[iI"applicable_rules:EFI""Rack::Static#applicable_rules;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I".Convert HTTP header rules to HTTP headers;F: @file000[I" (path);FI"lib/rack/static.rb;FPK!! Rack/Static/cdesc-Static.rinu[U:RDoc::NormalClass[iI" Static:EFI"Rack::Static;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[ I"EThe Rack::Static middleware intercepts requests for static files;FI"N(javascript files, images, stylesheets, etc) based on the url prefixes or;FI"Mroute mappings passed in the options, and serves them using a Rack::File;FI"Oobject. This allows a Rack stack to serve both static and dynamic content.;Fo:RDoc::Markup::BlankLineo; ;[I"Examples:;F@o; ;[I"MServe all requests beginning with /media from the "media" folder located;FI"+in the current directory (ie media/*):;F@o:RDoc::Markup::Verbatim;[I"+use Rack::Static, :urls => ["/media"] ;Fo; ;[I"OServe all requests beginning with /css or /images from the folder "public";FI"Din the current directory (ie public/css/* and public/images/*):;F@o; ;[I"Guse Rack::Static, :urls => ["/css", "/images"], :root => "public" ;Fo; ;[I"NServe all requests to / with "index.html" from the folder "public" in the;FI".current directory (ie public/index.html):;F@o; ;[I"Iuse Rack::Static, :urls => {"/" => 'index.html'}, :root => 'public' ;Fo; ;[I"HServe all requests normally from the folder "public" in the current;FI";directory but uses index.html as default route for "/";F@o; ;[I"Cuse Rack::Static, :urls => [""], :root => 'public', :index => ;FI"'index.html' ;Fo; ;[I"0Set custom HTTP Headers for based on rules:;F@o; ;[4I"- use Rack::Static, :root => 'public', ;FI" :header_rules => [ ;FI"J [rule, {header_field => content, header_field => content}], ;FI"0 [rule, {header_field => content}] ;FI" ] ;FI" ;FI" Rules for selecting files: ;FI" ;FI"1) All files ;FI" Provide the :all symbol ;FI"# :all => Matches every file ;FI" ;FI"2) Folders ;FI", Provide the folder path as a string ;FI"N '/folder' or '/folder/subfolder' => Matches files in a certain folder ;FI" ;FI"3) File Extensions ;FI"0 Provide the file extensions as an array ;FI"K ['css', 'js'] or %w(css js) => Matches files ending in .css or .js ;FI" ;FI"%4) Regular Expressions / Regexp ;FI"% Provide a regular expression ;FI"B %r{\.(?:css|js)\z} => Matches files ending in .css or .js ;FI"H /\.(?:eot|ttf|otf|woff2|woff|svg)\z/ => Matches files ending in ;FI"S the most common web font formats (.eot, .ttf, .otf, .woff2, .woff, .svg) ;FI"N Note: This Regexp is available as a shortcut, using the :fonts rule ;FI" ;FI"5) Font Shortcut ;FI"" Provide the :fonts symbol ;FI"_ :fonts => Uses the Regexp rule stated right above to match all common web font endings ;FI" ;FI"Rule Ordering: ;FI"> Rules are applied in the order that they are provided. ;FI"5 List rather general rules above special ones. ;FI" ;FI" 'public', ;FI" :header_rules => [ ;FI"K # Cache all static files in public caches (e.g. Rack::Cache) ;FI"+ # as well as in the browser ;FI"G [:all, {'Cache-Control' => 'public, max-age=31536000'}], ;FI" ;FI"K # Provide web fonts with cross-origin access-control-headers ;FI"\ # Firefox requires this when serving assets using a Content Delivery Network ;FI"? [:fonts, {'Access-Control-Allow-Origin' => '*'}] ;FI" ];F: @fileI"lib/rack/static.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@i[:protected[[: private[[I" instance;F[[; [ [I"applicable_rules;F@i[I" call;F@i[I"can_serve;F@i[I"overwrite_file_path;F@i[I"route_file;F@i[;[[;[PK!zɹ$Rack/Static/overwrite_file_path-i.rinu[U:RDoc::AnyMethod[iI"overwrite_file_path:EFI"%Rack::Static#overwrite_file_path;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (path);FI"lib/rack/static.rb;FPK!ϧRack/Static/route_file-i.rinu[U:RDoc::AnyMethod[iI"route_file:EFI"Rack::Static#route_file;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (path);FI"lib/rack/static.rb;FPK!(Rack/Static/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Static#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/static.rb;FPK!=*uRack/cdesc-Rack.rinu[U:RDoc::NormalModule[iI" Rack:EF@0o:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"CThe Rack main module, serving as a namespace for all core Rack;FI"modules and classes.;Fo:RDoc::Markup::BlankLineo; ;[I"PAll modules meant for use in your application are autoloaded here,;FI"Jso it should be enough just to require rack.rb in your code.;F: @fileI"lib/rack.rb;F; 0[[[I" VERSION;Fo;;[o; ;[I"2The Rack protocol version number implemented.;F; 0@[I"PATH_INFO;Fo;;[; 0@[I"REQUEST_METHOD;Fo;;[; 0@[I"SCRIPT_NAME;Fo;;[; 0@[I"QUERY_STRING;Fo;;[; 0@[I"CACHE_CONTROL;Fo;;[; 0@[I"CONTENT_LENGTH;Fo;;[; 0@[I"CONTENT_TYPE;Fo;;[; 0@[I"GET;Fo;;[; 0@[I" HEAD;Fo;;[; 0@[[[I" class;F[[: public[[I" release;F@[I" version;F@[:protected[[: private[[I" instance;F[[; [[; [[;[PK!"KRack/Runtime/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Runtime::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, name = nil);FI"lib/rack/runtime.rb;FPK!1Rack/Runtime/cdesc-Runtime.rinu[U:RDoc::NormalClass[iI" Runtime:EFI"Rack::Runtime;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"ASets an "X-Runtime" response header, indicating the response;FI"$time of the request, in seconds;Fo:RDoc::Markup::BlankLineo; ;[I"FYou can put it right before the application to see the processing;FI"Htime, or before all the other middlewares to include time for them,;FI" too.;F: @fileI"lib/rack/runtime.rb;F; 0[[[I"FORMAT_STRING;Fo;;[; 0@[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[;[PK!NJ0Rack/Runtime/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Runtime#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/runtime.rb;FPK!^Ӻ(Rack/Session/Cookie/Identity/decode-i.rinu[U:RDoc::AnyMethod[iI" decode:EFI"+Rack::Session::Cookie::Identity#decode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"lib/rack/session/cookie.rb;FPK!֬>.Rack/Session/Cookie/Identity/cdesc-Identity.rinu[U:RDoc::NormalClass[iI" Identity:EFI"$Rack::Session::Cookie::Identity;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"(Use no encoding for session cookies;F: @fileI"lib/rack/session/cookie.rb;F; 0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" decode;F@[I" encode;F@[; [[; [PK!WĹ(Rack/Session/Cookie/Identity/encode-i.rinu[U:RDoc::AnyMethod[iI" encode:EFI"+Rack::Session::Cookie::Identity#encode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"lib/rack/session/cookie.rb;FPK!|%>Rack/Session/Cookie/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Session::Cookie::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, options={});FI"lib/rack/session/cookie.rb;FPK!\#Rack/Session/Cookie/cdesc-Cookie.rinu[U:RDoc::NormalClass[iI" Cookie:EFI"Rack::Session::Cookie;FI"Abstract::ID;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[ I"KRack::Session::Cookie provides simple cookie based session management.;FI"OBy default, the session is a Ruby Hash stored as base64 encoded marshalled;FI"Kdata set to :key (default: rack.session). The object that encodes the;FI"Lsession data is configurable and must respond to +encode+ and +decode+.;FI"9Both methods must take a string and return a string.;Fo:RDoc::Markup::BlankLineo; ;[I"KWhen the secret key is set, cookie data is checked for data integrity.;FI"MThe old secret key is also accepted and allows graceful secret rotation.;F@o; ;[I" Example:;F@o:RDoc::Markup::Verbatim;[ I"8use Rack::Session::Cookie, :key => 'rack.session', ;FI"6 :domain => 'foo.com', ;FI". :path => '/', ;FI": :expire_after => 2592000, ;FI"8 :secret => 'change_me', ;FI"@ :old_secret => 'also_change_me' ;FI" ;FI""All parameters are optional. ;Fo; ;[I"*Example of a cookie with no encoding:;F@o; ;[I".Rack::Session::Cookie.new(application, { ;FI"5 :coder => Rack::Session::Cookie::Identity.new ;FI"}) ;Fo; ;[I".Example of a cookie with custom encoding:;F@o; ;[ I".Rack::Session::Cookie.new(application, { ;FI" :coder => Class.new { ;FI"+ def encode(str); str.reverse; end ;FI"+ def decode(str); str.reverse; end ;FI" }.new ;FI"});F: @fileI"lib/rack/session/cookie.rb;F; 0[[ I" coder;FI"R;F: publicF@:[[[[I" class;F[[; [[I"new;F@:[:protected[[: private[[I" instance;F[[; [[;[[;[PK!{2-Rack/Session/Cookie/Base64/JSON/cdesc-JSON.rinu[U:RDoc::NormalClass[iI" JSON:EFI"(Rack::Session::Cookie::Base64::JSON;FI""Rack::Session::Cookie::Base64;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"HN.B. Unlike other encoding methods, the contained objects must be a;FI":valid JSON composite type, either a Hash or an Array.;F: @fileI"lib/rack/session/cookie.rb;F; 0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" decode;F@[I" encode;F@[; [[; [PK!M>+Rack/Session/Cookie/Base64/JSON/decode-i.rinu[U:RDoc::AnyMethod[iI" decode:EFI"/Rack::Session::Cookie::Base64::JSON#decode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"lib/rack/session/cookie.rb;FPK!+Rack/Session/Cookie/Base64/JSON/encode-i.rinu[U:RDoc::AnyMethod[iI" encode:EFI"/Rack::Session::Cookie::Base64::JSON#encode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (obj);FI"lib/rack/session/cookie.rb;FPK!}}*Rack/Session/Cookie/Base64/cdesc-Base64.rinu[U:RDoc::NormalClass[iI" Base64:EFI""Rack::Session::Cookie::Base64;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"%Encode session cookies as Base64;F: @fileI"lib/rack/session/cookie.rb;F; 0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" decode;F@[I" encode;F@[; [[; [PK!opa&Rack/Session/Cookie/Base64/decode-i.rinu[U:RDoc::AnyMethod[iI" decode:EFI")Rack::Session::Cookie::Base64#decode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"lib/rack/session/cookie.rb;FPK!W.Rack/Session/Cookie/Base64/Marshal/decode-i.rinu[U:RDoc::AnyMethod[iI" decode:EFI"2Rack::Session::Cookie::Base64::Marshal#decode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"lib/rack/session/cookie.rb;FPK!&.3Rack/Session/Cookie/Base64/Marshal/cdesc-Marshal.rinu[U:RDoc::NormalClass[iI" Marshal:EFI"+Rack::Session::Cookie::Base64::Marshal;FI""Rack::Session::Cookie::Base64;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"4Encode session cookies as Marshaled Base64 data;F: @fileI"lib/rack/session/cookie.rb;F; 0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" decode;F@[I" encode;F@[; [[; [PK!.Rack/Session/Cookie/Base64/Marshal/encode-i.rinu[U:RDoc::AnyMethod[iI" encode:EFI"2Rack::Session::Cookie::Base64::Marshal#encode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"lib/rack/session/cookie.rb;FPK!90.Rack/Session/Cookie/Base64/ZipJSON/decode-i.rinu[U:RDoc::AnyMethod[iI" decode:EFI"2Rack::Session::Cookie::Base64::ZipJSON#decode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"lib/rack/session/cookie.rb;FPK!X4LL3Rack/Session/Cookie/Base64/ZipJSON/cdesc-ZipJSON.rinu[U:RDoc::NormalClass[iI" ZipJSON:EFI"+Rack::Session::Cookie::Base64::ZipJSON;FI""Rack::Session::Cookie::Base64;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" decode;FI"lib/rack/session/cookie.rb;F[I" encode;F@ [; [[; [PK!.Rack/Session/Cookie/Base64/ZipJSON/encode-i.rinu[U:RDoc::AnyMethod[iI" encode:EFI"2Rack::Session::Cookie::Base64::ZipJSON#encode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (obj);FI"lib/rack/session/cookie.rb;FPK!T &Rack/Session/Cookie/Base64/encode-i.rinu[U:RDoc::AnyMethod[iI" encode:EFI")Rack::Session::Cookie::Base64#encode;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (str);FI"lib/rack/session/cookie.rb;FPK!ARack/Session/Cookie/coder-i.rinu[U:RDoc::Attr[ iI" coder:EFI" Rack::Session::Cookie#coder;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/session/cookie.rb;FPK!]|Rack/Session/Pool/mutex-i.rinu[U:RDoc::Attr[ iI" mutex:EFI"Rack::Session::Pool#mutex;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/session/pool.rb;FPK!ByRack/Session/Pool/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Session::Pool::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, options={});FI"lib/rack/session/pool.rb;FPK!Tt"Rack/Session/Pool/set_session-i.rinu[U:RDoc::AnyMethod[iI"set_session:EFI"$Rack::Session::Pool#set_session;FF: publico:RDoc::Markup::Document: @parts[: @file000[I",(env, session_id, new_session, options);FI"lib/rack/session/pool.rb;FPK!0V Rack/Session/Pool/with_lock-i.rinu[U:RDoc::AnyMethod[iI"with_lock:EFI""Rack::Session::Pool#with_lock;FF: publico:RDoc::Markup::Document: @parts[: @file00I";F[I" (env);FI"lib/rack/session/pool.rb;FPK!wlRack/Session/Pool/pool-i.rinu[U:RDoc::Attr[ iI" pool:EFI"Rack::Session::Pool#pool;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/session/pool.rb;FPK!uIZRack/Session/Pool/cdesc-Pool.rinu[U:RDoc::NormalClass[iI" Pool:EFI"Rack::Session::Pool;FI"Abstract::ID;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[ I"IRack::Session::Pool provides simple cookie based session management.;FI"4Session data is stored in a hash held by @pool.;FI"BIn the context of a multithreaded environment, sessions being;FI"7committed to the pool is done in a merging manner.;Fo:RDoc::Markup::BlankLineo; ;[I"IThe :drop option is available in rack.session.options if you wish to;FI":explicitly remove the session from the session cache.;F@o; ;[I" Example:;Fo:RDoc::Markup::Verbatim;[ I"myapp = MyRackApp.new ;FI"0sessioned = Rack::Session::Pool.new(myapp, ;FI" :domain => 'foo.com', ;FI" :expire_after => 2592000 ;FI") ;FI")Rack::Handler::WEBrick.run sessioned;F: @fileI"lib/rack/session/pool.rb;F; 0[[ I" mutex;FI"R;F: publicF@$[ I" pool;F@(; F@$[[I"DEFAULT_OPTIONS;Fo;;[; 0@$[[[I" class;F[[; [[I"new;F@$[:protected[[: private[[I" instance;F[[; [ [I"destroy_session;F@$[I"generate_sid;F@$[I"get_session;F@$[I"set_session;F@$[I"with_lock;F@$[;[[;[PK! |Ӵ#Rack/Session/Pool/generate_sid-i.rinu[U:RDoc::AnyMethod[iI"generate_sid:EFI"%Rack::Session::Pool#generate_sid;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/session/pool.rb;FPK!侺"Rack/Session/Pool/get_session-i.rinu[U:RDoc::AnyMethod[iI"get_session:EFI"$Rack::Session::Pool#get_session;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(env, sid);FI"lib/rack/session/pool.rb;FPK!B9&Rack/Session/Pool/destroy_session-i.rinu[U:RDoc::AnyMethod[iI"destroy_session:EFI"(Rack::Session::Pool#destroy_session;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(env, session_id, options);FI"lib/rack/session/pool.rb;FPK!)0Rack/Session/cdesc-Session.rinu[U:RDoc::NormalModule[iI" Session:EFI"Rack::Session;F0o:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!‡9QQ'Rack/Session/Abstract/cdesc-Abstract.rinu[U:RDoc::NormalModule[iI" Abstract:EFI"Rack::Session::Abstract;F0o:RDoc::Markup::Document: @parts[: @file0[[[I"ENV_SESSION_KEY;Fo;;[; 0I"$lib/rack/session/abstract/id.rb;F[I"ENV_SESSION_OPTIONS_KEY;Fo;;[; 0@[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!DB-Rack/Session/Abstract/SessionHash/delete-i.rinu[U:RDoc::AnyMethod[iI" delete:EFI"0Rack::Session::Abstract::SessionHash#delete;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (key);FI"$lib/rack/session/abstract/id.rb;FPK!rv-Rack/Session/Abstract/SessionHash/values-i.rinu[U:RDoc::AnyMethod[iI" values:EFI"0Rack::Session::Abstract::SessionHash#values;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/session/abstract/id.rb;FPK!_J_,Rack/Session/Abstract/SessionHash/clear-i.rinu[U:RDoc::AnyMethod[iI" clear:EFI"/Rack::Session::Abstract::SessionHash#clear;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/session/abstract/id.rb;FPK!`/Rack/Session/Abstract/SessionHash/empty%3f-i.rinu[U:RDoc::AnyMethod[iI" empty?:EFI"0Rack::Session::Abstract::SessionHash#empty?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/session/abstract/id.rb;FPK!'M.Rack/Session/Abstract/SessionHash/replace-i.rinu[U:RDoc::AnyMethod[iI" replace:EFI"1Rack::Session::Abstract::SessionHash#replace;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (hash);FI"$lib/rack/session/abstract/id.rb;FPK!jQ1Rack/Session/Abstract/SessionHash/has_key%3f-i.rinu[U:RDoc::AnyMethod[iI" has_key?:EFI"2Rack::Session::Abstract::SessionHash#has_key?;FF: publico:RDoc::Markup::Document: @parts[: @file000[[I" key?;Fo;; [; 0[I" include?;Fo;; [; 0I" (key);FI"$lib/rack/session/abstract/id.rb;FPK!Z0Rack/Session/Abstract/SessionHash/exists%3f-i.rinu[U:RDoc::AnyMethod[iI" exists?:EFI"1Rack::Session::Abstract::SessionHash#exists?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/session/abstract/id.rb;FPK!Q*Rack/Session/Abstract/SessionHash/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI".Rack::Session::Abstract::SessionHash::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(store, env);FI"$lib/rack/session/abstract/id.rb;FPK!`e-Rack/Session/Abstract/SessionHash/key%3f-i.rinu[U:RDoc::AnyMethod[iI" key?:EFI".Rack::Session::Abstract::SessionHash#key?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (key);FI"$lib/rack/session/abstract/id.rb;FPK!-,Rack/Session/Abstract/SessionHash/store-i.rinu[U:RDoc::AnyMethod[iI" store:EFI"/Rack::Session::Abstract::SessionHash#store;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(key, value);FI"$lib/rack/session/abstract/id.rb;FPK!^f1Rack/Session/Abstract/SessionHash/include%3f-i.rinu[U:RDoc::AnyMethod[iI" include?:EFI"2Rack::Session::Abstract::SessionHash#include?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (key);FI"$lib/rack/session/abstract/id.rb;FPK!L*Rack/Session/Abstract/SessionHash/set-c.rinu[U:RDoc::AnyMethod[iI"set:EFI".Rack::Session::Abstract::SessionHash::set;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(env, session);FI"$lib/rack/session/abstract/id.rb;FPK!h.Rack/Session/Abstract/SessionHash/destroy-i.rinu[U:RDoc::AnyMethod[iI" destroy:EFI"1Rack::Session::Abstract::SessionHash#destroy;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/session/abstract/id.rb;FPK!Th-Rack/Session/Abstract/SessionHash/%5b%5d-i.rinu[U:RDoc::AnyMethod[iI"[]:EFI",Rack::Session::Abstract::SessionHash#[];FF: publico:RDoc::Markup::Document: @parts[: @file000[[I" fetch;Fo;; [; 0I" (key);FI"$lib/rack/session/abstract/id.rb;FPK!gAO,Rack/Session/Abstract/SessionHash/fetch-i.rinu[U:RDoc::AnyMethod[iI" fetch:EFI"/Rack::Session::Abstract::SessionHash#fetch;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (key);FI"$lib/rack/session/abstract/id.rb;FPK!c(+Rack/Session/Abstract/SessionHash/each-i.rinu[U:RDoc::AnyMethod[iI" each:EFI".Rack::Session::Abstract::SessionHash#each;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (&block);FI"$lib/rack/session/abstract/id.rb;FPK![+Rack/Session/Abstract/SessionHash/find-c.rinu[U:RDoc::AnyMethod[iI" find:EFI"/Rack::Session::Abstract::SessionHash::find;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"$lib/rack/session/abstract/id.rb;FPK!*5.Rack/Session/Abstract/SessionHash/options-i.rinu[U:RDoc::AnyMethod[iI" options:EFI"1Rack::Session::Abstract::SessionHash#options;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/session/abstract/id.rb;FPK!.Rack/Session/Abstract/SessionHash/to_hash-i.rinu[U:RDoc::AnyMethod[iI" to_hash:EFI"1Rack::Session::Abstract::SessionHash#to_hash;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/session/abstract/id.rb;FPK!L)+Rack/Session/Abstract/SessionHash/keys-i.rinu[U:RDoc::AnyMethod[iI" keys:EFI".Rack::Session::Abstract::SessionHash#keys;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"$lib/rack/session/abstract/id.rb;FPK!ZO/Rack/Session/Abstract/SessionHash/merge%21-i.rinu[U:RDoc::AnyMethod[iI" merge!:EFI"0Rack::Session::Abstract::SessionHash#merge!;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (hash);FI"$lib/rack/session/abstract/id.rb;FPK!ZRack/NullLogger/unknown-i.rinu[U:RDoc::AnyMethod[iI" unknown:EFI"Rack::NullLogger#unknown;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(progname = nil, &block);FI"lib/rack/nulllogger.rb;FPK!(Rack/NullLogger/fatal-i.rinu[U:RDoc::AnyMethod[iI" fatal:EFI"Rack::NullLogger#fatal;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(progname = nil, &block);FI"lib/rack/nulllogger.rb;FPK!/Rack/NullLogger/debug%3f-i.rinu[U:RDoc::AnyMethod[iI" debug?:EFI"Rack::NullLogger#debug?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/nulllogger.rb;FPK!Rack/Lobster/cdesc-Lobster.rinu[U:RDoc::NormalClass[iI" Lobster:EFI"Rack::Lobster;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"*Paste has a Pony, Rack has a Lobster!;F: @fileI"lib/rack/lobster.rb;F; 0[[[I"LobsterString;Fo;;[; 0@[I"LambdaLobster;Fo;;[; 0@[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[; [PK!SRack/Lobster/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Lobster#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/lobster.rb;FPK!/&+Rack/MethodOverride/cdesc-MethodOverride.rinu[U:RDoc::NormalClass[iI"MethodOverride:EFI"Rack::MethodOverride;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[ [I"HTTP_METHODS;Fo;;[; 0I"lib/rack/methodoverride.rb;F[I"METHOD_OVERRIDE_PARAM_KEY;Fo;;[; 0@[I" HTTP_METHOD_OVERRIDE_HEADER;Fo;;[; 0@[I"ALLOWED_METHODS;Fo;;[; 0@[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[I"method_override;F@[; [[; [PK!#1Rack/MethodOverride/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::MethodOverride::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/methodoverride.rb;FPK!eJ(Rack/MethodOverride/method_override-i.rinu[U:RDoc::AnyMethod[iI"method_override:EFI")Rack::MethodOverride#method_override;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/methodoverride.rb;FPK!-CRack/MethodOverride/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::MethodOverride#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/methodoverride.rb;FPK!*!Rack/Server/server-i.rinu[U:RDoc::AnyMethod[iI" server:EFI"Rack::Server#server;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/server.rb;FPK!'OvvRack/Server/start-c.rinu[U:RDoc::AnyMethod[iI" start:EFI"Rack::Server::start;FT: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"LStart a new rack server (like running rackup). This will parse ARGV and;FI"Jprovide standard ARGV rackup options, defaulting to load 'config.ru'.;Fo:RDoc::Markup::BlankLineo; ; [I"MProviding an options hash will prevent ARGV parsing and will not include;FI"any default options.;F@o; ; [I"IThis method can be used to very easily launch a CGI application, for;FI" example:;F@o:RDoc::Markup::Verbatim; [ I"Rack::Server.start( ;FI" :app => lambda do |e| ;FI"A [200, {'Content-Type' => 'text/html'}, ['hello world']] ;FI" end, ;FI" :server => 'cgi' ;FI") ;Fo; ; [I"MFurther options available here are documented on Rack::Server#initialize;F: @file000[I"(options = nil);FI"lib/rack/server.rb;FPK!cPRack/Server/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Server::new;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"Options may include:;Fo:RDoc::Markup::List: @type: BULLET: @items[o:RDoc::Markup::ListItem: @label0; [o; ; [I" :app;Fo:RDoc::Markup::Verbatim; [I"3a rack application to run (overrides :config) ;Fo;;0; [o; ; [I" :config;Fo;; [I"4a rackup configuration file path to load (.ru) ;Fo;;0; [o; ; [I":environment;Fo;; [ I"=this selects the middleware that will be wrapped around ;FI"6your application. Default options available are: ;FI"= - development: CommonLogger, ShowExceptions, and Lint ;FI"" - deployment: CommonLogger ;FI"# - none: no extra middleware ;FI"Jnote: when the server is a cgi server, CommonLogger is not included. ;Fo;;0; [o; ; [I" :server;Fo;; [I">choose a specific Rack::Handler, e.g. cgi, fcgi, webrick ;Fo;;0; [o; ; [I":daemonize;Fo;; [I"Cif true, the server will daemonize itself (fork, detach, etc) ;Fo;;0; [o; ; [I" :pid;Fo;; [I".path to write a pid file after daemonize ;Fo;;0; [o; ; [I" :Host;Fo;; [I"Dthe host address to bind to (used by supporting Rack::Handler) ;Fo;;0; [o; ; [I" :Port;Fo;; [I"webrick access log options (or supporting Rack::Handler) ;Fo;;0; [o; ; [I" :debug;Fo;; [I"*turn on debug output ($DEBUG = true) ;Fo;;0; [o; ; [I" :warn;Fo;; [I"#turn on warnings ($-w = true) ;Fo;;0; [o; ; [I" :include;Fo;; [I"#add given paths to $LOAD_PATH ;Fo;;0; [o; ; [I" :require;Fo;; [I" require the given libraries;F: @file000[I"(options = nil);FI"lib/rack/server.rb;FPK!#Rack/Server/logging_middleware-c.rinu[U:RDoc::AnyMethod[iI"logging_middleware:EFI"%Rack::Server::logging_middleware;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/server.rb;FPK!ӏX?%Rack/Server/Options/handler_opts-i.rinu[U:RDoc::AnyMethod[iI"handler_opts:EFI"'Rack::Server::Options#handler_opts;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(options);FI"lib/rack/server.rb;FPK!""$Rack/Server/Options/cdesc-Options.rinu[U:RDoc::NormalClass[iI" Options:EFI"Rack::Server::Options;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[I"handler_opts;FI"lib/rack/server.rb;F[I" parse!;F@ [; [[; [PK!hpͨ!Rack/Server/Options/parse%21-i.rinu[U:RDoc::AnyMethod[iI" parse!:EFI"!Rack::Server::Options#parse!;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (args);FI"lib/rack/server.rb;FPK!"ѕoRack/Server/app-i.rinu[U:RDoc::AnyMethod[iI"app:EFI"Rack::Server#app;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/server.rb;FPK!Jb'Rack/Server/middleware-c.rinu[U:RDoc::AnyMethod[iI"middleware:EFI"Rack::Server::middleware;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/server.rb;FPK!z;Rack/Server/options-i.rinu[U:RDoc::Attr[ iI" options:EFI"Rack::Server#options;FI"W;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/server.rb;FPK!uc Rack/Server/default_options-i.rinu[U:RDoc::AnyMethod[iI"default_options:EFI"!Rack::Server#default_options;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/server.rb;FPK!NhRack/Server/middleware-i.rinu[U:RDoc::AnyMethod[iI"middleware:EFI"Rack::Server#middleware;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/server.rb;FPK!Rack/Server/start-i.rinu[U:RDoc::AnyMethod[iI" start:EFI"Rack::Server#start;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (&blk);FI"lib/rack/server.rb;FPK!UVRack/Server/cdesc-Server.rinu[U:RDoc::NormalClass[iI" Server:EFI"Rack::Server;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[ I" options;FI"W;F: publicFI"lib/rack/server.rb;F[[[[I" class;F[[; [ [I"&default_middleware_by_environment;F@[I"logging_middleware;F@[I"middleware;F@[I"new;F@[I" start;F@[:protected[[: private[[I" instance;F[[; [ [I"app;F@[I"default_options;F@[I"middleware;F@[I" options;F@[I" server;F@[I" start;F@[; [[; [PK!"2Rack/Server/default_middleware_by_environment-c.rinu[U:RDoc::AnyMethod[iI"&default_middleware_by_environment:EFI"4Rack::Server::default_middleware_by_environment;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/server.rb;FPK!!EERack/Cascade/cdesc-Cascade.rinu[U:RDoc::NormalClass[iI" Cascade:EFI"Rack::Cascade;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"CRack::Cascade tries a request on several apps, and returns the;FI"Hfirst response that is not 404 or 405 (or in a list of configurable;FI"status codes).;F: @fileI"lib/rack/cascade.rb;F; 0[[ I" apps;FI"R;F: publicF@[[I" NotFound;Fo;;[; 0@[[[I" class;F[[; [[I"new;F@[:protected[[: private[[I" instance;F[[; [ [I"<<;F@[I"add;F@[I" call;F@[I" include?;F@[; [[; [PK!ERack/Cascade/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Cascade::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(apps, catch=[404, 405]);FI"lib/rack/cascade.rb;FPK!ٴ|Rack/Cascade/apps-i.rinu[U:RDoc::Attr[ iI" apps:EFI"Rack::Cascade#apps;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/cascade.rb;FPK!xRack/Cascade/include%3f-i.rinu[U:RDoc::AnyMethod[iI" include?:EFI"Rack::Cascade#include?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/cascade.rb;FPK!~ҰRack/Cascade/add-i.rinu[U:RDoc::AnyMethod[iI"add:EFI"Rack::Cascade#add;FF: publico:RDoc::Markup::Document: @parts[: @file000[[I"<<;Fo;; [; 0I" (app);FI"lib/rack/cascade.rb;FPK!pARack/Cascade/%3c%3c-i.rinu[U:RDoc::AnyMethod[iI"<<:EFI"Rack::Cascade#<<;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/cascade.rb;FPK!л쪜Rack/Cascade/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Cascade#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/cascade.rb;FPK!ѪRack/MockRequest/delete-i.rinu[U:RDoc::AnyMethod[iI" delete:EFI"Rack::MockRequest#delete;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(uri, opts={});FI"lib/rack/mock.rb;FPK!#a Rack/MockRequest/patch-i.rinu[U:RDoc::AnyMethod[iI" patch:EFI"Rack::MockRequest#patch;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(uri, opts={});FI"lib/rack/mock.rb;FPK!AZRack/MockRequest/env_for-c.rinu[U:RDoc::AnyMethod[iI" env_for:EFI"Rack::MockRequest::env_for;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"=Return the Rack environment used for a request to +uri+.;F: @file000[I"(uri="", opts={});FI"lib/rack/mock.rb;FPK!vRack/MockRequest/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::MockRequest::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/mock.rb;FPK!CIRack/MockRequest/request-i.rinu[U:RDoc::AnyMethod[iI" request:EFI"Rack::MockRequest#request;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"$(method="GET", uri="", opts={});FI"lib/rack/mock.rb;FPK!ϝD6Rack/MockRequest/put-i.rinu[U:RDoc::AnyMethod[iI"put:EFI"Rack::MockRequest#put;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(uri, opts={});FI"lib/rack/mock.rb;FPK!hSRack/MockRequest/get-i.rinu[U:RDoc::AnyMethod[iI"get:EFI"Rack::MockRequest#get;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(uri, opts={});FI"lib/rack/mock.rb;FPK!_3gg'Rack/MockRequest/parse_uri_rfc2396-c.rinu[U:RDoc::AnyMethod[iI"parse_uri_rfc2396:EFI")Rack::MockRequest::parse_uri_rfc2396;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"MFor historical reasons, we're pinning to RFC 2396. It's easier for users;FI"?and we get support from ruby 1.8 to 2.2 using this method.;F: @file000[I" (uri);FI"lib/rack/mock.rb;FPK!p03Rack/MockRequest/FatalWarning/cdesc-FatalWarning.rinu[U:RDoc::NormalClass[iI"FatalWarning:EFI"$Rack::MockRequest::FatalWarning;FI"RuntimeError;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [[; [[; [PK!mZRack/MockRequest/head-i.rinu[U:RDoc::AnyMethod[iI" head:EFI"Rack::MockRequest#head;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(uri, opts={});FI"lib/rack/mock.rb;FPK!\&Rack/MockRequest/options-i.rinu[U:RDoc::AnyMethod[iI" options:EFI"Rack::MockRequest#options;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(uri, opts={});FI"lib/rack/mock.rb;FPK!%{_lEE1Rack/MockRequest/FatalWarner/cdesc-FatalWarner.rinu[U:RDoc::NormalClass[iI"FatalWarner:EFI"#Rack::MockRequest::FatalWarner;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[:protected[[: private[[I" instance;F[[; [ [I" flush;FI"lib/rack/mock.rb;F[I" puts;F@ [I" string;F@ [I" write;F@ [; [[; [PK!NP(Rack/MockRequest/FatalWarner/string-i.rinu[U:RDoc::AnyMethod[iI" string:EFI"*Rack::MockRequest::FatalWarner#string;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/mock.rb;FPK!qY0'Rack/MockRequest/FatalWarner/flush-i.rinu[U:RDoc::AnyMethod[iI" flush:EFI")Rack::MockRequest::FatalWarner#flush;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/mock.rb;FPK!f&Rack/MockRequest/FatalWarner/puts-i.rinu[U:RDoc::AnyMethod[iI" puts:EFI"(Rack::MockRequest::FatalWarner#puts;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(warning);FI"lib/rack/mock.rb;FPK!tҰ'Rack/MockRequest/FatalWarner/write-i.rinu[U:RDoc::AnyMethod[iI" write:EFI")Rack::MockRequest::FatalWarner#write;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(warning);FI"lib/rack/mock.rb;FPK!?%Rack/MockRequest/cdesc-MockRequest.rinu[U:RDoc::NormalClass[iI"MockRequest:EFI"Rack::MockRequest;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"BRack::MockRequest helps testing your Rack application without;FI"actually using HTTP.;Fo:RDoc::Markup::BlankLineo; ;[I"KAfter performing a request on a URL with get/post/put/patch/delete, it;FI"Dreturns a MockResponse with useful helper methods for effective;FI" testing.;F@o; ;[I"=You can pass a hash with additional configuration to the;FI"get/post/put/patch/delete.;Fo:RDoc::Markup::List: @type: NOTE: @items[o:RDoc::Markup::ListItem: @labelI":input;F;[o; ;[I"2A String or IO-like to be used as rack.input.;Fo;;I":fatal;F;[o; ;[I";Raise a FatalWarning if the app writes to rack.errors.;Fo;;I":lint;F;[o; ;[I"3If true, wrap the application in a Rack::Lint.;F: @fileI"lib/rack/mock.rb;F;0[[[I"DEFAULT_ENV;Fo;;[;0@0[[[I" class;F[[: public[[I" env_for;F@0[I"new;F@0[I"parse_uri_rfc2396;F@0[:protected[[: private[[I" instance;F[[;[ [I" delete;F@0[I"get;F@0[I" head;F@0[I" options;F@0[I" patch;F@0[I" post;F@0[I"put;F@0[I" request;F@0[;[[;[PK!栩Rack/MockRequest/post-i.rinu[U:RDoc::AnyMethod[iI" post:EFI"Rack::MockRequest#post;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(uri, opts={});FI"lib/rack/mock.rb;FPK!Iª88Rack/Config/cdesc-Config.rinu[U:RDoc::NormalClass[iI" Config:EFI"Rack::Config;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"GRack::Config modifies the environment using the block given during;FI"initialization.;Fo:RDoc::Markup::BlankLineo; ;[I" Example:;Fo:RDoc::Markup::Verbatim;[I"use Rack::Config do |env| ;FI"$ env['my-key'] = 'some-value' ;FI"end;F: @fileI"lib/rack/config.rb;F; 0[[[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[;[[;[PK!5ٱRack/Config/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Config::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(app, &block);FI"lib/rack/config.rb;FPK!XRack/Config/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Config#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/config.rb;FPK!DثRack/version-c.rinu[U:RDoc::AnyMethod[iI" version:EFI"Rack::version;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"9Return the Rack protocol version as a dotted string.;F: @file000[I"();FI"lib/rack.rb;FPK!r-GRack/Directory/_call-i.rinu[U:RDoc::AnyMethod[iI" _call:EFI"Rack::Directory#_call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/directory.rb;FPK!#Rack/Directory/check_forbidden-i.rinu[U:RDoc::AnyMethod[iI"check_forbidden:EFI"$Rack::Directory#check_forbidden;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/directory.rb;FPK!̩VRack/Directory/path-i.rinu[U:RDoc::Attr[ iI" path:EFI"Rack::Directory#path;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/directory.rb;FPK!W[Rack/Directory/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Directory::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(root, app=nil);FI"lib/rack/directory.rb;FPK!dRack/Directory/root-i.rinu[U:RDoc::Attr[ iI" root:EFI"Rack::Directory#root;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/directory.rb;FPK!k"Rack/Directory/list_directory-i.rinu[U:RDoc::AnyMethod[iI"list_directory:EFI"#Rack::Directory#list_directory;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/directory.rb;FPK!T``!Rack/Directory/cdesc-Directory.rinu[U:RDoc::NormalClass[iI"Directory:EFI"Rack::Directory;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[ I"LRack::Directory serves entries below the +root+ given, according to the;FI"Ppath info of the Rack request. If a directory is found, the file's contents;FI"Owill be presented in an html based index. If a file is found, the env will;FI"&be passed to the specified +app+.;Fo:RDoc::Markup::BlankLineo; ;[I"MIf +app+ is not specified, a Rack::File of the same +root+ will be used.;F: @fileI"lib/rack/directory.rb;F; 0[[ I" files;FI"R;F: publicF@[ I" path;FI"RW;F; F@[ I" root;FI"RW;F; F@[ [I" DIR_FILE;Fo;;[; 0@[I" DIR_PAGE;Fo;;[; 0@[I"F;Fo;;[; 0@[I"FILESIZE_FORMAT;Fo;;[o; ;[I"Stolen from Ramaze;F; 0@[[[I" class;F[[; [[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" _call;F@[I" call;F@[I"check_forbidden;F@[I" each;F@[I"entity_not_found;F@[I"filesize_format;F@[I"list_directory;F@[I"list_path;F@[I" stat;F@[; [[;[PK!Rack/Directory/each-i.rinu[U:RDoc::AnyMethod[iI" each:EFI"Rack::Directory#each;FF: publico:RDoc::Markup::Document: @parts[: @file00I"l;F[I"();FI"lib/rack/directory.rb;FPK!P#Rack/Directory/filesize_format-i.rinu[U:RDoc::AnyMethod[iI"filesize_format:EFI"$Rack::Directory#filesize_format;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (int);FI"lib/rack/directory.rb;FPK!WoBRack/Directory/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::Directory#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/directory.rb;FPK!_ǦRack/Directory/files-i.rinu[U:RDoc::Attr[ iI" files:EFI"Rack::Directory#files;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/directory.rb;FPK!-$Rack/Directory/entity_not_found-i.rinu[U:RDoc::AnyMethod[iI"entity_not_found:EFI"%Rack::Directory#entity_not_found;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/directory.rb;FPK! l??Rack/Directory/list_path-i.rinu[U:RDoc::AnyMethod[iI"list_path:EFI"Rack::Directory#list_path;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"LTODO: add correct response if not readable, not sure if 404 is the best;Fo:RDoc::Markup::Verbatim; [I" option;F: @file000[I"();FI"lib/rack/directory.rb;FPK! true ;FI"2Rack::Mime.match?('text/plain', '*') => true ;FI"@Rack::Mime.match?('text/html', 'application/json') => false;F: @file000[I"(value, matcher);FI"lib/rack/mime.rb;FPK!|{Q44Rack/Mime/cdesc-Mime.rinu[U:RDoc::NormalModule[iI" Mime:EFI"Rack::Mime;F0o:RDoc::Markup::Document: @parts[: @file0[[[I"MIME_TYPES;Fo;;[o:RDoc::Markup::Paragraph;[I"=List of most common mime-types, selected various sources;FI"Aaccording to their usefulness in a webserving scope for Ruby;FI" users.;Fo:RDoc::Markup::BlankLineo; ;[I"DTo amend this list with your local mime.types list you can use:;F@o:RDoc::Markup::Verbatim;[I"!require 'webrick/httputils' ;FI"Blist = WEBrick::HTTPUtils.load_mime_types('/etc/mime.types') ;FI")Rack::Mime::MIME_TYPES.merge!(list) ;Fo; ;[I"ON.B. On Ubuntu the mime.types file does not include the leading period, so;FI"Dusers may need to modify the data before merging into the hash.;F@o; ;[I"+To add the list mongrel provides, use:;F@o; ;[I" require 'mongrel/handlers' ;FI"CRack::Mime::MIME_TYPES.merge!(Mongrel::DirHandler::MIME_TYPES);F; 0I"lib/rack/mime.rb;F[[[I" class;F[[: public[[I" match?;F@*[I"mime_type;F@*[:protected[[: private[[I" instance;F[[; [[;[[;[PK!녴Rack/Mime/mime_type-c.rinu[U:RDoc::AnyMethod[iI"mime_type:EFI"Rack::Mime::mime_type;FT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"FReturns String with mime type if found, otherwise use +fallback+.;FI"A+ext+ should be filename extension in the '.ext' format that;Fo:RDoc::Markup::Verbatim; [I"!File.extname(file) returns. ;Fo; ; [I"!+fallback+ may be any object;Fo:RDoc::Markup::BlankLineo; ; [I".Also see the documentation for MIME_TYPES;F@o; ; [I" Usage:;Fo; ; [I""Rack::Mime.mime_type('.foo') ;Fo; ; [I"This is a shortcut for:;Fo; ; [I"ERack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream');F: @file000[I"/(ext, fallback='application/octet-stream');FI"lib/rack/mime.rb;FPK!K,!Rack/BodyProxy/respond_to%3f-i.rinu[U:RDoc::AnyMethod[iI"respond_to?:EFI" Rack::BodyProxy#respond_to?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (*args);FI"lib/rack/body_proxy.rb;FPK!pxRack/BodyProxy/closed%3f-i.rinu[U:RDoc::AnyMethod[iI" closed?:EFI"Rack::BodyProxy#closed?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/body_proxy.rb;FPK!^Rack/BodyProxy/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::BodyProxy::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(body, &block);FI"lib/rack/body_proxy.rb;FPK!!"Rack/BodyProxy/method_missing-i.rinu[U:RDoc::AnyMethod[iI"method_missing:EFI"#Rack::BodyProxy#method_missing;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(*args, &block);FI"lib/rack/body_proxy.rb;FPK!kihh!Rack/BodyProxy/cdesc-BodyProxy.rinu[U:RDoc::NormalClass[iI"BodyProxy:EFI"Rack::BodyProxy;FI" Object;Fo:RDoc::Markup::Document: @parts[: @file0[[[[[I" class;F[[: public[[I"new;FI"lib/rack/body_proxy.rb;F[:protected[[: private[[I" instance;F[[; [ [I" close;F@[I" closed?;F@[I" each;F@[I"method_missing;F@[I"respond_to?;F@[; [[; [PK!FRack/BodyProxy/each-i.rinu[U:RDoc::AnyMethod[iI" each:EFI"Rack::BodyProxy#each;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [ I"MN.B. This method is a special case to address the bug described by #434.;FI"JWe are applying this special case for #each only. Future bugs of this;FI"Bclass will be handled by requesting users to patch their ruby;FI"Cimplementation, to save adding too many methods in this class.;F: @file000[I"(*args, &block);FI"lib/rack/body_proxy.rb;FPK!⢑"Rack/BodyProxy/close-i.rinu[U:RDoc::AnyMethod[iI" close:EFI"Rack::BodyProxy#close;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/body_proxy.rb;FPK!/TRack/Response/empty%3f-i.rinu[U:RDoc::AnyMethod[iI" empty?:EFI"Rack::Response#empty?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK! Rack/Response/delete_cookie-i.rinu[U:RDoc::AnyMethod[iI"delete_cookie:EFI"!Rack::Response#delete_cookie;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(key, value={});FI"lib/rack/response.rb;FPK!NRack/Response/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::Response::new;FT: publico:RDoc::Markup::Document: @parts[: @file00I" self;F[I"%(body=[], status=200, header={});FI"lib/rack/response.rb;FPK!yRack/Response/to_ary-i.rinu[U:RDoc::AnyMethod[iI" to_ary:EFI"Rack::Response#to_ary;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (&block);FI"lib/rack/response.rb;FPK!+Rack/Response/Helpers/unprocessable%3f-i.rinu[U:RDoc::AnyMethod[iI"unprocessable?:EFI"+Rack::Response::Helpers#unprocessable?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!E'Rack/Response/Helpers/not_found%3f-i.rinu[U:RDoc::AnyMethod[iI"not_found?:EFI"'Rack::Response::Helpers#not_found?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!rcg#Rack/Response/Helpers/location-i.rinu[U:RDoc::AnyMethod[iI" location:EFI"%Rack::Response::Helpers#location;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!.lˬ%Rack/Response/Helpers/invalid%3f-i.rinu[U:RDoc::AnyMethod[iI" invalid?:EFI"%Rack::Response::Helpers#invalid?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!gcs+Rack/Response/Helpers/informational%3f-i.rinu[U:RDoc::AnyMethod[iI"informational?:EFI"+Rack::Response::Helpers#informational?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!+Rack/Response/Helpers/original_headers-i.rinu[U:RDoc::Attr[ iI"original_headers:EFI"-Rack::Response::Helpers#original_headers;FI"R;F: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I" Headers;F: @file0FI"lib/rack/response.rb;FPK!?&Rack/Response/Helpers/redirect%3f-i.rinu[U:RDoc::AnyMethod[iI"redirect?:EFI"&Rack::Response::Helpers#redirect?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!Ab,%Rack/Response/Helpers/created%3f-i.rinu[U:RDoc::AnyMethod[iI" created?:EFI"%Rack::Response::Helpers#created?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!U0&Rack/Response/Helpers/accepted%3f-i.rinu[U:RDoc::AnyMethod[iI"accepted?:EFI"&Rack::Response::Helpers#accepted?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!B3Y*Rack/Response/Helpers/server_error%3f-i.rinu[U:RDoc::AnyMethod[iI"server_error?:EFI"*Rack::Response::Helpers#server_error?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!c\%Rack/Response/Helpers/include%3f-i.rinu[U:RDoc::AnyMethod[iI" include?:EFI"%Rack::Response::Helpers#include?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (header);FI"lib/rack/response.rb;FPK!ϧ\)Rack/Response/Helpers/bad_request%3f-i.rinu[U:RDoc::AnyMethod[iI"bad_request?:EFI")Rack::Response::Helpers#bad_request?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!Z)Rack/Response/Helpers/content_length-i.rinu[U:RDoc::AnyMethod[iI"content_length:EFI"+Rack::Response::Helpers#content_length;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!؜(Rack/Response/Helpers/successful%3f-i.rinu[U:RDoc::AnyMethod[iI"successful?:EFI"(Rack::Response::Helpers#successful?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!T(J*Rack/Response/Helpers/unauthorized%3f-i.rinu[U:RDoc::AnyMethod[iI"unauthorized?:EFI"*Rack::Response::Helpers#unauthorized?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!{ Rack/Response/Helpers/ok%3f-i.rinu[U:RDoc::AnyMethod[iI"ok?:EFI" Rack::Response::Helpers#ok?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!TM(['Rack/Response/Helpers/content_type-i.rinu[U:RDoc::AnyMethod[iI"content_type:EFI")Rack::Response::Helpers#content_type;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!2Ѱ'Rack/Response/Helpers/forbidden%3f-i.rinu[U:RDoc::AnyMethod[iI"forbidden?:EFI"'Rack::Response::Helpers#forbidden?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!40Rack/Response/Helpers/method_not_allowed%3f-i.rinu[U:RDoc::AnyMethod[iI"method_not_allowed?:EFI"0Rack::Response::Helpers#method_not_allowed?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!@$e"Rack/Response/Helpers/headers-i.rinu[U:RDoc::Attr[ iI" headers:EFI"$Rack::Response::Helpers#headers;FI"R;F: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I" Headers;F: @file0FI"lib/rack/response.rb;FPK!*Rack/Response/Helpers/client_error%3f-i.rinu[U:RDoc::AnyMethod[iI"client_error?:EFI"*Rack::Response::Helpers#client_error?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!*Rack/Response/Helpers/i_m_a_teapot%3f-i.rinu[U:RDoc::AnyMethod[iI"i_m_a_teapot?:EFI"*Rack::Response::Helpers#i_m_a_teapot?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK! C&Rack/Response/Helpers/cdesc-Helpers.rinu[U:RDoc::NormalModule[iI" Helpers:EFI"Rack::Response::Helpers;F0o:RDoc::Markup::Document: @parts[: @file0[[ I" headers;FI"R;F: publicFI"lib/rack/response.rb;F[ I"original_headers;F@; F@[[[[I" class;F[[; [[:protected[[: private[[I" instance;F[[; [[I"accepted?;F@[I"bad_request?;F@[I"client_error?;F@[I"content_length;F@[I"content_type;F@[I" created?;F@[I"forbidden?;F@[I"i_m_a_teapot?;F@[I" include?;F@[I"informational?;F@[I" invalid?;F@[I" location;F@[I"method_not_allowed?;F@[I"not_found?;F@[I"ok?;F@[I"redirect?;F@[I"redirection?;F@[I"server_error?;F@[I"successful?;F@[I"unauthorized?;F@[I"unprocessable?;F@[; [[; [PK!)Rack/Response/Helpers/redirection%3f-i.rinu[U:RDoc::AnyMethod[iI"redirection?:EFI")Rack::Response::Helpers#redirection?;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!) Rack/Response/header-i.rinu[U:RDoc::Attr[ iI" header:EFI"Rack::Response#header;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/response.rb;FPK!^ ٱRack/Response/set_cookie-i.rinu[U:RDoc::AnyMethod[iI"set_cookie:EFI"Rack::Response#set_cookie;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(key, value);FI"lib/rack/response.rb;FPK!ƧRRack/Response/redirect-i.rinu[U:RDoc::AnyMethod[iI" redirect:EFI"Rack::Response#redirect;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(target, status=302);FI"lib/rack/response.rb;FPK!!Rack/Response/%5b%5d-i.rinu[U:RDoc::AnyMethod[iI"[]:EFI"Rack::Response#[];FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (key);FI"lib/rack/response.rb;FPK!o688Rack/Response/cdesc-Response.rinu[U:RDoc::NormalClass[iI" Response:EFI"Rack::Response;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"DRack::Response provides a convenient interface to create a Rack;FI"response.;Fo:RDoc::Markup::BlankLineo; ;[I"BIt allows setting of headers and cookies, and provides useful;FI".defaults (a OK response containing HTML).;F@o; ;[ I"FYou can use Response#write to iteratively generate your response,;FI"Dbut note that this is buffered by Rack::Response until you call;FI"G+finish+. +finish+ however can take a block inside which calls to;FI"4+write+ are synchronous with the Rack response.;F@o; ;[I"DYour application's +call+ should end returning Response#finish.;F: @fileI"lib/rack/response.rb;F; 0[ [ I" body;FI"RW;F: publicF@ [ I" header;FI"R;F; F@ [ I" headers;F@'; F@ [ I" length;FI"RW;F; F@ [ I" status;FI"RW;F; F@ [[I" CHUNKED;Fo;;[; 0@ [I"TRANSFER_ENCODING;Fo;;[; 0@ [[I" Helpers;Fo;;[; 0@ [[I" class;F[[; [[I"new;F@ [:protected[[: private[[I" instance;F[[; [[I"[];F@ [I"[]=;F@ [I" close;F@ [I"delete_cookie;F@ [I" each;F@ [I" empty?;F@ [I" finish;F@ [I" redirect;F@ [I"set_cookie;F@ [I" to_a;F@ [I" to_ary;F@ [I" write;F@ [; [[;[PK!邇Rack/Response/finish-i.rinu[U:RDoc::AnyMethod[iI" finish:EFI"Rack::Response#finish;FF: publico:RDoc::Markup::Document: @parts[: @file000[[I" to_a;Fo;; [; 0[I" to_ary;Fo;; [; 0I" (&block);FI"lib/rack/response.rb;FPK!;Rack/Response/each-i.rinu[U:RDoc::AnyMethod[iI" each:EFI"Rack::Response#each;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(&callback);FI"lib/rack/response.rb;FPK!=iJRack/Response/length-i.rinu[U:RDoc::Attr[ iI" length:EFI"Rack::Response#length;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/response.rb;FPK!'[Rack/Response/body-i.rinu[U:RDoc::Attr[ iI" body:EFI"Rack::Response#body;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/response.rb;FPK!:IIRack/Response/write-i.rinu[U:RDoc::AnyMethod[iI" write:EFI"Rack::Response#write;FF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I".Append to body and update Content-Length.;Fo:RDoc::Markup::BlankLineo; ; [I"5NOTE: Do not mix #write and direct #body access!;F: @file000[I" (str);FI"lib/rack/response.rb;FPK!wRack/Response/status-i.rinu[U:RDoc::Attr[ iI" status:EFI"Rack::Response#status;FI"RW;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/response.rb;FPK!Rack/Response/close-i.rinu[U:RDoc::AnyMethod[iI" close:EFI"Rack::Response#close;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"();FI"lib/rack/response.rb;FPK!Rack/Response/headers-i.rinu[U:RDoc::Attr[ iI" headers:EFI"Rack::Response#headers;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/response.rb;FPK!Z{Rack/Response/to_a-i.rinu[U:RDoc::AnyMethod[iI" to_a:EFI"Rack::Response#to_a;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (&block);FI"lib/rack/response.rb;FPK!(VhRack/Response/%5b%5d%3d-i.rinu[U:RDoc::AnyMethod[iI"[]=:EFI"Rack::Response#[]=;FF: publico:RDoc::Markup::Document: @parts[: @file000[I"(key, value);FI"lib/rack/response.rb;FPK!\*Rack/ForwardRequest/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::ForwardRequest::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"(url, env={});FI"lib/rack/recursive.rb;FPK!duHH+Rack/ForwardRequest/cdesc-ForwardRequest.rinu[U:RDoc::NormalClass[iI"ForwardRequest:EFI"Rack::ForwardRequest;FI"Exception;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"FRack::ForwardRequest gets caught by Rack::Recursive and redirects;FI"-the current request to the app at +url+.;Fo:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim;[I"+raise ForwardRequest.new("/not-found");F: @fileI"lib/rack/recursive.rb;F; 0[[ I"env;FI"R;F: publicF@[ I"url;F@; F@[[[[I" class;F[[; [[I"new;F@[:protected[[: private[[I" instance;F[[; [[;[[;[PK!gTV;Rack/ForwardRequest/env-i.rinu[U:RDoc::Attr[ iI"env:EFI"Rack::ForwardRequest#env;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/recursive.rb;FPK!a_ÖRack/ForwardRequest/url-i.rinu[U:RDoc::Attr[ iI"url:EFI"Rack::ForwardRequest#url;FI"R;F: publico:RDoc::Markup::Document: @parts[: @file0FI"lib/rack/recursive.rb;FPK!}%Rack/ContentType/cdesc-ContentType.rinu[U:RDoc::NormalClass[iI"ContentType:EFI"Rack::ContentType;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"DSets the Content-Type header on responses which don't have one.;Fo:RDoc::Markup::BlankLineo; ;[I"Builder Usage:;Fo:RDoc::Markup::Verbatim;[I")use Rack::ContentType, "text/plain" ;Fo; ;[I"GWhen no content type argument is provided, "text/html" is assumed.;F: @fileI"lib/rack/content_type.rb;F; 0[[[[I"Rack::Utils;Fo;;[; 0@[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[;[[;[PK!sr>Rack/ContentType/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::ContentType::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"&(app, content_type = "text/html");FI"lib/rack/content_type.rb;FPK!g7Rack/ContentType/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::ContentType#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/content_type.rb;FPK!IRack/ETag/cdesc-ETag.rinu[U:RDoc::NormalClass[iI" ETag:EFI"Rack::ETag;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"=Automatically sets the ETag header on all String bodies.;Fo:RDoc::Markup::BlankLineo; ;[I"OThe ETag header is skipped if ETag or Last-Modified headers are sent or if;FI"Ka sendfile body (body.responds_to :to_path) is given (since such cases;FI"(should be handled by apache/nginx).;F@o; ;[I"NOn initialization, you can pass two parameters: a Cache-Control directive;FI"Kused when Etag is absent and a directive when it is present. The first;FI"Xdefaults to nil, while the second defaults to "max-age=0, private, must-revalidate";F: @fileI"lib/rack/etag.rb;F; 0[[[I"ETAG_STRING;Fo;;[; 0@[I"DEFAULT_CACHE_CONTROL;Fo;;[; 0@[[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[;[PK!jRack/ETag/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::ETag::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I"I(app, no_cache_control = nil, cache_control = DEFAULT_CACHE_CONTROL);FI"lib/rack/etag.rb;FPK! OݤRack/ETag/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::ETag#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/etag.rb;FPK!\Rack/ContentLength/new-c.rinu[U:RDoc::AnyMethod[iI"new:EFI"Rack::ContentLength::new;FT: publico:RDoc::Markup::Document: @parts[: @file000[I" (app);FI"lib/rack/content_length.rb;FPK!:)Rack/ContentLength/cdesc-ContentLength.rinu[U:RDoc::NormalClass[iI"ContentLength:EFI"Rack::ContentLength;FI" Object;Fo:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I"JSets the Content-Length header on responses with fixed-length bodies.;F: @fileI"lib/rack/content_length.rb;F; 0[[[[I"Rack::Utils;Fo;;[; 0@[[I" class;F[[: public[[I"new;F@[:protected[[: private[[I" instance;F[[; [[I" call;F@[; [[; [PK!:VRack/ContentLength/call-i.rinu[U:RDoc::AnyMethod[iI" call:EFI"Rack::ContentLength#call;FF: publico:RDoc::Markup::Document: @parts[: @file000[I" (env);FI"lib/rack/content_length.rb;FPK!-+EEcache.rinu[PK![oFF Ecreated.ridnu[PK!I::MUtask.rbnu[PK!4}TTZstore.rbnu[PK!Vnrr J[formatter.rbnu[PK!D9naa[paths.rbnu[PK!E## mdriver.rbnu[PK!/^  *WEBrick/HTTPResponse/cdesc-HTTPResponse.rinu[PK!&TWEBrick/HTTPResponse/setup_header-i.rinu[PK!-)BQWEBrick/HTTPResponse/rack-i.rinu[PK!t,wWEBrick/HTTPResponse/_rack_setup_header-i.rinu[PK!Qߗ WEBrick/cdesc-WEBrick.rinu[PK!ma FCGI/cdesc-FCGI.rinu[PK!N0,, FCGI/Stream/cdesc-Stream.rinu[PK!5 * FCGI/Stream/_rack_read_without_buffer-i.rinu[PK!H7CFCGI/Stream/read-i.rinu[PK!_bObject/cdesc-Object.rinu[PK! nuRack/ShowStatus/new-c.rinu[PK!f-#^Rack/ShowStatus/cdesc-ShowStatus.rinu[PK!I QRack/ShowStatus/call-i.rinu[PK!oM^<Rack/Recursive/_call-i.rinu[PK!N%'Rack/Recursive/include-i.rinu[PK!9)Rack/Recursive/new-c.rinu[PK!duFF!Rack/Recursive/cdesc-Recursive.rinu[PK!+ӳǠRack/Recursive/call-i.rinu[PK!0 pRack/MockResponse/%3d%7e-i.rinu[PK!r\\'lRack/MockResponse/cdesc-MockResponse.rinu[PK!HORack/MockResponse/errors-i.rinu[PK!D. Rack/MockResponse/empty%3f-i.rinu[PK!*w9!Rack/MockResponse/match-i.rinu[PK!w"B' "Rack/MockResponse/original_headers-i.rinu[PK!}S7#Rack/MockResponse/new-c.rinu[PK!myI$Rack/MockResponse/body-i.rinu[PK!®+/%Rack/Multipart/UploadedFile/local_path-i.rinu[PK!vi.O&Rack/Multipart/UploadedFile/respond_to%3f-i.rinu[PK!v%y'Rack/Multipart/UploadedFile/path-i.rinu[PK!ek$(Rack/Multipart/UploadedFile/new-c.rinu[PK!mLR1)Rack/Multipart/UploadedFile/cdesc-UploadedFile.rinu[PK!$6--2+Rack/Multipart/UploadedFile/original_filename-i.rinu[PK![  -|-Rack/Multipart/UploadedFile/content_type-i.rinu[PK!nK#.Rack/Multipart/parse_multipart-c.rinu[PK!~  G/Rack/Multipart/MultipartPartLimitError/cdesc-MultipartPartLimitError.rinu[PK!Dm!t1Rack/Multipart/Generator/new-c.rinu[PK!T2/+++2Rack/Multipart/Generator/cdesc-Generator.rinu[PK!h"4Rack/Multipart/Generator/dump-i.rinu[PK!g2#5Rack/Multipart/build_multipart-c.rinu[PK!ۃ!/6Rack/Multipart/cdesc-Multipart.rinu[PK!_ :Rack/Multipart/Parser/new-c.rinu[PK!BZݮ 6;Rack/Multipart/Parser/parse-i.rinu[PK!v!4<Rack/Multipart/Parser/create-c.rinu[PK!jt~%9=Rack/Multipart/Parser/cdesc-Parser.rinu[PK!@hk7?Rack/Logger/new-c.rinu[PK!_Mqq,@Rack/Logger/cdesc-Logger.rinu[PK!ÐȚARack/Logger/call-i.rinu[PK!򠧖-BRack/ShowExceptions/prefers_plaintext%3f-i.rinu[PK!6v'CRack/ShowExceptions/dump_exception-i.rinu[PK!*LERack/ShowExceptions/new-c.rinu[PK! ERack/ShowExceptions/pretty-i.rinu[PK!#''+GRack/ShowExceptions/cdesc-ShowExceptions.rinu[PK!$ vJRack/ShowExceptions/call-i.rinu[PK!ֿ pp{KRack/Request/POST-i.rinu[PK!II  1MRack/Request/delete%3f-i.rinu[PK!4QNRack/Request/ssl%3f-i.rinu[PK!<(b!jORack/Request/accept_encoding-i.rinu[PK!`̍jPRack/Request/query_string-i.rinu[PK!d\2™aQRack/Request/path-i.rinu[PK!/-ަ@RRack/Request/path_info%3d-i.rinu[PK!?I4SRack/Request/referer-i.rinu[PK!wTRack/Request/scheme-i.rinu[PK!  \URack/Request/unlink%3f-i.rinu[PK!1VRack/Request/GET-i.rinu[PK!}>WRack/Request/host-i.rinu[PK!`2  XRack/Request/trace%3f-i.rinu[PK!*ZRack/Request/params-i.rinu[PK!С[Rack/Request/fullpath-i.rinu[PK!@\Rack/Request/post%3f-i.rinu[PK!Қg,!-^Rack/Request/content_charset-i.rinu[PK!Y כL`Rack/Request/new-c.rinu[PK!%i::,aRack/Request/media_type-i.rinu[PK!0}۬cRack/Request/parse_query-i.rinu[PK!%Y*dRack/Request/parse_http_accept_header-i.rinu[PK!j#\[ eRack/Request/host_with_port-i.rinu[PK!zxfRack/Request/user_agent-i.rinu[PK!l伙gRack/Request/xhr%3f-i.rinu[PK!mhRack/Request/port-i.rinu[PK!<ߖ}iRack/Request/get%3f-i.rinu[PK![9 jRack/Request/request_method-i.rinu[PK!rʭ kRack/Request/content_length-i.rinu[PK!N+_ElRack/Request/link%3f-i.rinu[PK!ɼnRack/Request/form_data%3f-i.rinu[PK!"[qRack/Request/ip-i.rinu[PK!HIqRack/Request/session-i.rinu[PK! rRack/Request/referrer-i.rinu[PK!sRack/Request/%5b%5d-i.rinu[PK!!tRack/Request/parse_multipart-i.rinu[PK!0X"uRack/Request/trusted_proxy%3f-i.rinu[PK!֝vRack/Request/env-i.rinu[PK!:tؘ  wRack/Request/patch%3f-i.rinu[PK!2  DyRack/Request/update_param-i.rinu[PK!I={Rack/Request/options%3f-i.rinu[PK!ZU!|Rack/Request/session_options-i.rinu[PK! -}Rack/Request/reject_trusted_ip_addresses-i.rinu[PK!gX*Rack/Request/script_name-i.rinu[PK!Z32Rack/Request/head%3f-i.rinu[PK!&#nRack/Request/media_type_params-i.rinu[PK!mm8!܃Rack/Request/accept_language-i.rinu[PK! xXX%YRack/Handler/Mongrel/cdesc-Mongrel.rinu[PK!A)Rack/Handler/Mongrel/new-c.rinu[PK!߽'Rack/Handler/Mongrel/valid_options-c.rinu[PK!ܢvRack/Handler/Mongrel/run-c.rinu[PK!s!$Rack/Handler/Mongrel/process-i.rinu[PK!$  ;6Rack/Handler/SwiftipliedMongrel/cdesc-SwiftipliedMongrel.rinu[PK!ܫ{ͬRack/Handler/default-c.rinu[PK!vL!!Rack/Handler/Thin/cdesc-Thin.rinu[PK!$Rack/Handler/Thin/valid_options-c.rinu[PK!jRack/Handler/Thin/run-c.rinu[PK!#Rack/Handler/cdesc-Handler.rinu[PK!މ#:Rack/Handler/FastCGI/send_body-c.rinu[PK!o&KRack/Handler/FastCGI/send_headers-c.rinu[PK!'pRack/Handler/FastCGI/valid_options-c.rinu[PK!sRack/Handler/FastCGI/run-c.rinu[PK!K%ee%Rack/Handler/FastCGI/cdesc-FastCGI.rinu[PK!eW*YCRack/Handler/FastCGI/serve-c.rinu[PK!ËȯKRack/Handler/register-c.rinu[PK!ym DRack/Handler/LSWS/send_body-c.rinu[PK!X #GRack/Handler/LSWS/send_headers-c.rinu[PK!DD^Rack/Handler/LSWS/cdesc-LSWS.rinu[PK!<Rack/Handler/LSWS/run-c.rinu[PK!ERack/Handler/LSWS/serve-c.rinu[PK!`f&Rack/Handler/SCGI/process_request-i.rinu[PK!|Rack/Handler/SCGI/new-c.rinu[PK!e Rack/Handler/SCGI/app-i.rinu[PK!"$Rack/Handler/SCGI/valid_options-c.rinu[PK!`JllRack/Handler/SCGI/cdesc-SCGI.rinu[PK!6Rack/Handler/SCGI/run-c.rinu[PK!(Rack/Handler/get-c.rinu[PK!5LބRack/Handler/try_require-c.rinu[PK!&3cRack/Handler/EventedMongrel/cdesc-EventedMongrel.rinu[PK!  Rack/Head/new-c.rinu[PK!Q*Rack/Head/cdesc-Head.rinu[PK!xRack/Head/call-i.rinu[PK!$$QRack/Utils/select_best_encoding-c.rinu[PK! ORack/Utils/bytesize-c.rinu[PK!nBkRack/Utils/key_space_limit-c.rinu[PK!nK)]Rack/Utils/Multipart/parse_multipart-c.rinu[PK!g2)mRack/Utils/Multipart/build_multipart-c.rinu[PK!L6'Rack/Utils/Multipart/cdesc-Multipart.rinu[PK!TO!uRack/Utils/HeaderHash/delete-i.rinu[PK!+ lRack/Utils/HeaderHash/merge-i.rinu[PK!X|L"dRack/Utils/HeaderHash/replace-i.rinu[PK!3!%bRack/Utils/HeaderHash/has_key%3f-i.rinu[PK!ߵaRack/Utils/HeaderHash/new-c.rinu[PK!l!VRack/Utils/HeaderHash/key%3f-i.rinu[PK!I%IRack/Utils/HeaderHash/include%3f-i.rinu[PK!ca$Rack/Utils/HeaderHash/member%3f-i.rinu[PK!!a!Rack/Utils/HeaderHash/%5b%5d-i.rinu[PK!k}Rack/Utils/HeaderHash/each-i.rinu[PK!U"Rack/Utils/HeaderHash/to_hash-i.rinu[PK!R#Rack/Utils/HeaderHash/merge%21-i.rinu[PK!CIWW)Rack/Utils/HeaderHash/cdesc-HeaderHash.rinu[PK!'u:֣$MRack/Utils/HeaderHash/%5b%5d%3d-i.rinu[PK!HFDRack/Utils/parse_query-c.rinu[PK!N=#|Rack/Utils/Context/cdesc-Context.rinu[PK!JRack/Utils/Context/new-c.rinu[PK!wᨱRack/Utils/Context/context-i.rinu[PK!1Rack/Utils/Context/app-i.rinu[PK!kdRack/Utils/Context/for-i.rinu[PK!RyRack/Utils/Context/call-i.rinu[PK!x!fRack/Utils/Context/recontext-i.rinu[PK!ASbRack/Utils/rfc2109-c.rinu[PK!b1`(Rack/Utils/secure_compare-c.rinu[PK!~Ez#Rack/Utils/params_hash_type%3f-c.rinu[PK!VWRack/Utils/build_query-c.rinu[PK! ++ Rack/Utils/escape_path-c.rinu[PK! Rack/Utils/status_code-c.rinu[PK!""" Rack/Utils/parse_nested_query-c.rinu[PK!baRack/Utils/q_values-c.rinu[PK!l&URack/Utils/OkJson/Error/cdesc-Error.rinu[PK!"vRack/Utils/OkJson/decode-i.rinu[PK!)Rack/Utils/OkJson/valenc-i.rinu[PK!,--!Rack/Utils/OkJson/cdesc-OkJson.rinu[PK!=wwQRack/Utils/OkJson/encode-i.rinu[PK!rm.Rack/Utils/OkJson/Utf8Error/cdesc-Utf8Error.rinu[PK!> $hRack/Utils/multipart_part_limit-c.rinu[PK!?iRack/Utils/InvalidParameterError/cdesc-InvalidParameterError.rinu[PK!ڂ"Rack/Utils/build_nested_query-c.rinu[PK!, Rack/Utils/cdesc-Utils.rinu[PK!n9(Rack/Utils/ParameterTypeError/cdesc-ParameterTypeError.rinu[PK!jZ+Rack/Utils/escape-c.rinu[PK!1,Rack/Utils/byte_ranges-c.rinu[PK!ۨ[$.Rack/Utils/set_cookie_header%21-c.rinu[PK!j[ 7/Rack/Utils/normalize_params-c.rinu[PK!-Y1Rack/Utils/KeySpaceConstrainedParams/new-c.rinu[PK!l{}02Rack/Utils/KeySpaceConstrainedParams/key%3f-i.rinu[PK!GŌ03Rack/Utils/KeySpaceConstrainedParams/%5b%5d-i.rinu[PK!zmmG4Rack/Utils/KeySpaceConstrainedParams/cdesc-KeySpaceConstrainedParams.rinu[PK!h86Rack/Utils/KeySpaceConstrainedParams/to_params_hash-i.rinu[PK!)@37Rack/Utils/KeySpaceConstrainedParams/%5b%5d%3d-i.rinu[PK!'8Rack/Utils/delete_cookie_header%21-c.rinu[PK!J9Rack/Utils/clean_path_info-c.rinu[PK!ၱ:Rack/Utils/escape_html-c.rinu[PK!'ɿV<Rack/Utils/rfc2822-c.rinu[PK!r==Rack/Utils/unescape-c.rinu[PK! uW@>Rack/Utils/best_q_match-c.rinu[PK!q!Q?Rack/Utils/param_depth_limit-c.rinu[PK!ΊI@Rack/URLMap/new-c.rinu[PK!YO+ARack/URLMap/remap-i.rinu[PK!HwҢ BRack/URLMap/cdesc-URLMap.rinu[PK!l/RISFRack/URLMap/call-i.rinu[PK!îX2GRack/RewindableInput/new-c.rinu[PK!ˁu-*HRack/RewindableInput/cdesc-RewindableInput.rinu[PK!hnLRack/RewindableInput/each-i.rinu[PK! 0lMRack/RewindableInput/read-i.rinu[PK!d iNRack/RewindableInput/rewind-i.rinu[PK!ѶgORack/RewindableInput/close-i.rinu[PK!@\)QRack/RewindableInput/Tempfile/_close-i.rinu[PK!E/RRack/RewindableInput/Tempfile/cdesc-Tempfile.rinu[PK!jӪTRack/RewindableInput/gets-i.rinu[PK!(->(URack/Auth/Basic/Request/credentials-i.rinu[PK!' &URR(VRack/Auth/Basic/Request/cdesc-Request.rinu[PK!33%UXRack/Auth/Basic/Request/basic%3f-i.rinu[PK!f8v!%WYRack/Auth/Basic/Request/username-i.rinu[PK!zz]ZRack/Auth/Basic/cdesc-Basic.rinu[PK!%]Rack/Auth/Basic/call-i.rinu[PK!md+%^Rack/Auth/AbstractRequest/scheme-i.rinu[PK!?ڹ%_Rack/Auth/AbstractRequest/params-i.rinu[PK!62-`Rack/Auth/AbstractRequest/cdesc-AbstractRequest.rinu[PK!("4bRack/Auth/AbstractRequest/new-c.rinu[PK!_& &=cRack/Auth/AbstractRequest/request-i.rinu[PK!XN$NdRack/Auth/AbstractRequest/parts-i.rinu[PK!7Ŀ*YeRack/Auth/AbstractRequest/provided%3f-i.rinu[PK!`2rfRack/Auth/AbstractHandler/cdesc-AbstractHandler.rinu[PK!W$hRack/Auth/AbstractHandler/realm-i.rinu[PK!d]"iRack/Auth/AbstractHandler/new-c.rinu[PK! kRack/Auth/cdesc-Auth.rinu[PK!e_+lRack/Auth/Digest/Request/respond_to%3f-i.rinu[PK!H,,npRack/Auth/Digest/Request/method_missing-i.rinu[PK! 5h$qRack/Auth/Digest/Request/method-i.rinu[PK!Q)rRack/Auth/Digest/Request/cdesc-Request.rinu[PK!Q\'tRack/Auth/Digest/Request/digest%3f-i.rinu[PK!-O*uRack/Auth/Digest/MD5/passwords_hashed-i.rinu[PK!=,vRack/Auth/Digest/MD5/new-c.rinu[PK!YT-wRack/Auth/Digest/MD5/passwords_hashed%3f-i.rinu[PK!}WJJ!yRack/Auth/Digest/MD5/cdesc-MD5.rinu[PK!|Rack/Auth/Digest/MD5/call-i.rinu[PK!i[ }Rack/Auth/Digest/MD5/opaque-i.rinu[PK!qoq"~Rack/Auth/Digest/Nonce/digest-i.rinu[PK!ϵʞ$Rack/Auth/Digest/Nonce/valid%3f-i.rinu[PK! V Rack/Auth/Digest/Nonce/new-c.rinu[PK! )"&ρRack/Auth/Digest/Nonce/time_limit-c.rinu[PK!CVV$؂Rack/Auth/Digest/Nonce/fresh%3f-i.rinu[PK!c0HH%߃Rack/Auth/Digest/Nonce/cdesc-Nonce.rinu[PK!3$|Rack/Auth/Digest/Nonce/stale%3f-i.rinu[PK!N'Rack/Auth/Digest/Nonce/private_key-c.rinu[PK!iȯ Rack/Auth/Digest/Nonce/to_s-i.rinu[PK!ׯ !Rack/Auth/Digest/Nonce/parse-c.rinu[PK!XC Rack/Auth/Digest/Params/new-c.rinu[PK!|$Rack/Auth/Digest/Params/dequote-c.rinu[PK!vf#Rack/Auth/Digest/Params/%5b%5d-i.rinu[PK!!Rack/Auth/Digest/Params/to_s-i.rinu[PK!Ú"Rack/Auth/Digest/Params/parse-c.rinu[PK!_/Rack/Auth/Digest/Params/split_header_value-c.rinu[PK!/b'Rack/Auth/Digest/Params/cdesc-Params.rinu[PK!Mn4"Rack/Auth/Digest/Params/quote-i.rinu[PK!t.&Rack/Auth/Digest/Params/%5b%5d%3d-i.rinu[PK!L4: Rack/Auth/Digest/cdesc-Digest.rinu[PK!n1%Rack/TempfileReaper/new-c.rinu[PK!bb+Rack/TempfileReaper/cdesc-TempfileReaper.rinu[PK!=ؚ֫Rack/TempfileReaper/call-i.rinu[PK!WTЛRack/Sendfile/new-c.rinu[PK!b>>ϜRack/Sendfile/cdesc-Sendfile.rinu[PK!#Վ\Rack/Sendfile/call-i.rinu[PK!ja&ARack/Lint/LintError/cdesc-LintError.rinu[PK!;Rack/Lint/new-c.rinu[PK!Xjr,YRack/Lint/ErrorWrapper/cdesc-ErrorWrapper.rinu[PK!0oRack/Lint/cdesc-Lint.rinu[PK!7*,wRack/Lint/InputWrapper/cdesc-InputWrapper.rinu[PK!cfE.Rack/Lint/HijackWrapper/cdesc-HijackWrapper.rinu[PK!LSd Rack/CommonLogger/new-c.rinu[PK!>kee'Rack/CommonLogger/cdesc-CommonLogger.rinu[PK!xSRack/CommonLogger/call-i.rinu[PK!eV$Rack/Deflater/DeflateStream/new-c.rinu[PK!s9%Rack/Deflater/DeflateStream/each-i.rinu[PK!.jzYY2пRack/Deflater/DeflateStream/cdesc-DeflateStream.rinu[PK!Ӿ&Rack/Deflater/DeflateStream/close-i.rinu[PK!)Rack/Deflater/new-c.rinu[PK!#KKRack/Deflater/cdesc-Deflater.rinu[PK!zBAA,]Rack/Deflater/GzipStream/cdesc-GzipStream.rinu[PK!%[!Rack/Deflater/GzipStream/new-c.rinu[PK!#"Rack/Deflater/GzipStream/each-i.rinu[PK!# #Rack/Deflater/GzipStream/write-i.rinu[PK!IV#Rack/Deflater/GzipStream/close-i.rinu[PK!!Rack/Deflater/call-i.rinu[PK!vB|Rack/ConditionalGet/new-c.rinu[PK!DD+Rack/ConditionalGet/cdesc-ConditionalGet.rinu[PK!xàpRack/ConditionalGet/call-i.rinu[PK!F̼gRack/Reloader/new-c.rinu[PK!Kx''iRack/Reloader/safe_load-i.rinu[PK!vORack/Reloader/reload%21-i.rinu[PK!bӛ** Rack/Reloader/Stat/cdesc-Stat.rinu[PK! #qa#SRack/Reloader/Stat/figure_path-i.rinu[PK!ԡ )Rack/Reloader/Stat/rotation-i.rinu[PK!rd!4Rack/Reloader/Stat/safe_stat-i.rinu[PK!au4Rack/Reloader/cdesc-Reloader.rinu[PK!d7Rack/Reloader/call-i.rinu[PK!1-RRack/File/_call-i.rinu[PK!|Rack/File/path-i.rinu[PK!LO'Rack/File/new-c.rinu[PK!aRack/File/root-i.rinu[PK!͑KRack/File/cache_control-i.rinu[PK!0ӝ{Rack/File/each-i.rinu[PK!d[Rack/File/to_path-i.rinu[PK!R1Rack/File/call-i.rinu[PK!*Z Rack/File/serving-i.rinu[PK!Rack/File/cdesc-File.rinu[PK!.Rack/release-c.rinu[PK!<!Rack/Builder/new_from_string-c.rinu[PK!zr#Rack/Builder/new-c.rinu[PK!AA}Rack/Builder/warmup-i.rinu[PK!+ERack/Builder/parse_file-c.rinu[PK!YRack/Builder/cdesc-Builder.rinu[PK!zRack/Builder/run-i.rinu[PK! /Rack/Builder/map-i.rinu[PK!`m!yRack/Builder/to_app-i.rinu[PK!6js{{Rack/Builder/use-i.rinu[PK!AMRack/Builder/call-i.rinu[PK! /Rack/Builder/app-c.rinu[PK! JX%Rack/Static/can_serve-i.rinu[PK!^ Rack/Static/new-c.rinu[PK!?! Rack/Static/applicable_rules-i.rinu[PK!! P Rack/Static/cdesc-Static.rinu[PK!zɹ$BRack/Static/overwrite_file_path-i.rinu[PK!ϧORack/Static/route_file-i.rinu[PK!(ARack/Static/call-i.rinu[PK!=*u Rack/cdesc-Rack.rinu[PK!"K!Rack/Runtime/new-c.rinu[PK!1"Rack/Runtime/cdesc-Runtime.rinu[PK!NJ0$Rack/Runtime/call-i.rinu[PK!^Ӻ(%Rack/Session/Cookie/Identity/decode-i.rinu[PK!֬>.&Rack/Session/Cookie/Identity/cdesc-Identity.rinu[PK!WĹ((Rack/Session/Cookie/Identity/encode-i.rinu[PK!|%>)Rack/Session/Cookie/new-c.rinu[PK!\#*Rack/Session/Cookie/cdesc-Cookie.rinu[PK!{2-2Rack/Session/Cookie/Base64/JSON/cdesc-JSON.rinu[PK!M>+f4Rack/Session/Cookie/Base64/JSON/decode-i.rinu[PK!+~5Rack/Session/Cookie/Base64/JSON/encode-i.rinu[PK!}}*6Rack/Session/Cookie/Base64/cdesc-Base64.rinu[PK!opa&m8Rack/Session/Cookie/Base64/decode-i.rinu[PK!W.z9Rack/Session/Cookie/Base64/Marshal/decode-i.rinu[PK!&.3:Rack/Session/Cookie/Base64/Marshal/cdesc-Marshal.rinu[PK!.<Rack/Session/Cookie/Base64/Marshal/encode-i.rinu[PK!90.=Rack/Session/Cookie/Base64/ZipJSON/decode-i.rinu[PK!X4LL3>Rack/Session/Cookie/Base64/ZipJSON/cdesc-ZipJSON.rinu[PK!.@Rack/Session/Cookie/Base64/ZipJSON/encode-i.rinu[PK!T &ARack/Session/Cookie/Base64/encode-i.rinu[PK!ABRack/Session/Cookie/coder-i.rinu[PK!]|CRack/Session/Pool/mutex-i.rinu[PK!ByDRack/Session/Pool/new-c.rinu[PK!Tt"ERack/Session/Pool/set_session-i.rinu[PK!0V FRack/Session/Pool/with_lock-i.rinu[PK!wlGRack/Session/Pool/pool-i.rinu[PK!uIZHRack/Session/Pool/cdesc-Pool.rinu[PK! |Ӵ#MRack/Session/Pool/generate_sid-i.rinu[PK!侺"NRack/Session/Pool/get_session-i.rinu[PK!B9&ORack/Session/Pool/destroy_session-i.rinu[PK!)0PRack/Session/cdesc-Session.rinu[PK!‡9QQ'QRack/Session/Abstract/cdesc-Abstract.rinu[PK!DB-SRack/Session/Abstract/SessionHash/delete-i.rinu[PK!rv-TRack/Session/Abstract/SessionHash/values-i.rinu[PK!_J_,URack/Session/Abstract/SessionHash/clear-i.rinu[PK!`/VRack/Session/Abstract/SessionHash/empty%3f-i.rinu[PK!'M. XRack/Session/Abstract/SessionHash/replace-i.rinu[PK!jQ10YRack/Session/Abstract/SessionHash/has_key%3f-i.rinu[PK!Z0ZRack/Session/Abstract/SessionHash/exists%3f-i.rinu[PK!Q*[Rack/Session/Abstract/SessionHash/new-c.rinu[PK!`e-\Rack/Session/Abstract/SessionHash/key%3f-i.rinu[PK!-,]Rack/Session/Abstract/SessionHash/store-i.rinu[PK!^f1 _Rack/Session/Abstract/SessionHash/include%3f-i.rinu[PK!L*5`Rack/Session/Abstract/SessionHash/set-c.rinu[PK!h.VaRack/Session/Abstract/SessionHash/destroy-i.rinu[PK!Th-vbRack/Session/Abstract/SessionHash/%5b%5d-i.rinu[PK!gAO,cRack/Session/Abstract/SessionHash/fetch-i.rinu[PK!c(+dRack/Session/Abstract/SessionHash/each-i.rinu[PK![+eRack/Session/Abstract/SessionHash/find-c.rinu[PK!*5.fRack/Session/Abstract/SessionHash/options-i.rinu[PK!.hRack/Session/Abstract/SessionHash/to_hash-i.rinu[PK!L)+Rack/Session/Abstract/ID/key-i.rinu[PK!Ġ 6Rack/Session/Memcache/mutex-i.rinu[PK!'M#*Rack/Session/Memcache/new-c.rinu[PK!^`g&2Rack/Session/Memcache/set_session-i.rinu[PK!Q`п$gRack/Session/Memcache/with_lock-i.rinu[PK!0AczRack/Session/Memcache/pool-i.rinu[PK!؋K'kRack/Session/Memcache/generate_sid-i.rinu[PK!a&~Rack/Session/Memcache/get_session-i.rinu[PK!CpF*Rack/Session/Memcache/destroy_session-i.rinu[PK!B88'ʌRack/Session/Memcache/cdesc-Memcache.rinu[PK!͢YRack/NullLogger/info-i.rinu[PK! 3WRack/NullLogger/progname-i.rinu[PK!BQvKRack/NullLogger/info%3f-i.rinu[PK!^~ 8Rack/NullLogger/progname%3d-i.rinu[PK!59Rack/NullLogger/debug-i.rinu[PK! u\ɨ:Rack/NullLogger/level%3d-i.rinu[PK!lա/Rack/NullLogger/new-c.rinu[PK!z2%Rack/NullLogger/sev_threshold%3d-i.rinu[PK!ߣ.A#-Rack/NullLogger/cdesc-NullLogger.rinu[PK!le|NRack/NullLogger/warn-i.rinu[PK!p|LRack/NullLogger/fatal%3f-i.rinu[PK!6S<Rack/NullLogger/add-i.rinu[PK!m,?PRack/NullLogger/error-i.rinu[PK!]Pa#'QRack/NullLogger/datetime_format%3d-i.rinu[PK!Xd!nRack/NullLogger/formatter%3d-i.rinu[PK!CsRack/NullLogger/error%3f-i.rinu[PK!c3cRack/NullLogger/%3c%3c-i.rinu[PK!_'LRack/NullLogger/formatter-i.rinu[PK!@ӡCRack/NullLogger/level-i.rinu[PK!`_,$.Rack/NullLogger/datetime_format-i.rinu[PK! u'7Rack/NullLogger/warn%3f-i.rinu[PK![ѱ"$Rack/NullLogger/sev_threshold-i.rinu[PK!Ti'Rack/NullLogger/close-i.rinu[PK!8Rack/NullLogger/call-i.rinu[PK!*>Rack/NullLogger/unknown-i.rinu[PK!(Rack/NullLogger/fatal-i.rinu[PK!/Rack/NullLogger/debug%3f-i.rinu[PK!Rack/Lobster/cdesc-Lobster.rinu[PK!SRack/Lobster/call-i.rinu[PK!/&+ñRack/MethodOverride/cdesc-MethodOverride.rinu[PK!#1Rack/MethodOverride/new-c.rinu[PK!eJ(Rack/MethodOverride/method_override-i.rinu[PK!-CRack/MethodOverride/call-i.rinu[PK!*!Rack/Server/server-i.rinu[PK!'OvvRack/Server/start-c.rinu[PK!cPRack/Server/new-c.rinu[PK!#Rack/Server/logging_middleware-c.rinu[PK!ӏX?% Rack/Server/Options/handler_opts-i.rinu[PK!""$Rack/Server/Options/cdesc-Options.rinu[PK!hpͨ!Rack/Server/Options/parse%21-i.rinu[PK!"ѕoRack/Server/app-i.rinu[PK!Jb'_Rack/Server/middleware-c.rinu[PK!z;NRack/Server/options-i.rinu[PK!uc )Rack/Server/default_options-i.rinu[PK!Nh&Rack/Server/middleware-i.rinu[PK!Rack/Server/start-i.rinu[PK!UVRack/Server/cdesc-Server.rinu[PK!"2;Rack/Server/default_middleware_by_environment-c.rinu[PK!!EEoRack/Cascade/cdesc-Cascade.rinu[PK!ERack/Cascade/new-c.rinu[PK!ٴ|Rack/Cascade/apps-i.rinu[PK!xRack/Cascade/include%3f-i.rinu[PK!~ҰRack/Cascade/add-i.rinu[PK!pARack/Cascade/%3c%3c-i.rinu[PK!л쪜Rack/Cascade/call-i.rinu[PK!ѪpRack/MockRequest/delete-i.rinu[PK!#a fRack/MockRequest/patch-i.rinu[PK!AZYRack/MockRequest/env_for-c.rinu[PK!vRack/MockRequest/new-c.rinu[PK!CIRack/MockRequest/request-i.rinu[PK!ϝD6Rack/MockRequest/put-i.rinu[PK!hSRack/MockRequest/get-i.rinu[PK!_3gg'}Rack/MockRequest/parse_uri_rfc2396-c.rinu[PK!p03;Rack/MockRequest/FatalWarning/cdesc-FatalWarning.rinu[PK!mZRack/MockRequest/head-i.rinu[PK!\&Rack/MockRequest/options-i.rinu[PK!%{_lEE1Rack/MockRequest/FatalWarner/cdesc-FatalWarner.rinu[PK!NP(%Rack/MockRequest/FatalWarner/string-i.rinu[PK!qY0'(Rack/MockRequest/FatalWarner/flush-i.rinu[PK!f&(Rack/MockRequest/FatalWarner/puts-i.rinu[PK!tҰ',Rack/MockRequest/FatalWarner/write-i.rinu[PK!?%3Rack/MockRequest/cdesc-MockRequest.rinu[PK!栩{Rack/MockRequest/post-i.rinu[PK!Iª88kRack/Config/cdesc-Config.rinu[PK!5ٱRack/Config/new-c.rinu[PK!XRack/Config/call-i.rinu[PK!DثRack/version-c.rinu[PK!r-GRack/Directory/_call-i.rinu[PK!#Rack/Directory/check_forbidden-i.rinu[PK!̩VRack/Directory/path-i.rinu[PK!W[Rack/Directory/new-c.rinu[PK!dRack/Directory/root-i.rinu[PK!k"uRack/Directory/list_directory-i.rinu[PK!T``!xRack/Directory/cdesc-Directory.rinu[PK!)Rack/Directory/each-i.rinu[PK!P#Rack/Directory/filesize_format-i.rinu[PK!WoBRack/Directory/call-i.rinu[PK!_ǦRack/Directory/files-i.rinu[PK!-$Rack/Directory/entity_not_found-i.rinu[PK! l??Rack/Directory/list_path-i.rinu[PK!_Rack/ContentType/new-c.rinu[PK!g7`Rack/ContentType/call-i.rinu[PK!IaRack/ETag/cdesc-ETag.rinu[PK!jeRack/ETag/new-c.rinu[PK! OݤfRack/ETag/call-i.rinu[PK!\gRack/ContentLength/new-c.rinu[PK!:)hRack/ContentLength/cdesc-ContentLength.rinu[PK!:VjRack/ContentLength/call-i.rinu[PK``k