

Discover more from Short Ruby Newsletter
👋 Issue #12 - 26 Sep - 02 Oct 2022
If you want a short excerpt of this newsletter containing only some of the images with code, I created one here. But I invite you to read the entire newsletter as it has excellent content 😊.
This edition was created with support from @adrianthedev from Avo for Ruby on Rails (a friendly full-featured Rails admin panel) and from @jcsrb, who sent me recommendations to include in the newsletter.
I feel the same 👇

👉 Thiago Massa shared how to assign the previous result in Rails console:

👉 Greg Navis shared code sample for using ActiveModel to validate forms without persistence

👉 Kirill Shevchenko shared code sample about using Ruby defined?:

and here is a reply from Josh Cheek:

👉 Matt Swanson shared code sample about using compact_blank method:

Lucian Ghinda added to the conversation some ideas in case performance is important:

👉 Peter Solnica shared a sample code showing how to use rightward assignment while verifying a service result:

👉 Steve Polito shared a migration example about create database index based on type cast value of a column:

👉 Thiago Massa shared a configuration option to enable strict loading model that will raise error on N+1:

👉 Jason Swett shared a nice opinion about what people call Rails magic is not exactly magic and we should think about it more like well documented rules:

👉 Greg Navis shared about conditional class names in Rails ERB:

👉 Brad Gessler shared a code sample about running ActiveJob on Fly.io:

👉 Brad Gessler shared a code sample about making markdown-rails renderer work well, including code highlighting and Youtube tags

You should read the entire thread and see it working on his view-playground Rail app on Github. Also, if you want to use it in your rails app, Brad shared how.
👉 Dorian shared how to use ActionController::Parameters with_defaults,
which seems to be an alias for reverse_merge
:

👉 Joel Drapper asked about how Zeitwerk works when handling conflicting root directories:


You can read more about how nested root directories are loaded in Zeitwerk docs here.
He then added a suggestion about how to namespace files in a directory:

👉 Thiago Massa shared how to run a small piece on code in your Rails app context (like you will run it in the Rails console):

👉 Akshay shared a code sample about how to use Configurable concern:

👉 Kirill Shevchenko shared how to use Ruby built-in Tempfile class:

Please note that Mika Henriksson warned:
Can have weird “disappearing” side effects inside a docker container though.
Alpine Linux issue perhaps with the temp directory but it caused me a lot of headache. Problem went away after using regular files and cleaning them up after usage.
👉 Robbyrussell.Rb shared how to open a gem in an editor and look at the source code:

Here is a summary from all replies and with one thing that I added there about how to explore local installed gems source code:
👉 Prabin Poudel shared a Rails anti-pattern thread talking about violation of MVC pattern by adding finders in views and controllers:

👉 Benoit Benoit shared a new feature, just merged to Rails master (probably will be part of Rails 7.1) about conditionally setting log level:

👉 Thiago Massa shared a code sample about strings and freeze and symbols:

It is also worth considering this reply from Josh Cheek, adding more context:

👉 Kirill Shevchenko shared how to enable YJIT when using Ruby 3.1:

👉 David Copeland asked a question about how to group db updates and enqueue job in a fault-tolerant way:

There are a couple of solutions proposed there:
Using interactor rollback
Using the newly published changeset gem (you can see an example of code behind this idea of changeset here)
Using Acidic Job principles and ideas - see an example here - but I recommend you to read this thread where David asks questions about the code shared by Stephen to understand more why that solution is written like that.
👉 Thiago Massa shared a code sample about numbered params in Ruby:

Lucian added this context about how numbered params work:

It is also worth reading this exchange started with Joel reply about wanting an alias for _1.
If you are interested to read more about numbered params:
Read this ticket on Ruby where people discuss
it
And then this one about re-reconsidering
it
I think it is worth having an alias for _1, and it seems like `it` could be great for that.
👉 Greg Navis shared a code sample showing how to use queue_as with a block to route jobs to different queues:

👉 Cezar Halmagean shared a thread about how to migrate from import maps to esbuild:
👉 Fullstack Ruby shared about ::Data being merged to Ruby master:

Read the PR on Github for more details about this. Here is a short snapshot of the description provided on the PR by Victor Shepelev:
👉 Greg Navis shared a code sample about filtering sensitive attributes in Active Record:

As John Duff noted, this will only filter sensitive information while inspecting. Add params filtering, not to write sensitive information in logs.
👉 Colleen Schnettler asked what the most important Rails library/gem/package is:

Here are some of the responses:
annotate, awesome_print, better_errors, bullet, bundle-audit, byebug, capybara, chusaku, devise, draper, dry-monads, dry-validation, faker, faraday, flipper, guard, haml-rails, http.rb, js-routes, kaminari, lockbox, pagy, pay, prosopite, pry-rails, pry-usable, pundit, railseventstore, retest, rspec-rails, rubocop, shoulda, sidekiq, skunk, sorbet-runtime, strong_migrations
👉 Kirill Shevchenko shared a code sample about calling lambda and proc with square brackets in Ruby:

Josh Cheek added 7 ways to call a proc in Ruby (read more about it here):

👉 Nick Schwaderer asked about problems with Rails:

Here are some of the answers:
If you read so far and you like the content, maybe you take into consideration sharing this and subscribe:
Related (but not Ruby specific)
🧐 Richard Schneeman shared a good thread about how to contribute to open source

