{"id":307530,"date":"2020-07-27T09:00:37","date_gmt":"2020-07-27T09:00:37","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=307530"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=307530","title":{"rendered":"Ruby Digest 2020 \u0441 01.07 \u043f\u043e 15.07"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/512540\/\">Ruby Digest 2020 \u0441 1 \u043f\u043e 15 \u0438\u044e\u043b\u044f: \u0440\u0435\u043b\u0438\u0437\u044b, \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430, \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f, <br \/>  \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0438\u044e\u043b\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u044f\u0437\u044b\u043a\u0430 Ruby.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/k2\/mr\/ov\/k2mrovax58zglqrsms1gn9a8zau.png\" alt=\"image\"><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0420\u0435\u043b\u0438\u0437\u044b<\/h2>\n<p>  <\/p>\n<h4>\u041d\u043e\u0432\u0438\u043d\u043a\u0438<\/h4>\n<p>  <a href=\"https:\/\/github.com\/anycable\/anycable\/tree\/v1.0.0\" rel=\"nofollow\">AnyCable 1.0.0<\/a> \u2014 \u043c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 Ruby WebSocket-\u0433\u0435\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WebSocket \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c Action Cable. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c \u0433\u0435\u043c \u0434\u043b\u044f <a href=\"https:\/\/rubyonrails.org\/\" rel=\"nofollow\">Ruby on Rails<\/a> \u2014 <a href=\"https:\/\/github.com\/anycable\/anycable-rails\/tree\/v1.0.0\" rel=\"nofollow\">AnyCable Rails 1.0.0<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/aws\/aws-sdk-ruby\/blob\/master\/gems\/aws-sdk-ivs\/CHANGELOG.md\" rel=\"nofollow\">aws-sdk-ivs 1.0.0<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u043c \u043e\u0442 AWS \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e <a href=\"https:\/\/aws.amazon.com\/ivs\/\" rel=\"nofollow\">Amazon IVS<\/a>. Aws-sdk-ivs \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e <a href=\"https:\/\/github.com\/aws\/aws-sdk-ruby\" rel=\"nofollow\">AWS SDK for Ruby<\/a>.<\/p>\n<h4>\u041d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438<\/h4>\n<p>  <a href=\"https:\/\/github.com\/shakacode\/react_on_rails\/tree\/12.0.0\" rel=\"nofollow\">React on Rails 12.0.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 <a href=\"https:\/\/rubyonrails.org\/\" rel=\"nofollow\">Ruby on Rails<\/a> \u0438 <a href=\"https:\/\/ru.reactjs.org\/\" rel=\"nofollow\">React<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/discourse\/onebox\/tree\/v2.0.0\" rel=\"nofollow\">Onebox 2.0.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f URL-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 HTML-\u043f\u0440\u0435\u0432\u044c\u044e \u0440\u0435\u0441\u0443\u0440\u0441\u0430.<\/p>\n<p>  <a href=\"https:\/\/github.com\/capistrano\/bundler\/tree\/v2.0.0\" rel=\"nofollow\">Capistrano::Bundler 2.0.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 <a href=\"https:\/\/bundler.io\/\" rel=\"nofollow\">Bundler<\/a>\u0430 \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/capistrano\/capistrano\" rel=\"nofollow\">Capistrano<\/a>.<\/p>\n<p>  <a href=\"https:\/\/restforce.github.io\/\" rel=\"nofollow\">Restforce 5.0.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Salesforce API \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 <a href=\"https:\/\/www.salesforce.com\/\" rel=\"nofollow\">Salesforce<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/hidakatsuya\/prawn-emoji\/tree\/v4.0.0\" rel=\"nofollow\">Prawn::Emoji 4.0.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043c\u043e\u0434\u0437\u0438 \u0432 pdf-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/prawnpdf\/prawn\" rel=\"nofollow\">Prawn<\/a> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/kh\/_w\/lb\/kh_wlbppupidhrdtyl_gkwyfdb8.png\" alt=\"image\"><\/p>\n<h4>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/h4>\n<p>  <a href=\"https:\/\/github.com\/ruby-grape\/grape\/tree\/v1.4.0\" rel=\"nofollow\">Grape 1.4.0<\/a> \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 DSL \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 RESTful API-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <a href=\"https:\/\/github.com\/ruby-grape\/grape-swagger\/tree\/v1.2.0\" rel=\"nofollow\">Grape-swagger 1.2.0<\/a> \u2014 \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 Grape API.<\/p>\n<p>  <a href=\"https:\/\/github.com\/mperham\/sidekiq\/tree\/v6.1.0\" rel=\"nofollow\">Sidekiq 6.1.0<\/a> \u2014 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043b\u044f Ruby.<\/p>\n<p>  <a href=\"https:\/\/github.com\/fxn\/zeitwerk\/tree\/v2.4.0\" rel=\"nofollow\">Zeitwerk 2.4.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 (\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <a href=\"https:\/\/rubyonrails.org\/\" rel=\"nofollow\">Ruby on Rails<\/a>).<\/p>\n<p>  <a href=\"https:\/\/github.com\/capistrano\/rails\/tree\/v1.6.0\" rel=\"nofollow\">Capistrano::Rails 1.6.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 <a href=\"https:\/\/rubyonrails.org\/\" rel=\"nofollow\">Rails<\/a> \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/capistrano\/capistrano\" rel=\"nofollow\">Capistrano<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/Dynamoid\/dynamoid\/tree\/v3.6.0\" rel=\"nofollow\">Dynamoid 3.6.0<\/a> \u2014 Ruby ORM \u0434\u043b\u044f <a href=\"https:\/\/aws.amazon.com\/dynamodb\/\" rel=\"nofollow\">Amazon DynamoDB<\/a>.<\/p>\n<p>  <a href=\"http:\/\/projectblacklight.org\/\" rel=\"nofollow\">Blacklight<\/a> <a href=\"https:\/\/github.com\/projectblacklight\/blacklight\/tree\/v7.10.0\" rel=\"nofollow\">7.10.0<\/a> \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u043c \u043f\u043e\u0438\u0441\u043a \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/lucene.apache.org\/solr\/\" rel=\"nofollow\">Solr<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/geoblacklight\/geoblacklight\/tree\/v2.4.0\" rel=\"nofollow\">GeoBlacklight 2.4.0<\/a> \u2014 \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 <a href=\"http:\/\/projectblacklight.org\/\" rel=\"nofollow\">Blacklight<\/a> \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u0433\u0435\u043e\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c <a href=\"https:\/\/lucene.apache.org\/solr\/\" rel=\"nofollow\">Solr<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/traject\/traject\/tree\/v3.4.0\" rel=\"nofollow\">Traject 3.4.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 MARC \u0438\u043b\u0438 XML \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/lucene.apache.org\/solr\/\" rel=\"nofollow\">Solr<\/a> (\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 <a href=\"http:\/\/projectblacklight.org\/\" rel=\"nofollow\">Blacklight<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/vufind.org\/vufind\/\" rel=\"nofollow\">VuFind<\/a>).<\/p>\n<p>  <a href=\"https:\/\/github.com\/Shopify\/shopify_api\/tree\/v9.2.0\" rel=\"nofollow\">Shopify API 9.2.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432 \u043d\u0430 <a href=\"https:\/\/developers.shopify.com\/\" rel=\"nofollow\">Shopify<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/guilhermesad\/rspotify\/tree\/v2.9.0\" rel=\"nofollow\">RSpotify 2.9.0<\/a> \u2014 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f <a href=\"https:\/\/developer.spotify.com\/documentation\/web-api\/\" rel=\"nofollow\">Spotify Web API<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/shinesolutions\/ruby_aem\/tree\/3.8.0\" rel=\"nofollow\">Ruby_aem 3.8.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f <a href=\"https:\/\/www.adobe.com\/ru\/marketing\/experience-manager.html\" rel=\"nofollow\">Adobe Experience Manager API<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/HireFrederick\/booker_ruby\/tree\/3.4.0\" rel=\"nofollow\">Booker Ruby Client 3.4.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043e\u043d\u043b\u0430\u0439\u043d-\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/www.booker.com\/\" rel=\"nofollow\">Booker API<\/a>.<\/p>\n<h2>\u041f\u043e\u0447\u0438\u0442\u0430\u0442\u044c<\/h2>\n<p>  <a href=\"https:\/\/sandimetz.com\/99bottles-sample-ruby\" rel=\"nofollow\">99 Bottles of OOP, Ruby Version<\/a> \u2014 \u043d\u043e\u0432\u0430\u044f \u043a\u043d\u0438\u0433\u0430 \u00ab99 \u0431\u0443\u0442\u044b\u043b\u043e\u043a \u041e\u041e\u041f, Ruby \u0432\u0435\u0440\u0441\u0438\u044f\u00bb.<\/p>\n<p>  <a href=\"https:\/\/evilmartians.com\/chronicles\/anycable-1-0-four-years-of-real-time-web-with-ruby-and-go\" rel=\"nofollow\">AnyCable 1.0: Four years of real-time web with Ruby and Go<\/a> \u2014 AnyCable 1.0: \u0427\u0435\u0442\u044b\u0440\u0435 \u0433\u043e\u0434\u0430 \u0412\u0435\u0431\u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 Ruby \u0438 Go.<\/p>\n<p>  <a href=\"https:\/\/syndicode.com\/2020\/07\/08\/why-is-ruby-still-our-choice-in-2020-2\/\" rel=\"nofollow\">Why is Ruby still our choice in 2020?<\/a> \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 2020 \u0433\u043e\u0434\u0443 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0430\u0448 \u0432\u044b\u0431\u043e\u0440 \u2014 Ruby?<\/p>\n<p>  <a href=\"https:\/\/evilmartians.com\/chronicles\/apollo-launch-building-a-migration-architecture-for-2u\" rel=\"nofollow\">Apollo launch: Building a migration architecture for 2U<\/a> \u2014 \u0437\u0430\u043f\u0443\u0441\u043a Apollo: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f <a href=\"https:\/\/2u.com\/\" rel=\"nofollow\">2U<\/a>.<\/p>\n<p>  <a href=\"https:\/\/dev.to\/hkly\/ruby-s-safe-navigation-operator-and-is-it-a-code-smell-4hd9\" rel=\"nofollow\">Ruby&#8217;s Safe Navigation Operator `&amp;.` and is it a Code Smell?<\/a> \u2014 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 `<code>&amp;.<\/code>` \u0432 Ruby \u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0445\u0438\u0432\u0430\u0435\u0442 \u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434?<\/p>\n<h2>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c<\/h2>\n<p>  <a href=\"https:\/\/share.transistor.fm\/s\/31cc36e3\" rel=\"nofollow\">Exploring HEY&#8217;s Gemfile<\/a> \u2014 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 HEY \u043e\u0442 Basecamp (<a href=\"https:\/\/gist.github.com\/dhh\/782fb925b57450da28c1e15656779556\" rel=\"nofollow\">DHH\u2019s Hey\u2019s Gemfile<\/a>).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=0losd7Sr9Zs\" rel=\"nofollow\">FullCalendar with StimulusJS<\/a> \u2014 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0434\u043b\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e <a href=\"https:\/\/stimulusjs.org\/\" rel=\"nofollow\">StimulusJS<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=6HnFAV4HOfI\" rel=\"nofollow\">Soft Delete with Discard<\/a> \u2014 \u043c\u044f\u0433\u043a\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441 <a href=\"https:\/\/github.com\/jhawthorn\/discard\" rel=\"nofollow\">Discard<\/a>.<\/p>\n<p>  <a href=\"https:\/\/dev.to\/devdiscuss\/s1-e4-should-ruby-still-be-a-thing-in-2020\" rel=\"nofollow\">Should Ruby Still Be a Thing in 2020<\/a> \u2014 \u043d\u0443\u0436\u0435\u043d \u043b\u0438 Ruby \u0432 2020-\u043e\u043c?<\/p>\n<p>  <a href=\"http:\/\/5by5.tv\/rubyonrails\/326\" rel=\"nofollow\">Job Searching and Hiring Advice During the Pandemic with Brian Mariani<\/a> \u2014 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u043f\u043e \u043d\u0430\u0439\u043c\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441 \u0411\u0440\u0430\u0439\u0430\u043d\u043e\u043c \u041c\u0430\u0440\u0438\u0430\u043d\u0438.<\/p>\n<p>  <a href=\"http:\/\/5by5.tv\/rubyonrails\/324\" rel=\"nofollow\">Rails::Engine with Vladimir Dementyev<\/a> \u2014 Rails::Engine \u0441 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u043e\u043c \u0414\u0435\u043c\u0435\u043d\u0442\u044c\u0435\u0432\u044b\u043c.<\/p>\n<h2>\u041f\u043e\u0438\u0437\u0443\u0447\u0430\u0442\u044c<\/h2>\n<p>  <a href=\"https:\/\/www.udemy.com\/course\/ruby-on-rails-6-learn-20-gems-build-an-e-learning-platform\/\" rel=\"nofollow\">Ruby on Rails 6: Learn 25+ gems and build a Startup MVP 2020<\/a> \u2014 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0443\u0440\u0441 \u00abRuby on Rails 6: \u0438\u0437\u0443\u0447\u0438\u0442\u0435 25+ \u0433\u0435\u043c\u043e\u0432 \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0439 MVP \u0441\u0442\u0430\u0440\u0442\u0430\u043f 2020\u00bb.<\/p>\n<p>  <a href=\"https:\/\/evilmartians.com\/chronicles\/system-of-a-test-setting-up-end-to-end-rails-testing\" rel=\"nofollow\">System of a test: Proper browser testing in Ruby on Rails<\/a> \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0435\u0441\u0442\u043e\u0432: \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Ruby on Rails.<\/p>\n<p>  <a href=\"https:\/\/dev.to\/hkly\/something-out-of-nothing-null-object-pattern-3clm\" rel=\"nofollow\">Something out of Nothing: Null Object Pattern<\/a> \u2014 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u043d\u0438\u0447\u0435\u0433\u043e: \u043f\u0430\u0442\u0442\u0435\u0440\u043d Null Object.<\/p>\n<p>  <a href=\"https:\/\/dev.to\/arjunrajkumar\/graphql-sql-magic-for-faster-downloads-on-shopify-31fc\" rel=\"nofollow\">GraphQL + SQL Magic for faster downloads on Shopify<\/a> \u2014 GraphQL + \u041c\u0430\u0433\u0438\u044f SQL \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 Shopify.<\/p>\n<p>  <a href=\"https:\/\/dev.to\/vinistock\/changing-ruby-classes-at-runtime-with-classeval-52m\" rel=\"nofollow\">Changing Ruby classes at runtime with class_eval<\/a> \u2014 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 Ruby \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>class_eval<\/code>.<\/p>\n<p>  <a href=\"https:\/\/dev.to\/annawijetunga\/oauth-heroku-play-nice-443e\" rel=\"nofollow\">OAuth &amp; Heroku Play Nice<\/a> \u2014 \u043d\u0430\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 OAuth \u0438 Heroku Play.<\/p>\n<p>  <a href=\"https:\/\/medium.com\/rubycademy\/is-module-function-really-the-same-as-extend-self-ac1e96a1cda0\" rel=\"nofollow\">Is module_function really the same as extend self?<\/a> \u2014 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 <code>module_function<\/code> \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 <code>extend self<\/code>?<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/512540\/\"> https:\/\/habr.com\/ru\/post\/512540\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/512540\/\">Ruby Digest 2020 \u0441 1 \u043f\u043e 15 \u0438\u044e\u043b\u044f: \u0440\u0435\u043b\u0438\u0437\u044b, \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430, \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f, <br \/>  \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0438\u044e\u043b\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u044f\u0437\u044b\u043a\u0430 Ruby.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/k2\/mr\/ov\/k2mrovax58zglqrsms1gn9a8zau.png\" alt=\"image\">  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-307530","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/307530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=307530"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/307530\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=307530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=307530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=307530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}