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/)
+ + + +- CVE [CVE-2023-28755: ReDoS vulnerability in URI..](https://www.ruby-lang.org/en/news/2023/03/28/redos-in-uri-cve-2023-28755/) + +- CVE [CVE-2023-28756: ReDoS vulnerability in Time..](https://www.ruby-lang.org/en/news/2023/03/30/redos-in-time-cve-2023-28756/) + +### Ruby [3.2.1](https://www.ruby-lang.org/en/news/2022/02/08/ruby-3-2-1-released/)
+ + + ### Ruby [3.2.0](https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/)
@@ -21,6 +33,14 @@ ## Ruby 3.1 +### Ruby [3.1.4](https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-1-4-released/)
+ + + +- CVE [CVE-2023-28755: ReDoS vulnerability in URI..](https://www.ruby-lang.org/en/news/2023/03/28/redos-in-uri-cve-2023-28755/) + +- CVE [CVE-2023-28756: ReDoS vulnerability in Time..](https://www.ruby-lang.org/en/news/2023/03/30/redos-in-time-cve-2023-28756/) + ### Ruby [3.1.3](https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-1-3-released/)
@@ -56,6 +76,14 @@ ## Ruby 3.0 +### Ruby [3.0.6](https://www.ruby-lang.org/en/news/2023/03/30/ruby-3-0-6-released/)
+ + + +- CVE [CVE-2023-28755: ReDoS vulnerability in URI..](https://www.ruby-lang.org/en/news/2023/03/28/redos-in-uri-cve-2023-28755/) + +- CVE [CVE-2023-28756: ReDoS vulnerability in Time..](https://www.ruby-lang.org/en/news/2023/03/30/redos-in-time-cve-2023-28756/) + ### Ruby [3.0.5](https://www.ruby-lang.org/en/news/2022/11/24/ruby-3-0-5-released/)
@@ -543,4 +571,4 @@ ---- -(Last updated on 2023-01-24 00:02:37 +0100) +(Last updated on 2023-09-09 14:36:15 +0200) diff --git a/docs/docs/versions-latest.md b/docs/docs/versions-latest.md index 0393fb1..1555343 100644 --- a/docs/docs/versions-latest.md +++ b/docs/docs/versions-latest.md @@ -6,7 +6,7 @@ -## Ruby 3.2.0
+## Ruby 3.2.2
- Internals WASI based WebAssembly support @@ -27,7 +27,7 @@ -## Ruby 3.1.3
+## Ruby 3.1.4
- Internals YJIT: New experimental in-process JIT compiler (experimental) @@ -67,7 +67,7 @@ foo(x:, y:) is syntax sugar for foo(x: x, y: y). -## Ruby 3.0.5
+## Ruby 3.0.6
- Internals MJIT improvements @@ -346,4 +346,4 @@ This will be reversed again in Ruby 3.0.0 ---- -(Last updated on 2023-01-24 00:02:37 +0100) +(Last updated on 2023-09-09 14:36:15 +0200) diff --git a/index.html b/index.html index 797328e..a62be61 100644 --- a/index.html +++ b/index.html @@ -34,7 +34,7 @@ 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":"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 @@

Ruby versions changelog

Ruby 3.2.x
-

3.2.0 (Dec 2022) - 3.1.2 (Apr 2022).

+

3.2.0 (Dec 2022) - 3.2.2 (March 2023).

Status: Supported

Implementations: - MRI 3.2.0 + MRI 3.2.2