🧐 Brandon Weaver shared an idea about a healthy mindset fore growing and learning:

🧐 Yasuhiro Matsumoto shared a nice perspective about some of the debates regarding programming languages

🧐 Heroku announced their new low-cost plans:

Read the official announcement here and see some reactions here on Reddit /r/ruby
There seems to be another announcement about a partnership with Github to offer Student Developer Program/
If you are an educator not from University you should give feedback on this Github issue and say what you need or how you see the support for this community.
🧐 Dave Paola asked what we do to familiarize ourselves with a new codebase:

Here are some of the answers to this question:
🧐 Shopify Engineering asked about what advice one would give to interns or CS students:

Here are some answers to this question, and I invite you to read the entire conversation as it has a lot more ideas:
🧐 Jason Swett shared hot take about frameworks:

He also added this in one of the replies:
Keeping large amounts of code understandable requires skill, and tools can't be a substitute for skill. (That's why frameworks can only help in the early stages, because they're tools.) - source @JasonSweet on Twitter
🧐 Adrian Marin shared a thread about a category of persona present on social media - the toxic developer.

It is also worth considering this response from Mika Henriksson:

Articles and Videos
Courses or Books or Communities
📚 Richard Schneeman launched their new book How to Open Source. Buy the book at howtoopensource.dev
🎥 Noah Gibbs shared the video playlist of Ruby Learning Center. See it here
Something to read
Newsletters
🗞 Emmanuel Hayford shared a new edition of This Week in Rails.
🗞 Marc Busqué shared their OSS update for September 2022.
🗞 Joe Masilotti shared the September edition of The Hotwire dev newsletter
🗞 Ruby LibHunt published their 332 edition of Awesome Ruby Newsletter
🗞 Ruby Weekly published their 622 edition Sidekiq 7 (beta) and Sinatra 3 (for real)
🗞 Ruby Radar published their 70 edition Hackathon Success
Articles
✍🏾 Austin Gil shared a nice cool hidden feature of VS Code: Timeline view
✍🏾 Robby Russell shared an older article with very good information about how to take over an existing Rails app
✍🏾 Sam Ruby shared an article about how to run Ruby on Rails via region replicated sqlite 3 (what Fly calls LiteFS - distributed file system built for replication SQLite databases)
✍🏾 Steve Polito shared an article about detecting anomalies in user behavior using PostgreSQL
Something to watch 🎥 or listen 🎧
Videos
🎥 Drifting Ruby shared a new episode Downloading Cloud Database. See it on driftingruby.com
🎥 Eric Berry shared an old (but still relevant) video about Arel by Cameron Dutro. See it Advanced aRel: When ActiveRecord Just Isn't Enough
🎥 Go Rails shared a new video created by Collin Jilbert. See it → How to Deploy Rails to Render
🎥 Justin Searls shared a video they created to show a new way to sort Ruby objects. See → A better way to Sort Ruby Objects
🎥 Janko Marohnić shared a video they streamed about adding admin accounts to the Rodauth demo Rails app. See Adding admin accounts with Rodauth
🎥 Drifting Ruby shared the video log for This Week in Rails. See This Week in Rails Sept 30th, 2022
🎥 Aaron Patterson shared a live stream with Vinicius Stock where they play around with Language Servers. See Pairin' with Aaron: Messing with Language Servers
🎥 Adrian Marin recommended we watch a video by Rafał Rothenberger from wroclove.rb conference. See Devise pitfalls and way to tighten security
🎥 Joel Drapper shared a pairing session with Stephen Margheim working on the Phlex compiler. See Phlex Ruby Compiler
Audio & Podcasts
🎧 The Ruby on Rails Podcast shared a new Ruby on Rails podcast episode. Listen → It's Not Only Sauerkraut and Pickles (Brittany + Nick)
🎧 Schwad shared a Twitter space recording named “Code with Jason LIVE!! It’s not a goodbye forever”. Listen here
🎧 Ruby For All shared a new episode they published where they talk about interviews with Brandon Weaver. Listen to Understanding Interviews with Brandon Weaver
🎧 Remote Ruby shared a new episode about Rails Hackathon and Turbo 7.2 release. Listen to Rails Hackathon 2022 & Turbo 7.2 release
Gems, Libraries, and Updates
🧰 Avo shared a new release of their powerful and flexible Rails admin. Check the release notes here or see a video of the new features here.
🧰 Lázaro Nixon shared a Github repo of Trix extensions. See them here: github.com/lazaronixon. Examples of what you can find there: multiple headings and choosing between multiple colors.
🧰 Mike Perham shared a Sidekiq 7.0 release. See the changelog. It comes with very nice things.
🧰 Eric Berry shared a new gem used for debugging whoop. Here are some examples:
Among the most exciting parts is the ability to add :explain for logging SQLs.
🧰 Kasper Timm Hansen launched a new gem called active_job-performs that adds the performs macro to setup job by convention. Here is an example:
🧰 Julian Rubisch shared their gem attractor for generating a report with code complexity metrics for Ruby and Javascript. This is a cool gem for knowing how your code base is.
Justin Searls shared a video that contained a new gem called put that helps with sorting arrays. Here is how the code looks like:
🧰 Joel Drapper announced a change in Phlex from Phlex::Components to Phlex::Views:

🎸 Music to listen to while coding
This is just something extra this week, as I discovered on Reddit r/ruby two excellent playlists to listen to while coding:
Please consider sharing this on social media or with your colleagues: