Short Ruby News - Edition #30
Briefly about everything happening in Ruby world - week 7 of 2023 (web edition)
You can jump directly to a section:
🧰 Gems, Libraries, and Updates
🤝 Related (but not Ruby-specific)
More content: 🎥 🎧 🗞 (articles, podcasts, videos, and newsletters)
🤗 Founding Members supporting this newsletter
You can subscribe for free
Or you can consider upgrading to paid
Investing in the Ruby Weekly Newsletter as a paid subscriber is a valuable way to support the community around you. For ~1.5$/week (6.5$ per month), you can support its growth and ensure that high-quality information about the latest developments in Ruby continues to be available to everyone, both paying and non-paying subscribers alike.
If you consider upgrading and want more information, please read Why to subscribe to paid
👐 Our Community
👐 Tiago Casanova asked an important question in our community:
👐Helvetic Ruby announced the Call for speakers is open:
👐 Aaron Patterson shared that Mastodon is now running on Ruby 3.2 (check the PR):
👐 Dave Paola shared a possible risk about how to make it so that we listen not only to good news but also we listen to critique and discuss it openly:
The thread has some nuances, and it is recommended that you read it in full and with good intentions :)
Here is a short discussion from the replies:
👐 ruby30th announced the list of lightning talks had been released.
Check the list here (or in English translated by Google here)
👐 Drew Bragg shared that the next Philly.rb that will happen on 21 February will be online and will have as guest Joel Drapper, the creator of Phlex
You can register here
👐Emmanuel Hayford celebrates the effort made by Petrik de Heus and zzak to improve ils Guides:
👐 Ruby Unconf announced the dates for Ruby Unconf 2023:
👉 All about Code and Ruby
👉Nate Berkopec shared a quick heuristic to decide between doing a call to DB or using Ruby:
He added an example:
✋ 👀 If you're a company or manager looking to hire top Ruby on Rails talent, I'd like to introduce you to RailsDevs (referral link). This unique platform puts the power back in the hands of developers by allowing them to post their profiles and empowering companies to reach out to them. I believe in the value RailsDevs can bring to the hiring process, and I'm confident you will.
👉Postmodern shared a benchmarking of dynamic dispatch (send) vs literal methods calls (check the code here):
👉Sb shared a code sample showing how they are using Phlex.fun at their own project Chestnut
👉 Nicolas Buduroi shared a code sample showing how to fix colors in IRB:
👉 Noah Gibbs started a discussion about the reason behind blindly adopting adopt Rubocop/Standard rules:
Here are some of the most interesting replies/followups, but I invite you to read the entire thread:
👉Dave Copeland shared their thoughts about abstractions:
👉 Joel Drapper shared a code sample showing how phlex-rails can work with the native Rails layout system:
👉Robby Russell shared a take that writing useful automated tests is not very easy:
👉Study Every Day shared asked about how to stop the Rails console autocomplete:
There were a couple of answers in the replies:
This will be disabled in the next Rails release. See this PR
👉Eric Berry asked about how to approach upgrading a large Rails app:
In the replies, there are recommendations for using one of these gems: deprecation_toolkit, next_rails or bootboot.
And also some more general advice:
👉Janko Marohnić shared a code sample showing how to configure test environment in Rails app to speed up boot time:
👉Eric Berry shared a code sample showing a bash command to run rails commands using separate Ruby versions:
👉David Teren asked about the recommended approach for Rails API pagination:
Among the recommendations:
👉Emmanuel Hayford shared a poll about upgrading to Rails 7.1. Based on the answers (194 votes) seems that more than 50% will upgrade very quickly to Rails 7.1:
👉Kevin Newton shared the way Ruby lexer disambiguate the
👉Greg Navis shared a thread about how object allocation and initialization are two different steps in Ruby:
👉Josef Strzibny shared a code sample showing how to run a Rake task from inside the Rails application:
👉Prabin Poudel shared a Rails method named
up_only that will run code only when creating a new table:
👉Eric Berry shared a code sample showing how to use Phlex with Hanami:
👉Tom Hockett shared a piece of code asking about the usage of
Konnor Rogers answered with:
👉Josef Strzibny shared a code sample about how to use use Rack tasks to pass environment variables:
👉Mohit Sindhwani (Onghu@Ruby.Social) shared the second part of their series about Ruby Learning by Reversing: Native Gems, Part 2
👉Andrea Rocca shared a thread about how to create with Hotwire a multiple select input (similar to StackOverflow question tags):
👉Josef Strzibny shared the difference between
u/empty_glass_mug asked on /r/rails a question about how to onboard a big Rails app:
Among the best answers is the following from /u/GreenCalligrapher571. From their answers, here is the part about the technical project, but please read the full answer:
Are the setup steps accurate and performable? Is application setup documented at all?
Is authentication handled inside the application, or are we using some provider?
How are we handling authorization and permissions?
Are there feature flags, and if so, how are those managed?
What are we using for tests, and what does that test coverage percentage look like? Are there trends in coverage percentage (e.g. models are tested really well but controllers are tested poorly)? What are we using to set up test data (presumably something like FactoryBot or fixtures, but who can know)?
What's my exception count look like in production? What are my baseline performance characteristics (95th percentile request time, for example)?
How is the code organized? Are we using concerns? Service objects? Asynchronous jobs?
How does the code get deployed? Are you having to type git push heroku master from the command line, or is there CI/CD, or something else?
What other services does it integrate with (e.g. exception monitoring, CI/CD, analytics, authentication, etc.), and do I have accounts for those?
What does the database schema look like? I'll usually install the annotate_rb gem when I join a fresh project, as that makes it significantly easier to reason about models (at the expense of a few dozen lines of comments at the top of each model file).
If I run bundle audit (you may need to install it), do I get any security warnings? Ditto for whatever you're using to manage the front-end dependencies, as well as language versions.
Do we have a separate set of "API" endpoints? If so, are these used just by this application (e.g. for AJAX) or are they consumed by the public? Similarly, do we have an exposed set of GraphQL queries/mutations? If so, what systems are using them and how?
Are there other systems that depend on this one? For example, customers who've integrated with your API, or a mobile app that hits your application, or something else?
More broadly, who depends on this system and how? Are your customers mostly internal users? External users? Are the users the people who are paying, or is it a B2B thing where your users are employed by your actual customer?
If we take electronic payments, are we using a "tokenization" flow with a known payment gateway, or are we storing card numbers in the database? If you have card numbers stored in the database and it's not a PCI Level 1 payment gateway or processor or the like, getting that information out of your database needs to be the top priority. I've taken over at least 1 project where they were storing card numbers in the database ("But it's encrypted!" they said -- still didn't matter) and it presented a HUGE, company-threatening liability. They were even storing the security codes in the database and I about lost my dang mind.
Are there any general complaints or comments about performance, functionality, etc.?
🧰 Gems, Libraries, and Updates
🧰Avo released version 2.26, which includes fixes and improvements: Read the release notes
🧰 Brad Gessler announced they are working on a new project called rowdy that will route web requests to classes:
🧰Heartcombo announced the release of Devise v.4.9.0 Read the change log:
They also followed up with the following:
Yaroslav Shmarov already published a video showing how the new device works. Watch it here
🧰 Chris Oliver announced that Jumpstart Pro is now ready for Turbo StreamActions:
🧰 The Bundler Team announced a new release of bundler v.2.4.7. Read the release notes
🧰 Samuel Williams shared they released a VSCode extension for Sus Test Provider is now on the VScode Marketplace:
🧰 Josef Strzibny announced they released a new version of InvoicePrinter. Read the release notes
🧰 Joel Drapper published a new version of Phlex v.1.4.0. Read the changelog here
🧰Maciej Mensfeld announced the new Karafka Web UI - Your Ruby and Rails out-of-the-box Kafka UI: Read the release notes
🧰 Ernesto announced a new version of database_cleaner. Read the changelog
🧰 Lázaro Nixon announced they implemented a passwordless feature for the authentication-zero gem
🧰 A new version of tanakai was released that adds support for Ruby 3.
🧰 Nick Nick Schwaderer submitted a bug about a performance regression happening between Ruby 2.7 to Ruby 3.2. Read the bug here
🤝 Related (but not Ruby-specific)
🤝Sebastian Wilgosz shared some excellent advice for content creators about how to stay motivated:
Here are two of the points he shared, but you should read the entire thread:
🤝 Robby Russell shared advice about how to make the onboarding of new devs work:
More content: 🎥 🎧 🗞
🗞Greg Molnar published a new edition of This Week in Rails: preloading associations with composite keys and more!
🗞️ Ruby Weekly published a new edition: Getting Rustier with Ruby
🗞 Ruby Radar published a new edition Ruby Radar #90 - This Week in Ruby Radar
🗞️ Ruby LibHunt published a new edition of the Awesome Ruby Newsletter
🎧Andy Croll shared a new episode of Maintenable with Robby Russell: Andy Croll - Keep the Weird Stuff Weird | Maintainable
🎧The Ruby on Rails Podcast published a new episode The Ruby on Rails Podcast Episode 457: This Week In Rails with Emmanuel Hayford
🎧Remote Ruby published a new episode Spicy Takes with Matt Swanson
🎧 Ruby Rogues published a new episode Keeping Up With The Currents
🎧 Ruby for All published a new episode about Favorite Ruby Methods: Part 3 - Strings
📽️ The Rubber Duck Dev Show published a new episode Getting Stuff Done With Drew Bragg
📽️ Nate Berkopec published a video showing Puma 6.1: New Feature Overview
🎥 Deanin published four new videos:
🎥 Peter Hawkins published two new videos:
🎥 Yaroslav Shmarov published two new videos:
🎥 The Ruby Learning Center published a new video streamed by Brandon Weaver covering Effective Testing in RSpec 3 - Ch 6
Emmanuel Hayford published an article about What's New in Rails 7.1
Karol Bąk published an article about building My first Hanami app - kukicola.io
VeetheeDixit1 published an article about 21 Best Ruby Testing Frameworks For 2023
Lucas Barret published an article about Semiology in Ruby (What are Ruby Symbols)?
Jonathan Rochkind published an article about using CGI.escapeURIComponent
Luca Guidi published an article about Getting Started with Hanami and Docker Compose
Andy Croll published a new article on One Ruby Thing about Try not to loop through associations inside jobs
Brandon C published an article about Renaming Foreign keys in Rails
Jeremy Evans published a new post about Speeding Up Tests in Applications Using Sequel, Roda, and rack-unreloader
Benito Serna shared an article about Pick a safe previous date to avoid race conditions saving computed values
Darshan published an article about Web scraping Google Search Results With Ruby
Davide Santangelo published an article about Sorting Algorithms with Ruby
Mattias Velamsson published an article about Ruby Challenges P1. The proposed problem to be solved is: “In a given array, find and count the numbers of integers with a value greater than 5”
Dave Iverson published an article about Building Templated Emails with MJML
Akshay published a deep dive into How Rails Authenticity Tokens Protect Against CSRF Vulnerability
Jake Zimmerman published an article about Ruby's private keyword is weird
Daniel Magliola published a written companion for their Talk about Happy Gueues. It reads like a good deep dive into queues: "The secret to happy queues"
Kevin Murphy published a new article about Duped into modifying a frozen hash
Nate Berkopec shared an article about how to think about hiring people Hire for slope, not Y-Intercept
John DeWyze published an article about The 25 Percent Rule for Tackling Technical Debt
🤗 Founding Members supporting ShortRuby
Drew Bragg, host of Code and the Coding Coders who Code it
Avi Flombaum, the founder of Flatiron School, is a product engineer interested in full-time/contract work.
Adrian Marin, creator of Avo - a Ruby on Rails application building framework
Adam McCrea, creator of Judoscale (formerly Rails Autoscale)—the dead-simple autoscaler for Rails, Sidekiq, etc.
Stephen Ierodiaconou from www.diaconou.com
Read more about what is a Founding Member or about Why pay for ShortRuby newsletter