Skip to content
A companion gem for the "Ten Years of Rails Upgrades" from RailsConf 2018
Ruby Shell
Branch: master
Clone or download
Pull request Compare This branch is 28 commits ahead of clio:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
exe
lib
spec
.gitignore
.rspec
.travis.yml Add Ruby 2.2.10 to build matrix Apr 27, 2019
Gemfile
Gemfile.lock
LICENSE.txt
README.md
Rakefile
deprecation_tracker.md Add deprecation tracker Apr 16, 2018
next_rails.gemspec Update homepage in gemspec Sep 26, 2019

README.md

Ten Years of Rails Upgrades

This is a companion to the "Ten Years of Rails Upgrades" conference talk. You'll find various utilities that we use at Clio to help us prepare for and complete Rails upgrades.

These scripts are still early days and may not work in every environment or app.

I wouldn't recommend adding this to your Gemfile long-term. Rather, try out the scripts and use them as a point of reference. Feel free to tweak them to better fit your environment.

Usage

bundle_report

Learn about your Gemfile and see what needs updating.

# Show all out-of-date gems
bundle_report outdated
# Show five oldest, out-of-date gems
bundle_report outdated | head -n 5
# Show gems that don't work with Rails 5.2.0
bundle_report compatibility --rails-version=5.2.0
bundle_report --help

Deprecation tracking

If you're using RSpec, add this snippet to rails_helper.rb or spec_helper.rb (whichever loads Rails).

RSpec.configure do |config|
  # Tracker deprecation messages in each file
  if ENV["DEPRECATION_TRACKER"]
    DeprecationTracker.track_rspec(
      config,
      shitlist_path: "spec/support/deprecation_warning.shitlist.json",
      mode: ENV["DEPRECATION_TRACKER"],
      transform_message: -> (message) { message.gsub("#{Rails.root}/", "") }
    )
  end
end

We don't use MiniTest, so there isn't a prebuilt config for it but I suspect it's pretty similar to DeprecationTracker.track_rspec.

Once you have that, you can start using deprecation tracking in your tests:

# Run your tests and save the deprecations to the shitlist
DEPRECATION_TRACKER=save rspec
# Run your tests and raise an error when the deprecations change
DEPRECATION_TRACKER=compare rspec

deprecations command

Once you have stored your deprecations, you can use deprecations to display common warnings, run specs, or update the shitlist file.

deprecations info
deprecations info --pattern "ActiveRecord::Base"
deprecations run
deprecations --help # For more options and examples

Right now, the path to the shitlist is hardcoded so make sure you store yours at spec/support/deprecations.shitlist.json.

Dual-boot Rails next

This command helps you dual-boot your application.

next --init         # Create Gemfile.next
vim Gemfile         # Tweak your dependencies conditionally using `next?`
next bundle install # Install new gems
next rails s        # Start server using Gemfile.next

Installation

Add this line to your application's Gemfile:

gem 'next_rails'

And then execute:

$ bundle

Or install it yourself as:

$ gem install next_rails

License

The gem is available as open source under the terms of the MIT License.

You can’t perform that action at this time.