Upgrading rack 1 to 2
Unknown1.6.13 → 2.2.25Security18New1Changed1Fixed2
Fetching 56 releases from GitHub…10 / 56
SecurityCVE-2026-26962 Improper unfolding of folded multipart headers preserves CRLF in parsed parameter values.CVE-2026-26962 ↗
UnknownUpgrade verdict
DepDelta is still reading the notes for 46 of 56 releases, so breaking changes can't be ruled out yet.
In plain terms
- DepDelta is still reading the release notes in this range, so it can't rule out breaking changes yet.
- This page updates as the notes come in.
Must act Top 3 of 18 that need code or config changes
Ruby requirement changed in 2.2.0: >= 0 → >= 2.3.0.
What you must change
Security18
CVE-2026-26962 Improper unfolding of folded multipart headers preserves CRLF in parsed parameter values.
CVE-2026-34763 Root directory disclosure via unescaped regex interpolation in Rack::Directory.
Rack::DirectoryModerate · CVSS 5.3CVE-2026-34230 Avoid O(n^2) algorithm in Rack::Utils.select_best_encoding which could lead to denial of service.
Rack::Utils.select_best_encodingHigh · CVSS 7.5CVE-2026-26961 Raise error for multipart requests with multiple boundary parameters.
Moderate · CVSS 5.3CVE-2026-34786 Rack::Static header_rules bypass via URL-encoded path mismatch.
Rack::Staticheader_rulesModerate · CVSS 5.3CVE-2026-34831 Content-Length mismatch in Rack::Files error responses.
Content-LengthRack::FilesModerate · CVSS 4.8CVE-2026-34826 Multipart byte range processing allows denial of service via excessive overlapping ranges.
Moderate · CVSS 5.3CVE-2026-34830 Rack::Sendfile header-based X-Accel-Mapping regex injection enables unauthorized X-Accel-Redirect.
Rack::SendfileX-Accel-MappingX-Accel-RedirectModerate · CVSS 5.9CVE-2026-34785 Rack::Static prefix matching can expose unintended files under the static root.
Rack::StaticHigh · CVSS 7.5CVE-2026-34829 Multipart parsing without Content-Length header allows unbounded chunked file uploads.
Content-LengthHigh · CVSS 7.5CVE-2026-25500 XSS injection via malicious filename in Rack::Directory.
Rack::DirectoryModerate · CVSS 5.4CVE-2026-22860 Directory traversal via root prefix bypass in Rack::Directory.
Rack::DirectoryHigh · CVSS 7.5CVE-2025-61780 Improper handling of headers in Rack::Sendfile may allow proxy bypass.
Rack::SendfileModerate · CVSS 5.8CVE-2025-61919 Unbounded read in Rack::Request form parsing can lead to memory exhaustion.
Rack::RequestHigh · CVSS 7.5CVE-2025-61772 Multipart parser buffers unbounded per-part headers, enabling DoS (memory exhaustion).
High · CVSS 7.5CVE-2025-61771 Multipart parser buffers large non‑file fields entirely in memory, enabling DoS (memory exhaustion).
High · CVSS 7.5CVE-2025-61770 Unbounded multipart preamble buffering enables DoS (memory exhaustion).
High · CVSS 7.5CVE-2025-59830 Unbounded parameter parsing in Rack::QueryParser can lead to memory exhaustion via semicolon-separated parameters.
Rack::QueryParserHigh · CVSS 7.5API changes
Generated by DepDelta from published Ruby source. Not mixed with prose notes.
- removed:
const URI.TBLDECWWWCOMP_ - removed:
const URI.TBLENCWWWCOMP_ - removed:
const URI.WFKV_ - removed:
module URI - removed:
static method URI.decode_www_form(_, _ = …) - removed:
static method URI.decode_www_form_component(_, _ = …) - removed:
static method URI.encode_www_form_component(_) - added:
const Rack.DELETE - added:
const Rack.ETAG - added:
const Rack.EXPIRES - added:
const Rack.File - added:
const Rack.HTTPS - added:
const Rack.HTTP_COOKIE - added:
const Rack.HTTP_HOST - added:
const Rack.HTTP_PORT - added:
const Rack.HTTP_VERSION - added:
const Rack.LINK - added:
const Rack.OPTIONS - added:
const Rack.PATCH - added:
const Rack.POST - added:
const Rack.PUT - added:
const Rack.RACK_ERRORS - added:
const Rack.RACK_HIJACK - added:
const Rack.RACK_HIJACK_IO - added:
const Rack.RACK_INPUT - added:
const Rack.RACK_IS_HIJACK - added:
const Rack.RACK_LOGGER - added:
const Rack.RACK_METHODOVERRIDE_ORIGINAL_METHOD - added:
const Rack.RACK_MULTIPART_BUFFER_SIZE - added:
const Rack.RACK_MULTIPART_TEMPFILE_FACTORY - added:
const Rack.RACK_MULTIPROCESS - added:
const Rack.RACK_MULTITHREAD - added:
const Rack.RACK_RECURSIVE_INCLUDE - added:
const Rack.RACK_REQUEST_COOKIE_HASH - added:
const Rack.RACK_REQUEST_COOKIE_STRING - added:
const Rack.RACK_REQUEST_FORM_HASH - added:
const Rack.RACK_REQUEST_FORM_INPUT - added:
const Rack.RACK_REQUEST_FORM_VARS - added:
const Rack.RACK_REQUEST_QUERY_HASH - added:
const Rack.RACK_REQUEST_QUERY_STRING - added:
const Rack.RACK_RUNONCE - added:
const Rack.RACK_SESSION - added:
const Rack.RACK_SESSION_OPTIONS - added:
const Rack.RACK_SESSION_UNPACKED_COOKIE_DATA - added:
const Rack.RACK_SHOWSTATUS_DETAIL - added:
const Rack.RACK_TEMPFILES - added:
const Rack.RACK_URL_SCHEME - added:
const Rack.RACK_VERSION - added:
const Rack.RELEASE - added:
const Rack.REQUEST_PATH - added:
const Rack.SERVER_NAME - added:
const Rack.SERVER_PORT - added:
const Rack.SERVER_PROTOCOL - added:
const Rack.SET_COOKIE - added:
const Rack.TRACE - added:
const Rack.TRANSFER_ENCODING - added:
const Rack.UNLINK
- removed:
class File - removed:
const Directory.DIR_PAGE - removed:
const Directory.F - removed:
const File.ALLOWED_VERBS - removed:
const File.ALLOW_HEADER - removed:
const File.F - removed:
const Lock.FLAG - removed:
const Multipart.BROKEN_QUOTED - removed:
const Multipart.BROKEN_UNQUOTED - removed:
const Request.DEFAULT_PORTS - removed:
const Request.FORM_DATA_MEDIA_TYPES - removed:
const Request.PARSEABLE_DATA_MEDIA_TYPES - removed:
const Response.TRANSFER_ENCODING - removed:
const Sendfile.F - removed:
const ShowExceptions.TEMPLATE - removed:
const URLMap.INFINITY - removed:
const URLMap.NEGATIVE_INFINITY - removed:
constructor File(_, _ = …, _ = …) - removed:
method BodyProxy.each(*) - removed:
method BodyProxy.respond_to?(*) - removed:
method Directory._call(_) - removed:
method Directory.each() - removed:
method File._call(_) - removed:
method File.call(_) - removed:
method File.each() - removed:
method File.serving(_) - removed:
method Request.GET() - removed:
method Request.POST() - removed:
method Request.[](_) - removed:
method Request.[]=(_, _) - removed:
method Request.accept_encoding() - removed:
method Request.accept_language() - removed:
method Request.base_url() - removed:
method Request.body() - removed:
method Request.content_charset() - removed:
method Request.content_length() - removed:
method Request.content_type() - removed:
method Request.cookies() - removed:
method Request.delete?() - removed:
method Request.form_data?() - removed:
method Request.fullpath() - removed:
method Request.get?() - removed:
method Request.head?() - removed:
method Request.host() - removed:
method Request.host_with_port() - removed:
method Request.ip() - removed:
method Request.link?() - removed:
method Request.logger() - removed:
method Request.media_type() - removed:
method Request.media_type_params() - removed:
method Request.options?() - removed:
method Request.parseable_data?() - removed:
method Request.patch?() - removed:
method Request.path() - removed:
method Request.path_info() - removed:
method Request.port() - removed:
method Request.post?() - removed:
method Request.put?() - removed:
method Request.query_string() - removed:
method Request.referer() - removed:
method Request.referrer() - removed:
method Request.request_method() - removed:
method Request.scheme() - removed:
method Request.script_name() - removed:
method Request.session() - removed:
method Request.session_options() - removed:
method Request.ssl?() - removed:
method Request.trace?() - removed:
method Request.trusted_proxy?(_) - removed:
method Request.unlink?() - removed:
method Request.url() - removed:
method Request.user_agent() - removed:
method Request.values_at(*) - removed:
method Request.xhr?() - removed:
method Response.[]=(_, _) - removed:
method Response.delete_cookie(_, _ = …) - removed:
method Response.set_cookie(_, _) - removed:
method Response.to_ary() - removed:
method Utils.normalize_params(_, _, _ = …, _ = …) - removed:
property Directory.files: reader - removed:
property Directory.path: accessor - removed:
property File.cache_control: accessor - removed:
property File.path: accessor - removed:
property File.root: accessor - removed:
property File.to_path: accessor - removed:
property Request.env: reader - removed:
protected method Request.parse_http_accept_header(_) - removed:
protected method Request.parse_multipart(_) - removed:
protected method Request.parse_query(_) - removed:
protected method Request.reject_trusted_ip_addresses(_) - removed:
protected method Request.split_ip_addresses(_) - removed:
set Request.path_info(_) - removed:
set Request.script_name(_) - removed:
static method Handler._const_get(_, _ = …) - removed:
static method MockRequest.env_with_encoding(_, _, _) - removed:
static property Utils.key_space_limit: accessor - removed:
static property Utils.param_depth_limit: accessor - changed:
method Directory.check_forbidden() → method Directory.check_forbidden(_) - changed:
method Directory.entity_not_found() → method Directory.entity_not_found(_) - changed:
method Directory.list_directory() → method Directory.list_directory(_, _, _) - changed:
method Directory.list_path() → method Directory.list_path(_, _, _, _) - changed:
method Directory.stat(_, _ = …) → method Directory.stat(_) - changed:
method Response.[](_) → static method Response.[](_, _, _) - changed:
property Directory.root: accessor → property Directory.root: reader - changed:
static method Handler.default(_ = …) → static method Handler.default() - changed:
static method Multipart.parse_multipart(_) → static method Multipart.parse_multipart(_, _ = …) - added:
class Events - added:
class Files - added:
class MediaType - added:
class QueryParser - added:
const Builder.UTF_8_BOM - added:
const Directory.DIR_PAGE_FOOTER - added:
const Directory.DIR_PAGE_HEADER - added:
const Files.ALLOWED_VERBS - added:
const Files.ALLOW_HEADER - added:
const Files.MULTIPART_BOUNDARY - added:
const MediaType.SPLIT_PATTERN - added:
const MockResponse.Cookie - added:
const Multipart.ATTRIBUTE - added:
const Multipart.ATTRIBUTE_CHAR - added:
const Multipart.BROKEN - added:
const Multipart.EXTENDED_INITIAL_NAME - added:
const Multipart.EXTENDED_INITIAL_PARAMETER - added:
const Multipart.EXTENDED_INITIAL_VALUE - added:
const Multipart.EXTENDED_OTHER_NAME - added:
const Multipart.EXTENDED_OTHER_PARAMETER - added:
const Multipart.EXTENDED_OTHER_VALUE - added:
const Multipart.EXTENDED_PARAMETER - added:
const Multipart.REGULAR_PARAMETER - added:
const Multipart.REGULAR_PARAMETER_NAME - added:
const Multipart.SECTION - added:
const Multipart.VALUE - added:
const QueryParser.COMMON_SEP - added:
const QueryParser.DEFAULT_SEP - added:
const QueryParser.ParamsTooDeepError - added:
const Request.ALLOWED_SCHEMES - added:
const Response.STATUS_WITH_NO_ENTITY_BODY - added:
const Runtime.HEADER_NAME - added:
const Session.Memcache - added:
const Utils.COMMON_SEP - added:
const Utils.ESCAPE_HTML - added:
const Utils.ESCAPE_HTML_PATTERN - added:
const Utils.HTTP_STATUS_CODES - added:
const Utils.InvalidParameterError - added:
const Utils.KeySpaceConstrainedParams - added:
const Utils.NULL_BYTE - added:
const Utils.PATH_SEPS - added:
const Utils.ParameterTypeError - added:
const Utils.RFC2396_PARSER - added:
const Utils.RFC2822_DAY_NAME - added:
const Utils.RFC2822_MONTH_NAME - added:
const Utils.STATUS_WITH_NO_ENTITY_BODY - added:
const Utils.SYMBOL_TO_STATUS_CODE - added:
constructor Events(_, _) - added:
constructor Files(_, _ = …, _ = …) - added:
constructor QueryParser(_, _, _, bytesize_limit: …, params_limit: …) - added:
method Builder.freeze_app() - added:
method Directory.check_bad_request(_) - added:
method Directory.get(_) - added:
method Events.call(_) - added:
method Files.call(_) - added:
method Files.get(_) - added:
method Files.serving(_, _) - added:
method MockResponse.cookie(_) - added:
method QueryParser.normalize_params(_, _, _, _) - added:
method QueryParser.parse_nested_query(_, _ = …) - added:
method QueryParser.parse_query(_, _ = …) - added:
method Response.chunked?() - added:
method Response.delete_header(_) - added:
method Response.get_header(_) - added:
method Response.has_header?(_) - added:
method Response.set_header(_, _) - added:
method ShowExceptions.template() - added:
method Static.add_index_root?(_) - added:
module RegexpExtensions - added:
property Files.root: reader - added:
property MockResponse.cookies: reader - added:
property QueryParser.bytesize_limit: reader - added:
property QueryParser.key_space_limit: reader - added:
property QueryParser.param_depth_limit: reader - added:
static method Builder.load_file(_, _ = …) - added:
static method MediaType.params(_) - added:
static method MediaType.type(_) - added:
static method Multipart.extract_multipart(_, _ = …) - added:
static method QueryParser.make_default(_, _, **) - added:
static method Utils.add_cookie_to_header(_, _, _) - added:
static method Utils.add_remove_cookie_to_header(_, _, _ = …) - added:
static method Utils.best_q_match(_, _) - added:
static method Utils.build_nested_query(_, _ = …) - added:
static method Utils.build_query(_) - added:
static method Utils.byte_ranges(_, _, max_ranges: …) - added:
static method Utils.clean_path_info(_) - added:
static method Utils.clock_time() - added:
static method Utils.delete_cookie_header!(_, _, _ = …) - added:
static method Utils.escape_html(_) - added:
static method Utils.get_byte_ranges(_, _, max_ranges: …) - added:
static method Utils.key_space_limit() - added:
static method Utils.make_delete_cookie_header(_, _, _) - added:
static method Utils.param_depth_limit() - added:
static method Utils.parse_cookies(_) - added:
static method Utils.parse_cookies_header(_) - added:
static method Utils.q_values(_) - added:
static method Utils.rfc2109(_) - added:
static method Utils.rfc2822(_) - added:
static method Utils.secure_compare(_, _) - added:
static method Utils.select_best_encoding(_, _) - added:
static method Utils.set_cookie_header!(_, _, _) - added:
static method Utils.status_code(_) - added:
static method Utils.unescape_path(_) - added:
static method Utils.valid_path?(_) - added:
static property Request.ip_filter: accessor - added:
static property Utils.default_query_parser: accessor - added:
static property Utils.multipart_file_limit: accessor - added:
static property Utils.multipart_part_limit=: accessor - added:
static property Utils.multipart_total_part_limit: accessor - added:
static set Utils.key_space_limit(_) - added:
static set Utils.param_depth_limit(_)
- added:
method AbstractRequest.valid?()
- added:
class TrailerBody < Body
- removed:
class DeflateStream - removed:
const DeflateStream.DEFLATE_ARGS - removed:
constructor DeflateStream(_) - removed:
method DeflateStream.close() - removed:
method DeflateStream.each() - changed:
constructor GzipStream(_, _) → constructor GzipStream(_, _, _)
- added:
class DirectoryBody < Struct.new(:root, :path, :files) - added:
method DirectoryBody.each()
- added:
class BufferedResponse < Rack::Response::Raw - added:
class EventedBodyProxy < Rack::BodyProxy - added:
constructor BufferedResponse(_, _, _) - added:
constructor EventedBodyProxy(_, _, _, _) - added:
method Abstract.on_commit(_, _) - added:
method Abstract.on_error(_, _, _) - added:
method Abstract.on_finish(_, _) - added:
method Abstract.on_send(_, _) - added:
method Abstract.on_start(_, _) - added:
method BufferedResponse.to_a() - added:
method EventedBodyProxy.each() - added:
module Abstract - added:
property BufferedResponse.body: reader - added:
property EventedBodyProxy.request: reader - added:
property EventedBodyProxy.response: reader
- added:
class BaseIterator - added:
class Iterator < BaseIterator - added:
constructor BaseIterator(_, _, _) - added:
method BaseIterator.bytesize() - added:
method BaseIterator.close() - added:
method BaseIterator.each() - added:
method Iterator.to_path() - added:
property BaseIterator.options: reader - added:
property BaseIterator.path: reader - added:
property BaseIterator.ranges: reader
- removed:
class EventedMongrel < Handler::Mongrel - removed:
class Mongrel < ::Mongrel::HttpHandler - removed:
class SwiftipliedMongrel < Handler::Mongrel - removed:
constructor Mongrel(_) - removed:
method Mongrel.process(_, _) - removed:
static method Mongrel.run(_, _ = …) - removed:
static method Mongrel.valid_options() - changed:
static method CGI.run(_, _ = …) → static method CGI.run(_, **) - changed:
static method FastCGI.run(_, _ = …) → static method FastCGI.run(_, **) - changed:
static method LSWS.run(_, _ = …) → static method LSWS.run(_, **) - changed:
static method SCGI.run(_, _ = …) → static method SCGI.run(_, **) - changed:
static method Thin.run(_, _ = …) → static method Thin.run(_, **) - changed:
static method WEBrick.run(_, _ = …) → static method WEBrick.run(_, **)
- added:
class Cookie - added:
constructor Cookie(_) - added:
property Cookie.domain: reader - added:
property Cookie.expires: reader - added:
property Cookie.name: reader - added:
property Cookie.path: reader - added:
property Cookie.secure: reader - added:
property Cookie.value: reader
- removed:
static method Parser.create(_) - changed:
constructor Parser(_, _, _, _, _, _) → constructor Parser(_, _, _, _) - changed:
constructor UploadedFile(_, _ = …, _ = …) → constructor UploadedFile(_ = …, _ = …, _ = …, path: …, content_type: …, binary: …, filename: …, io: …) - changed:
method Parser.parse() → static method Parser.parse(_, _, _, _, _, _) - added:
class MultipartTotalPartLimitError < StandardError - added:
const Parser.BOUNDARY_REGEX - added:
const Parser.TEMPFILE_FACTORY - added:
method Parser.on_read(_) - added:
method Parser.result() - added:
property Parser.state: reader - added:
static method Parser.parse_boundary(_)
- removed:
class DUMMY < Struct.new(:parse) - added:
class BoundedIO - added:
class Collector - added:
class EMPTY < MultipartInfo.new(nil, []) - added:
class MultipartInfo < Struct.new - added:
constructor BoundedIO(_, _) - added:
constructor Collector(_) - added:
method BoundedIO.read(_, _ = …) - added:
method BoundedIO.rewind() - added:
method Collector.each() - added:
method Collector.on_mime_body(_, _) - added:
method Collector.on_mime_finish(_) - added:
method Collector.on_mime_head(_, _, _, _, _)
- added:
class BufferPart < MimePart - added:
class MimePart < Struct.new(:body, :head, :filename, :content_type, :name) - added:
class TempfilePart < MimePart - added:
method BufferPart.close() - added:
method BufferPart.file?() - added:
method MimePart.get_data() - added:
method TempfilePart.close() - added:
method TempfilePart.file?()
- added:
class InvalidParameterError < ArgumentError - added:
class ParameterTypeError < TypeError - added:
class QueryLimitError < RangeError
- added:
const Helpers.DEFAULT_PORTS - added:
const Helpers.FORM_DATA_MEDIA_TYPES - added:
const Helpers.HTTP_X_FORWARDED_FOR - added:
const Helpers.HTTP_X_FORWARDED_HOST - added:
const Helpers.HTTP_X_FORWARDED_PORT - added:
const Helpers.HTTP_X_FORWARDED_PROTO - added:
const Helpers.HTTP_X_FORWARDED_SCHEME - added:
const Helpers.HTTP_X_FORWARDED_SSL - added:
const Helpers.PARSEABLE_DATA_MEDIA_TYPES - added:
constructor Env(_) - added:
method Env.add_header(_, _) - added:
method Env.delete_header(_) - added:
method Env.each_header() - added:
method Env.fetch_header(_) - added:
method Env.get_header(_) - added:
method Env.has_header?(_) - added:
method Env.set_header(_, _) - added:
method Helpers.GET() - added:
method Helpers.POST() - added:
method Helpers.[](_) - added:
method Helpers.[]=(_, _) - added:
method Helpers.accept_encoding() - added:
method Helpers.accept_language() - added:
method Helpers.authority() - added:
method Helpers.base_url() - added:
method Helpers.body() - added:
method Helpers.content_charset() - added:
method Helpers.content_length() - added:
method Helpers.content_type() - added:
method Helpers.cookies() - added:
method Helpers.delete?() - added:
method Helpers.delete_param(_) - added:
method Helpers.form_data?() - added:
method Helpers.forwarded_authority() - added:
method Helpers.forwarded_for() - added:
method Helpers.forwarded_port() - added:
method Helpers.fullpath() - added:
method Helpers.get?() - added:
method Helpers.head?() - added:
method Helpers.host() - added:
method Helpers.host_authority() - added:
method Helpers.host_with_port(_ = …) - added:
method Helpers.hostname() - added:
method Helpers.ip() - added:
method Helpers.link?() - added:
method Helpers.logger() - added:
method Helpers.media_type() - added:
method Helpers.media_type_params() - added:
method Helpers.multithread?() - added:
method Helpers.options?() - added:
method Helpers.params() - added:
method Helpers.parseable_data?() - added:
method Helpers.patch?() - added:
method Helpers.path() - added:
method Helpers.path_info() - added:
method Helpers.port() - added:
method Helpers.post?() - added:
method Helpers.put?() - added:
method Helpers.query_string() - added:
method Helpers.referer() - added:
method Helpers.referrer() - added:
method Helpers.request_method() - added:
method Helpers.scheme() - added:
method Helpers.script_name() - added:
method Helpers.server_authority() - added:
method Helpers.server_name() - added:
method Helpers.server_port() - added:
method Helpers.session() - added:
method Helpers.session_options() - added:
method Helpers.ssl?() - added:
method Helpers.trace?() - added:
method Helpers.trusted_proxy?(_) - added:
method Helpers.unlink?() - added:
method Helpers.update_param(_, _) - added:
method Helpers.url() - added:
method Helpers.user_agent() - added:
method Helpers.values_at(*) - added:
method Helpers.xhr?() - added:
module Env - added:
module Helpers - added:
property Env.env: reader - added:
set Helpers.path_info(_) - added:
set Helpers.script_name(_)
- removed:
method Helpers.i_m_a_teapot?() - removed:
property Helpers.headers: reader - removed:
property Helpers.original_headers: reader - added:
class Raw - added:
constructor Raw(_, _) - added:
method Helpers.add_header(_, _) - added:
method Helpers.cache!(_ = …, directive: …) - added:
method Helpers.cache_control() - added:
method Helpers.delete_cookie(_, _ = …) - added:
method Helpers.do_not_cache!() - added:
method Helpers.etag() - added:
method Helpers.media_type() - added:
method Helpers.media_type_params() - added:
method Helpers.moved_permanently?() - added:
method Helpers.no_content?() - added:
method Helpers.precondition_failed?() - added:
method Helpers.set_cookie(_, _) - added:
method Helpers.set_cookie_header() - added:
method Raw.delete_header(_) - added:
method Raw.get_header(_) - added:
method Raw.has_header?(_) - added:
method Raw.set_header(_, _) - added:
property Raw.headers: reader - added:
property Raw.status: accessor - added:
protected method Helpers.append(_) - added:
protected method Helpers.buffered_body!() - added:
set Helpers.cache_control(_) - added:
set Helpers.content_type(_) - added:
set Helpers.etag(_) - added:
set Helpers.location(_) - added:
set Helpers.set_cookie_header(_)
- removed:
class Tempfile < ::Tempfile - removed:
method Tempfile._close()
- removed:
class Memcache < Abstract::PersistedSecure - removed:
const Abstract.ENV_SESSION_KEY - removed:
const Abstract.ENV_SESSION_OPTIONS_KEY - removed:
const Memcache.DEFAULT_OPTIONS - removed:
constructor Memcache(_, _ = …) - removed:
method Memcache.destroy_session(_, _, _) - removed:
method Memcache.generate_sid() - removed:
method Memcache.get_session(_, _) - removed:
method Memcache.set_session(_, _, _, _) - removed:
method Memcache.with_lock(_) - removed:
method Pool.destroy_session(_, _, _) - removed:
method Pool.get_session(_, _) - removed:
method Pool.set_session(_, _, _, _) - removed:
property Memcache.mutex: reader - removed:
property Memcache.pool: reader - added:
method Pool.delete_session(_, _, _) - added:
method Pool.find_session(_, _) - added:
method Pool.write_session(_, _, _, _)
- added:
method ID.delete_session(_, _, _) - added:
method ID.find_session(_, _) - added:
method ID.write_session(_, _, _, _) - added:
method Persisted.commit_session(_, _) - added:
method SessionHash.dig(_, *) - added:
method SessionHash.fetch(_, _ = …) - added:
property Persisted.sid_secure: reader
- added:
class Unspecified < Object.new
- added:
class TEMPLATE < ERB.new(<<-'HTML'.gsub(/^ /, ''))
- removed:
class InvalidParameterError < ArgumentError - removed:
class ParameterTypeError < TypeError - removed:
const OkJson.Spc - removed:
const OkJson.Unesc - removed:
const OkJson.Upstream - removed:
const OkJson.Usurr1 - removed:
const OkJson.Usurr2 - removed:
const OkJson.Usurr3 - removed:
const OkJson.Usurrself - removed:
method OkJson.decode(_) - removed:
method OkJson.encode(_) - removed:
method OkJson.valenc(_) - removed:
module OkJson - added:
class Context - added:
class HeaderHash < Hash - added:
constructor Context(_, _) - added:
constructor HeaderHash(_ = …) - added:
method Context.call(_) - added:
method Context.context(_, _ = …) - added:
method Context.recontext(_) - added:
method HeaderHash.[](_) - added:
method HeaderHash.[]=(_, _) - added:
method HeaderHash.clear() - added:
method HeaderHash.delete(_) - added:
method HeaderHash.each() - added:
method HeaderHash.has_key?(_) - added:
method HeaderHash.include?(_) - added:
method HeaderHash.key?(_) - added:
method HeaderHash.member?(_) - added:
method HeaderHash.merge!(_) - added:
method HeaderHash.merge(_) - added:
method HeaderHash.replace(_) - added:
method HeaderHash.to_hash() - added:
property Context.app: reader - added:
property Context.for: reader - added:
protected method HeaderHash.names() - added:
static method HeaderHash.[](_)