diff --git a/README.md b/README.md
index 268f3b6..53050c4 100644
--- a/README.md
+++ b/README.md
@@ -3,14 +3,14 @@
## Intro
* See full version of this project on https://rubychangelog.com/
-* This page was last updated on 2023-01-24 via `rake md` task
+* This page was last updated on 2023-09-09 via `rake md` task
## Ruby changelog
### Ruby 3.2
- * Implementations: [MRI 3.2.0](https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/)
+ * Implementations: [MRI 3.2.2](https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/)
* :gear: WASI based WebAssembly support
* :gear: Production-ready YJIT
* :gear: Regexp improvements against ReDoS
@@ -19,7 +19,7 @@
### Ruby 3.1
- * Implementations: [MRI 3.1.3](https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-1-3-released/)
+ * Implementations: [MRI 3.1.4](https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/)
* :gear: YJIT: New experimental in-process JIT compiler :test_tube:
* :new: debug gem: A new debugger
* :new: error_highlight: Fine-grained error location in backtrace
@@ -29,7 +29,7 @@
### Ruby 3.0
- * Implementations: [MRI 3.0.5](https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/)
+ * Implementations: [MRI 3.0.6](https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/)
* :gear: MJIT improvements
* :new: Ractor - Actor-model like concurrent abstraction :test_tube:
* :new: Fiber Scheduler for light-weight concurrency :test_tube:
diff --git a/Rakefile b/Rakefile
index 372752d..c6c7a6b 100644
--- a/Rakefile
+++ b/Rakefile
@@ -18,6 +18,11 @@ task :doc do
end
namespace :fetch do
+ desc 'Fetch Ruby changes'
+ task :ruby do
+ RubyChangelog::Actions.new.fetch_ruby_changes
+ end
+
desc 'Fetch CVE data'
task :cve do
RubyChangelog::Actions.new.fetch_cve_history
diff --git a/data/ruby_cve.json b/data/ruby_cve.json
index 4e836b7..6494b3c 100644
--- a/data/ruby_cve.json
+++ b/data/ruby_cve.json
@@ -1,4 +1,50 @@
{
+ "3.3.0.preview1": [
+
+ ],
+ "3.2.2": [
+ {
+ "url": "https://www.ruby-lang.org/en/news/2023/03/28/redos-in-uri-cve-2023-28755/",
+ "title": "CVE-2023-28755: ReDoS vulnerability in URI"
+ },
+ {
+ "url": "https://www.ruby-lang.org/en/news/2023/03/30/redos-in-time-cve-2023-28756/",
+ "title": "CVE-2023-28756: ReDoS vulnerability in Time"
+ }
+ ],
+ "3.1.4": [
+ {
+ "url": "https://www.ruby-lang.org/en/news/2023/03/28/redos-in-uri-cve-2023-28755/",
+ "title": "CVE-2023-28755: ReDoS vulnerability in URI"
+ },
+ {
+ "url": "https://www.ruby-lang.org/en/news/2023/03/30/redos-in-time-cve-2023-28756/",
+ "title": "CVE-2023-28756: ReDoS vulnerability in Time"
+ }
+ ],
+ "3.0.6": [
+ {
+ "url": "https://www.ruby-lang.org/en/news/2023/03/28/redos-in-uri-cve-2023-28755/",
+ "title": "CVE-2023-28755: ReDoS vulnerability in URI"
+ },
+ {
+ "url": "https://www.ruby-lang.org/en/news/2023/03/30/redos-in-time-cve-2023-28756/",
+ "title": "CVE-2023-28756: ReDoS vulnerability in Time"
+ }
+ ],
+ "2.7.8": [
+ {
+ "url": "https://www.ruby-lang.org/en/news/2023/03/28/redos-in-uri-cve-2023-28755/",
+ "title": "CVE-2023-28755: ReDoS vulnerability in URI"
+ },
+ {
+ "url": "https://www.ruby-lang.org/en/news/2023/03/30/redos-in-time-cve-2023-28756/",
+ "title": "CVE-2023-28756: ReDoS vulnerability in Time"
+ }
+ ],
+ "3.2.1": [
+
+ ],
"3.2.0": [
],
@@ -759,7 +805,7 @@
],
"1.9.2.p330": [
{
- "url": "https://www.ruby-lang.orghttps://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6438",
+ "url": "https://www.ruby-lang.orghttps://www.cve.org/CVERecord?id=CVE-2014-6438",
"title": "CVE-2014-6438"
}
],
diff --git a/data/ruby_versions.json b/data/ruby_versions.json
index 1764726..d52e15a 100644
--- a/data/ruby_versions.json
+++ b/data/ruby_versions.json
@@ -2,15 +2,17 @@
"ruby_versions": [
{
"version": "3.2",
- "version_info": "3.2.0 (Dec 2022) - 3.1.2 (Apr 2022)",
+ "version_info": "3.2.0 (Dec 2022) - 3.2.2 (March 2023)",
"state": "Supported",
"minors": [
- { "version": "3.2.0", "release_date": "2022-12-25", "end_date": "" }
+ { "version": "3.2.2", "release_date": "2023-03-30", "end_date": "" },
+ { "version": "3.2.1", "release_date": "2022-02-08", "end_date": "2023-03-30" },
+ { "version": "3.2.0", "release_date": "2022-12-25", "end_date": "2022-02-08" }
],
"implementations": [
{
- "name": "MRI 3.2.0",
- "url": "https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/"
+ "name": "MRI 3.2.2",
+ "url": "https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/"
}
],
"changes": [
@@ -51,18 +53,19 @@
},
{
"version": "3.1",
- "version_info": "3.1.0 (Dec 2020) - 3.1.3 (Nov 2022)",
+ "version_info": "3.1.0 (Dec 2020) - 3.1.4 (March 2023)",
"state": "Supported",
"minors": [
- { "version": "3.1.3", "release_date": "2022-11-24", "end_date": "" },
+ { "version": "3.1.4", "release_date": "2023-03-30", "end_date": "" },
+ { "version": "3.1.3", "release_date": "2022-11-24", "end_date": "2023-03-30" },
{ "version": "3.1.2", "release_date": "2022-04-12", "end_date": "2022-11-24" },
{ "version": "3.1.1", "release_date": "2022-02-18", "end_date": "2022-04-12" },
{ "version": "3.1.0", "release_date": "2021-12-25", "end_date": "2022-02-18" }
],
"implementations": [
{
- "name": "MRI 3.1.3",
- "url": "https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-1-3-released/"
+ "name": "MRI 3.1.4",
+ "url": "https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/"
}
],
"changes": [
@@ -109,10 +112,11 @@
},
{
"version": "3.0",
- "version_info": "3.0.0 (Dec 2020) - 3.0.5 (Nov 2022)",
+ "version_info": "3.0.0 (Dec 2020) - 3.0.6 (March 2023)",
"state": "Supported",
"minors": [
- { "version": "3.0.5", "release_date": "2022-11-24", "end_date": "" },
+ { "version": "3.0.6", "release_date": "2023-03-30", "end_date": "" },
+ { "version": "3.0.5", "release_date": "2022-11-24", "end_date": "2022-11-24" },
{ "version": "3.0.4", "release_date": "2022-04-12", "end_date": "2022-11-24" },
{ "version": "3.0.3", "release_date": "2021-11-24", "end_date": "2022-04-12" },
{ "version": "3.0.2", "release_date": "2021-07-07", "end_date": "2021-11-24" },
@@ -121,8 +125,8 @@
],
"implementations": [
{
- "name": "MRI 3.0.5",
- "url": "https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/"
+ "name": "MRI 3.0.6",
+ "url": "https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/"
}
],
"changes": [
diff --git a/docs/docs/javascripts/charts-timeline.js b/docs/docs/javascripts/charts-timeline.js
index 5074c24..0ac7e5a 100644
--- a/docs/docs/javascripts/charts-timeline.js
+++ b/docs/docs/javascripts/charts-timeline.js
@@ -13,7 +13,7 @@ window.onload = function () {
var colorSet = new am4core.ColorSet();
colorSet.saturation = 0.2;
- chart.data = [{"category":"Ruby 3.2","task":"3.2.0","start":"2022-12-25","end":"2023-01-24","color":"rgb(255, 12, 0)","info":"Supported\n{\"name\"=>\"MRI 3.2.0\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"WASI based WebAssembly support\", \"links\"=>{\"news\"=>\"https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9\"}}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Production-ready YJIT\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Regexp improvements against ReDoS\"}\n{\"type\"=>\"internals\", \"tags\"=>[], \"experimental\"=>false, \"summary\"=>\"IRB improvements (SyntaxSuggest, ErrorHighlight)\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"bundler\"], \"experimental\"=>false, \"summary\"=>\"Bundler 2.4 now uses PubGrub resolver instead of Molinillo\"}"},{"category":"Ruby 3.1","task":"3.1.3","start":"2022-11-24","end":"2023-01-24","color":"rgb(255, 32, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.3\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-1-3-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.2","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 24, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.3\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-1-3-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.1","start":"2022-02-18","end":"2022-04-12","color":"rgb(255, 16, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.3\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-1-3-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.0","start":"2021-12-25","end":"2022-02-18","color":"rgb(255, 8, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.3\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-1-3-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.0","task":"3.0.5","start":"2022-11-24","end":"2023-01-24","color":"rgb(255, 24, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.4","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 20, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.3","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 16, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.2","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 12, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.1","start":"2021-04-05","end":"2021-07-07","color":"rgb(255, 8, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.0","start":"2020-12-25","end":"2021-04-05","color":"rgb(255, 4, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 2.7","task":"2.7.7","start":"2022-11-24","end":"2023-01-24","color":"rgb(255, 192, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.6","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 168, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.5","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 144, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.4","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 120, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.3","start":"2021-04-05","end":"2021-07-07","color":"rgb(255, 96, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.2","start":"2020-10-02","end":"2021-04-05","color":"rgb(255, 72, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.1","start":"2020-03-31","end":"2020-10-02","color":"rgb(255, 48, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.0","start":"2019-12-25","end":"2020-03-31","color":"rgb(255, 24, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.6","task":"2.6.10","start":"2022-04-12","end":"2023-01-24","color":"rgb(255, 231, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.9","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 210, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.8","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 189, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.7","start":"2020-04-05","end":"2021-07-07","color":"rgb(255, 168, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.6","start":"2020-03-31","end":"2020-04-05","color":"rgb(255, 147, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.5","start":"2019-10-01","end":"2020-03-31","color":"rgb(255, 126, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.4","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 105, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.3","start":"2019-04-17","end":"2019-08-28","color":"rgb(255, 84, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.2","start":"2019-03-13","end":"2019-04-17","color":"rgb(255, 63, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.1","start":"2019-01-30","end":"2019-03-13","color":"rgb(255, 42, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.0","start":"2018-12-25","end":"2019-01-30","color":"rgb(255, 21, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.5","task":"2.5.9","start":"2021-04-05","end":"2023-01-24","color":"rgb(255, 180, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.8","start":"2020-03-31","end":"2021-04-05","color":"rgb(255, 162, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.7","start":"2019-10-01","end":"2020-03-31","color":"rgb(255, 144, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.6","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 126, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.5","start":"2019-03-15","end":"2019-08-28","color":"rgb(255, 108, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.4","start":"2019-03-13","end":"2019-03-15","color":"rgb(255, 90, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.3","start":"2018-10-18","end":"2019-03-13","color":"rgb(255, 72, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.2","start":"2018-10-17","end":"2018-10-18","color":"rgb(255, 54, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.1","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 36, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.0","start":"2017-12-25","end":"2018-03-28","color":"rgb(255, 18, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.4","task":"2.4.10","start":"2020-03-31","end":"2023-01-24","color":"rgb(255, 165, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.9","start":"2019-10-02","end":"2020-03-31","color":"rgb(255, 150, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.8","start":"2019-10-01","end":"2019-10-02","color":"rgb(255, 135, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.7","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 120, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.6","start":"2019-04-01","end":"2020-03-31","color":"rgb(255, 105, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.5","start":"2018-10-17","end":"2019-04-01","color":"rgb(255, 90, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.4","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 75, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.3","start":"2017-12-14","end":"2018-03-28","color":"rgb(255, 60, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.2","start":"2017-09-14","end":"2017-12-14","color":"rgb(255, 45, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.1","start":"2017-03-22","end":"2017-09-14","color":"rgb(255, 30, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.0","start":"2016-12-25","end":"2017-03-22","color":"rgb(255, 15, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.3","task":"2.3.8","start":"2018-10-17","end":"2019-03-31","color":"rgb(255, 108, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.7","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 96, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.6","start":"2017-12-14","end":"2018-03-28","color":"rgb(255, 84, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.5","start":"2017-09-14","end":"2017-12-14","color":"rgb(255, 72, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.4","start":"2017-03-30","end":"2017-09-14","color":"rgb(255, 60, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.3","start":"2016-11-21","end":"2017-03-30","color":"rgb(255, 48, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.2","start":"2016-11-15","end":"2016-11-21","color":"rgb(255, 36, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.1","start":"2016-04-26","end":"2016-11-15","color":"rgb(255, 24, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.0","start":"2015-12-25","end":"2016-04-26","color":"rgb(255, 12, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"}]
+ chart.data = [{"category":"Ruby 3.2","task":"3.2.2","start":"2023-03-30","end":"2023-09-09","color":"rgb(255, 36, 0)","info":"Supported\n{\"name\"=>\"MRI 3.2.2\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"WASI based WebAssembly support\", \"links\"=>{\"news\"=>\"https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9\"}}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Production-ready YJIT\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Regexp improvements against ReDoS\"}\n{\"type\"=>\"internals\", \"tags\"=>[], \"experimental\"=>false, \"summary\"=>\"IRB improvements (SyntaxSuggest, ErrorHighlight)\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"bundler\"], \"experimental\"=>false, \"summary\"=>\"Bundler 2.4 now uses PubGrub resolver instead of Molinillo\"}"},{"category":"Ruby 3.2","task":"3.2.1","start":"2022-02-08","end":"2023-03-30","color":"rgb(255, 24, 0)","info":"Supported\n{\"name\"=>\"MRI 3.2.2\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"WASI based WebAssembly support\", \"links\"=>{\"news\"=>\"https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9\"}}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Production-ready YJIT\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Regexp improvements against ReDoS\"}\n{\"type\"=>\"internals\", \"tags\"=>[], \"experimental\"=>false, \"summary\"=>\"IRB improvements (SyntaxSuggest, ErrorHighlight)\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"bundler\"], \"experimental\"=>false, \"summary\"=>\"Bundler 2.4 now uses PubGrub resolver instead of Molinillo\"}"},{"category":"Ruby 3.2","task":"3.2.0","start":"2022-12-25","end":"2022-02-08","color":"rgb(255, 12, 0)","info":"Supported\n{\"name\"=>\"MRI 3.2.2\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"WASI based WebAssembly support\", \"links\"=>{\"news\"=>\"https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9\"}}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Production-ready YJIT\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Regexp improvements against ReDoS\"}\n{\"type\"=>\"internals\", \"tags\"=>[], \"experimental\"=>false, \"summary\"=>\"IRB improvements (SyntaxSuggest, ErrorHighlight)\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"bundler\"], \"experimental\"=>false, \"summary\"=>\"Bundler 2.4 now uses PubGrub resolver instead of Molinillo\"}"},{"category":"Ruby 3.1","task":"3.1.4","start":"2023-03-30","end":"2023-09-09","color":"rgb(255, 40, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.3","start":"2022-11-24","end":"2023-03-30","color":"rgb(255, 32, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.2","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 24, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.1","start":"2022-02-18","end":"2022-04-12","color":"rgb(255, 16, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.0","start":"2021-12-25","end":"2022-02-18","color":"rgb(255, 8, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.0","task":"3.0.6","start":"2023-03-30","end":"2023-09-09","color":"rgb(255, 28, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.5","start":"2022-11-24","end":"2022-11-24","color":"rgb(255, 24, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.4","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 20, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.3","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 16, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.2","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 12, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.1","start":"2021-04-05","end":"2021-07-07","color":"rgb(255, 8, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.0","start":"2020-12-25","end":"2021-04-05","color":"rgb(255, 4, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 2.7","task":"2.7.7","start":"2022-11-24","end":"2023-09-09","color":"rgb(255, 192, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.6","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 168, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.5","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 144, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.4","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 120, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.3","start":"2021-04-05","end":"2021-07-07","color":"rgb(255, 96, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.2","start":"2020-10-02","end":"2021-04-05","color":"rgb(255, 72, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.1","start":"2020-03-31","end":"2020-10-02","color":"rgb(255, 48, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.0","start":"2019-12-25","end":"2020-03-31","color":"rgb(255, 24, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.6","task":"2.6.10","start":"2022-04-12","end":"2023-09-09","color":"rgb(255, 231, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.9","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 210, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.8","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 189, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.7","start":"2020-04-05","end":"2021-07-07","color":"rgb(255, 168, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.6","start":"2020-03-31","end":"2020-04-05","color":"rgb(255, 147, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.5","start":"2019-10-01","end":"2020-03-31","color":"rgb(255, 126, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.4","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 105, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.3","start":"2019-04-17","end":"2019-08-28","color":"rgb(255, 84, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.2","start":"2019-03-13","end":"2019-04-17","color":"rgb(255, 63, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.1","start":"2019-01-30","end":"2019-03-13","color":"rgb(255, 42, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.0","start":"2018-12-25","end":"2019-01-30","color":"rgb(255, 21, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.5","task":"2.5.9","start":"2021-04-05","end":"2023-09-09","color":"rgb(255, 180, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.8","start":"2020-03-31","end":"2021-04-05","color":"rgb(255, 162, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.7","start":"2019-10-01","end":"2020-03-31","color":"rgb(255, 144, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.6","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 126, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.5","start":"2019-03-15","end":"2019-08-28","color":"rgb(255, 108, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.4","start":"2019-03-13","end":"2019-03-15","color":"rgb(255, 90, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.3","start":"2018-10-18","end":"2019-03-13","color":"rgb(255, 72, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.2","start":"2018-10-17","end":"2018-10-18","color":"rgb(255, 54, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.1","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 36, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.0","start":"2017-12-25","end":"2018-03-28","color":"rgb(255, 18, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.4","task":"2.4.10","start":"2020-03-31","end":"2023-09-09","color":"rgb(255, 165, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.9","start":"2019-10-02","end":"2020-03-31","color":"rgb(255, 150, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.8","start":"2019-10-01","end":"2019-10-02","color":"rgb(255, 135, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.7","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 120, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.6","start":"2019-04-01","end":"2020-03-31","color":"rgb(255, 105, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.5","start":"2018-10-17","end":"2019-04-01","color":"rgb(255, 90, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.4","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 75, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.3","start":"2017-12-14","end":"2018-03-28","color":"rgb(255, 60, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.2","start":"2017-09-14","end":"2017-12-14","color":"rgb(255, 45, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.1","start":"2017-03-22","end":"2017-09-14","color":"rgb(255, 30, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.0","start":"2016-12-25","end":"2017-03-22","color":"rgb(255, 15, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.3","task":"2.3.8","start":"2018-10-17","end":"2019-03-31","color":"rgb(255, 108, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.7","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 96, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.6","start":"2017-12-14","end":"2018-03-28","color":"rgb(255, 84, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.5","start":"2017-09-14","end":"2017-12-14","color":"rgb(255, 72, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.4","start":"2017-03-30","end":"2017-09-14","color":"rgb(255, 60, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.3","start":"2016-11-21","end":"2017-03-30","color":"rgb(255, 48, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.2","start":"2016-11-15","end":"2016-11-21","color":"rgb(255, 36, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.1","start":"2016-04-26","end":"2016-11-15","color":"rgb(255, 24, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.0","start":"2015-12-25","end":"2016-04-26","color":"rgb(255, 12, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"}]
chart.dateFormatter.dateFormat = "yyyy-MM-dd";
chart.dateFormatter.inputDateFormat = "yyyy-MM-dd";
diff --git a/docs/docs/versions-all.md b/docs/docs/versions-all.md
index e4e4dd9..903d4de 100644
--- a/docs/docs/versions-all.md
+++ b/docs/docs/versions-all.md
@@ -5,6 +5,18 @@
## Ruby 3.2
+### Ruby [3.2.2](https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/)
Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.4","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 20, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.3","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 16, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.2","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 12, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.1","start":"2021-04-05","end":"2021-07-07","color":"rgb(255, 8, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.0","start":"2020-12-25","end":"2021-04-05","color":"rgb(255, 4, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.5\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 2.7","task":"2.7.7","start":"2022-11-24","end":"2023-01-24","color":"rgb(255, 192, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.6","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 168, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.5","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 144, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.4","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 120, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.3","start":"2021-04-05","end":"2021-07-07","color":"rgb(255, 96, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.2","start":"2020-10-02","end":"2021-04-05","color":"rgb(255, 72, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.1","start":"2020-03-31","end":"2020-10-02","color":"rgb(255, 48, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.0","start":"2019-12-25","end":"2020-03-31","color":"rgb(255, 24, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.6","task":"2.6.10","start":"2022-04-12","end":"2022-03-31","color":"rgb(255, 231, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.9","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 210, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.8","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 189, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.7","start":"2020-04-05","end":"2021-07-07","color":"rgb(255, 168, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.6","start":"2020-03-31","end":"2020-04-05","color":"rgb(255, 147, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.5","start":"2019-10-01","end":"2020-03-31","color":"rgb(255, 126, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.4","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 105, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.3","start":"2019-04-17","end":"2019-08-28","color":"rgb(255, 84, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.2","start":"2019-03-13","end":"2019-04-17","color":"rgb(255, 63, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.1","start":"2019-01-30","end":"2019-03-13","color":"rgb(255, 42, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.0","start":"2018-12-25","end":"2019-01-30","color":"rgb(255, 21, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.5","task":"2.5.9","start":"2021-04-05","end":"2021-03-31","color":"rgb(255, 180, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.8","start":"2020-03-31","end":"2021-04-05","color":"rgb(255, 162, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.7","start":"2019-10-01","end":"2020-03-31","color":"rgb(255, 144, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.6","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 126, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.5","start":"2019-03-15","end":"2019-08-28","color":"rgb(255, 108, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.4","start":"2019-03-13","end":"2019-03-15","color":"rgb(255, 90, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.3","start":"2018-10-18","end":"2019-03-13","color":"rgb(255, 72, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.2","start":"2018-10-17","end":"2018-10-18","color":"rgb(255, 54, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.1","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 36, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.0","start":"2017-12-25","end":"2018-03-28","color":"rgb(255, 18, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.4","task":"2.4.10","start":"2020-03-31","end":"2020-03-31","color":"rgb(255, 165, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.9","start":"2019-10-02","end":"2020-03-31","color":"rgb(255, 150, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.8","start":"2019-10-01","end":"2019-10-02","color":"rgb(255, 135, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.7","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 120, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.6","start":"2019-04-01","end":"2020-03-31","color":"rgb(255, 105, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.5","start":"2018-10-17","end":"2019-04-01","color":"rgb(255, 90, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.4","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 75, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.3","start":"2017-12-14","end":"2018-03-28","color":"rgb(255, 60, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.2","start":"2017-09-14","end":"2017-12-14","color":"rgb(255, 45, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.1","start":"2017-03-22","end":"2017-09-14","color":"rgb(255, 30, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.0","start":"2016-12-25","end":"2017-03-22","color":"rgb(255, 15, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.3","task":"2.3.8","start":"2018-10-17","end":"2019-03-31","color":"rgb(255, 108, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.7","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 96, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.6","start":"2017-12-14","end":"2018-03-28","color":"rgb(255, 84, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.5","start":"2017-09-14","end":"2017-12-14","color":"rgb(255, 72, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.4","start":"2017-03-30","end":"2017-09-14","color":"rgb(255, 60, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.3","start":"2016-11-21","end":"2017-03-30","color":"rgb(255, 48, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.2","start":"2016-11-15","end":"2016-11-21","color":"rgb(255, 36, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.1","start":"2016-04-26","end":"2016-11-15","color":"rgb(255, 24, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.0","start":"2015-12-25","end":"2016-04-26","color":"rgb(255, 12, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"}]
+ chart.data = [{"category":"Ruby 3.2","task":"3.2.2","start":"2023-03-30","end":"2023-09-09","color":"rgb(255, 36, 0)","info":"Supported\n{\"name\"=>\"MRI 3.2.2\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"WASI based WebAssembly support\", \"links\"=>{\"news\"=>\"https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9\"}}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Production-ready YJIT\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Regexp improvements against ReDoS\"}\n{\"type\"=>\"internals\", \"tags\"=>[], \"experimental\"=>false, \"summary\"=>\"IRB improvements (SyntaxSuggest, ErrorHighlight)\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"bundler\"], \"experimental\"=>false, \"summary\"=>\"Bundler 2.4 now uses PubGrub resolver instead of Molinillo\"}"},{"category":"Ruby 3.2","task":"3.2.1","start":"2022-02-08","end":"2023-03-30","color":"rgb(255, 24, 0)","info":"Supported\n{\"name\"=>\"MRI 3.2.2\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"WASI based WebAssembly support\", \"links\"=>{\"news\"=>\"https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9\"}}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Production-ready YJIT\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Regexp improvements against ReDoS\"}\n{\"type\"=>\"internals\", \"tags\"=>[], \"experimental\"=>false, \"summary\"=>\"IRB improvements (SyntaxSuggest, ErrorHighlight)\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"bundler\"], \"experimental\"=>false, \"summary\"=>\"Bundler 2.4 now uses PubGrub resolver instead of Molinillo\"}"},{"category":"Ruby 3.2","task":"3.2.0","start":"2022-12-25","end":"2022-02-08","color":"rgb(255, 12, 0)","info":"Supported\n{\"name\"=>\"MRI 3.2.2\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-2-2-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"WASI based WebAssembly support\", \"links\"=>{\"news\"=>\"https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9\"}}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Production-ready YJIT\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>false, \"summary\"=>\"Regexp improvements against ReDoS\"}\n{\"type\"=>\"internals\", \"tags\"=>[], \"experimental\"=>false, \"summary\"=>\"IRB improvements (SyntaxSuggest, ErrorHighlight)\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"bundler\"], \"experimental\"=>false, \"summary\"=>\"Bundler 2.4 now uses PubGrub resolver instead of Molinillo\"}"},{"category":"Ruby 3.1","task":"3.1.4","start":"2023-03-30","end":"2023-09-09","color":"rgb(255, 40, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.3","start":"2022-11-24","end":"2023-03-30","color":"rgb(255, 32, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.2","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 24, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.1","start":"2022-02-18","end":"2022-04-12","color":"rgb(255, 16, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.1","task":"3.1.0","start":"2021-12-25","end":"2022-02-18","color":"rgb(255, 8, 0)","info":"Supported\n{\"name\"=>\"MRI 3.1.4\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"experimental\"=>true, \"summary\"=>\"YJIT: New experimental in-process JIT compiler\", \"links\"=>{\"news\"=>\"https://shopify.engineering/yjit-just-in-time-compiler-cruby\"}, \"detailsCode\"=>[\"--yjit # CLI option\"]}\n{\"type\"=>\"new\", \"tags\"=>[\"debug\"], \"summary\"=>\"debug gem: A new debugger\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"error_highlight: Fine-grained error location in backtrace\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"IRB Autocomplete and Documentation Display\"}\n{\"type\"=>\"update\", \"summary\"=>\"Values in Hash literals and keyword arguments can be omitted.\", \"detailsCode\"=>[\"{x:, y:} is syntax sugar for {x: x, y: y}\", \"foo(x:, y:) is syntax sugar for foo(x: x, y: y).\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Updates in RBS / TypeProf\"}"},{"category":"Ruby 3.0","task":"3.0.6","start":"2023-03-30","end":"2023-09-09","color":"rgb(255, 28, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.5","start":"2022-11-24","end":"2022-11-24","color":"rgb(255, 24, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.4","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 20, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.3","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 16, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.2","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 12, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.1","start":"2021-04-05","end":"2021-07-07","color":"rgb(255, 8, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 3.0","task":"3.0.0","start":"2020-12-25","end":"2021-04-05","color":"rgb(255, 4, 0)","info":"Supported\n{\"name\"=>\"MRI 3.0.6\", \"url\"=>\"https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/\"}\n{\"type\"=>\"internals\", \"tags\"=>[\"performance\"], \"summary\"=>\"MJIT improvements\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Ractor - Actor-model like concurrent abstraction\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"concurrency\"], \"summary\"=>\"Fiber Scheduler for light-weight concurrency\"}\n{\"type\"=>\"new\", \"tags\"=>[\"typing\"], \"summary\"=>\"RBS - a language to describe the structure of Ruby classes\", \"links\"=>{\"news\"=>\"https://github.com/ruby/rbs\"}, \"detailsCode\"=>[\"class User\", \" attr_reader login: String\", \" attr_reader email: String\", \" def initialize: (login: String, email: String) -> void\", \"end\"]}\n{\"type\"=>\"new\", \"experimental\"=>true, \"tags\"=>[\"typing\"], \"summary\"=>\"TypeProf - type analysis tool, generates RBS type signatures\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#except
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments are separated from other arguments\", \"detailsCode\"=>[\"def foo(key: 42); end; foo({key: 42}) # won't work!\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Rightward assignment statement\", \"detailsCode\"=>[\"fib(10) => a\", \"a #=> 55\"]}\n{\"type\"=>\"update\", \"experimental\"=>true, \"summary\"=>\"Reversed (again) order of backtrace \", \"detailsCode\"=>[\"Error message first, caller later.\", \"This reverts change from Ruby 2.5.0.\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Endless method definition def square(x) = x * x
\"}"},{"category":"Ruby 2.7","task":"2.7.7","start":"2022-11-24","end":"2023-09-09","color":"rgb(255, 192, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.6","start":"2022-04-12","end":"2022-11-24","color":"rgb(255, 168, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.5","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 144, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.4","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 120, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.3","start":"2021-04-05","end":"2021-07-07","color":"rgb(255, 96, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.2","start":"2020-10-02","end":"2021-04-05","color":"rgb(255, 72, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.1","start":"2020-03-31","end":"2020-10-02","color":"rgb(255, 48, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.7","task":"2.7.0","start":"2019-12-25","end":"2020-03-31","color":"rgb(255, 24, 0)","info":"Security maintenance phase\n{\"name\"=>\"MRI 2.7.7\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/11/24/ruby-2-7-7-released/\"}\n{\"type\"=>\"new\", \"experimental\"=>true, \"summary\"=>\"Pattern Matching\", \"detailsCode\"=>[\"case [0, [1, 2, 3]] in [a, [b, *c]]\", \"a # => 0\", \"b # => 1\", \"c # => [2, 3]\"], \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#pattern-matching-\"}}\n{\"type\"=>\"update\", \"summary\"=>\"REPL improvements\"}\n{\"type\"=>\"update\", \"summary\"=>\"Separation of positional and keyword arguments\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#the-spec-of-keyword-arguments-is-changed-towards-30-\"}, \"detailsCode\"=>[\"// To treat last hash argument as keywords, add a double splat operator\", \"// (to avoid the warning and ensure correct behavior in Ruby 3)\", \"def foo(key: 42); end; foo({key: 42}) # warned\", \"def foo(key: 42); end; foo(**{key: 42}) # OK\"]}\n{\"type\"=>\"update\", \"summary\"=>\"Argument forwarding\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_7/NEWS#other-miscellaneous-changes-\", \"post\"=>\"https://www.mendelowski.com/docs/ruby/new-way-for-argument-forwarding-in-27/\", \"rblang\"=>\"https://bugs.ruby-lang.org/issues/16253\"}, \"detailsCode\"=>[\"// parentheses are mandatory\", \"def foo(...)\", \" bar(...)\", \"end\"]}\n{\"type\"=>\"internals\", \"summary\"=>\"Compaction GC\"}"},{"category":"Ruby 2.6","task":"2.6.10","start":"2022-04-12","end":"2022-03-31","color":"rgb(255, 231, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.9","start":"2021-11-24","end":"2022-04-12","color":"rgb(255, 210, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.8","start":"2021-07-07","end":"2021-11-24","color":"rgb(255, 189, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.7","start":"2020-04-05","end":"2021-07-07","color":"rgb(255, 168, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.6","start":"2020-03-31","end":"2020-04-05","color":"rgb(255, 147, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.5","start":"2019-10-01","end":"2020-03-31","color":"rgb(255, 126, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.4","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 105, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.3","start":"2019-04-17","end":"2019-08-28","color":"rgb(255, 84, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.2","start":"2019-03-13","end":"2019-04-17","color":"rgb(255, 63, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.1","start":"2019-01-30","end":"2019-03-13","color":"rgb(255, 42, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.6","task":"2.6.0","start":"2018-12-25","end":"2019-01-30","color":"rgb(255, 21, 0)","info":"All maintenance ended on March 31, 2022\n{\"name\"=>\"MRI 2.6.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2022/04/12/ruby-2-6-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"endless ranges (1..)
\", \"links\"=>{\"news\"=>\"https://github.com/ruby/ruby/blob/ruby_2_6/NEWS#language-changes-\", \"grep-app\"=>\"https://grep.app/search?q=%281..%29&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#chain
\"}\n{\"type\"=>\"new\", \"summary\"=>\"function composition operators <<, >>
to Proc
\"}\n{\"type\"=>\"update\", \"summary\"=>\"#then
alias for #yield_self
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"JIT compiler --jit
\"}\n{\"type\"=>\"internals\", \"summary\"=>\"Bundler is installed as a default gem\"}"},{"category":"Ruby 2.5","task":"2.5.9","start":"2021-04-05","end":"2021-03-31","color":"rgb(255, 180, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.8","start":"2020-03-31","end":"2021-04-05","color":"rgb(255, 162, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.7","start":"2019-10-01","end":"2020-03-31","color":"rgb(255, 144, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.6","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 126, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.5","start":"2019-03-15","end":"2019-08-28","color":"rgb(255, 108, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.4","start":"2019-03-13","end":"2019-03-15","color":"rgb(255, 90, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.3","start":"2018-10-18","end":"2019-03-13","color":"rgb(255, 72, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.2","start":"2018-10-17","end":"2018-10-18","color":"rgb(255, 54, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.1","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 36, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.5","task":"2.5.0","start":"2017-12-25","end":"2018-03-28","color":"rgb(255, 18, 0)","info":"All maintenance ended on March 31, 2021\n{\"name\"=>\"MRI 2.5.9\", \"url\"=>\"https://www.ruby-lang.org/en/news/2021/04/05/ruby-2-5-9-released/\"}\n{\"name\"=>\"JRuby 9.2.0.0\", \"url\"=>\"https://www.jruby.org/2018/05/24/jruby-9-2-0-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"yield_self
\", \"detailsCode\"=>[\"// Unlike #tap, it returns the result of the block.\", \"// yield_self is like #map for single object.\", \"'Hello'.yield_self { |word| word.upcase }\", \"=> 'HELLO'\", \"['Hello'].map { |word| word.upcase }.first\", \"=> 'HELLO'\"], \"links\"=>{\"grep-app\"=>\"https://grep.app/search?q=%5C.yield_self®exp=true&filter[lang][0]=Ruby\"}}\n{\"type\"=>\"new\", \"summary\"=>\"rescue
in blocks\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#slice
and Hash#transform_keys
\"}\n{\"type\"=>\"new\", \"summary\"=>\"ERB#result_with_hash
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New Array
aliases - #prepend (#unshift)
and #append (#push)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Pattern argument on Enumerable
methods\"}\n{\"type\"=>\"update\", \"summary\"=>\"Keyword arguments on Struct.new
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Removed Top-level constant lookup\"}\n{\"type\"=>\"update\", \"summary\"=>\"Reverse order of backtrace (oldest call first)\", \"experimental\"=>true, \"detailsCode\"=>[\"Only when printed to terminal directly.\", \"This will be reversed again in Ruby 3.0.0\"]}"},{"category":"Ruby 2.4","task":"2.4.10","start":"2020-03-31","end":"2020-03-31","color":"rgb(255, 165, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.9","start":"2019-10-02","end":"2020-03-31","color":"rgb(255, 150, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.8","start":"2019-10-01","end":"2019-10-02","color":"rgb(255, 135, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.7","start":"2019-08-28","end":"2019-10-01","color":"rgb(255, 120, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.6","start":"2019-04-01","end":"2020-03-31","color":"rgb(255, 105, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.5","start":"2018-10-17","end":"2019-04-01","color":"rgb(255, 90, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.4","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 75, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.3","start":"2017-12-14","end":"2018-03-28","color":"rgb(255, 60, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.2","start":"2017-09-14","end":"2017-12-14","color":"rgb(255, 45, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.1","start":"2017-03-22","end":"2017-09-14","color":"rgb(255, 30, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.4","task":"2.4.0","start":"2016-12-25","end":"2017-03-22","color":"rgb(255, 15, 0)","info":"All maintenance ended on March 31, 2020\n{\"name\"=>\"MRI 2.4.10\", \"url\"=>\"https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-4-10-released/\"}\n{\"type\"=>\"new\", \"summary\"=>\"Enumerable#sum
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Integer#digits
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Regexp#match?
, Regexp#named_captures
\"}\n{\"type\"=>\"update\", \"summary\"=>\"New constructor Logger.new(STDOUT, level:, progname:)
\"}\n{\"type\"=>\"update\", \"summary\"=>\"Float: #round
, #ceil
, #floor
, and #truncate
now accept a precision\"}\n{\"type\"=>\"removed\", \"summary\"=>\"Removed Fixnum
and Bignum
classes (unified to Integer
)\"}"},{"category":"Ruby 2.3","task":"2.3.8","start":"2018-10-17","end":"2019-03-31","color":"rgb(255, 108, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.7","start":"2018-03-28","end":"2018-10-17","color":"rgb(255, 96, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.6","start":"2017-12-14","end":"2018-03-28","color":"rgb(255, 84, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.5","start":"2017-09-14","end":"2017-12-14","color":"rgb(255, 72, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.4","start":"2017-03-30","end":"2017-09-14","color":"rgb(255, 60, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.3","start":"2016-11-21","end":"2017-03-30","color":"rgb(255, 48, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.2","start":"2016-11-15","end":"2016-11-21","color":"rgb(255, 36, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.1","start":"2016-04-26","end":"2016-11-15","color":"rgb(255, 24, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"},{"category":"Ruby 2.3","task":"2.3.0","start":"2015-12-25","end":"2016-04-26","color":"rgb(255, 12, 0)","info":"All maintenance ended on March 31, 2019\n{\"name\"=>\"MRI 2.3.8\", \"url\"=>\"https://www.ruby-lang.org/en/news/2018/10/17/ruby-2-3-8-released\"}\n{\"name\"=>\"JRuby 9.1.17.0\", \"url\"=>\"https://www.jruby.org/2018/04/23/jruby-9-1-17-0\"}\n{\"type\"=>\"new\", \"summary\"=>\"Safe navigation operator &.
\", \"discussion\"=>\"https://bugs.ruby-lang.org/issues/11537\"}\n{\"type\"=>\"new\", \"summary\"=>\"Frozen string literals\"}\n{\"type\"=>\"new\", \"summary\"=>\"Array#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"Hash#fetch_values
, Hash#to_proc
, Hash#dig
\"}\n{\"type\"=>\"new\", \"summary\"=>\"'Did you mean?'\"}"}]
chart.dateFormatter.dateFormat = "yyyy-MM-dd";
chart.dateFormatter.inputDateFormat = "yyyy-MM-dd";
@@ -92,12 +92,12 @@ 3.2.0 (Dec 2022) - 3.1.2 (Apr 2022).
+3.2.0 (Dec 2022) - 3.2.2 (March 2023).
Status: Supported