From fd0fb3cab99dc222372812333c68d9f7f48cc951 Mon Sep 17 00:00:00 2001 From: Gelsey Torres Date: Tue, 10 Mar 2026 12:14:00 -0400 Subject: [PATCH 1/4] Refactors data rake task --- lib/tasks/data.rake | 40 ++++++---------------------------------- 1 file changed, 6 insertions(+), 34 deletions(-) diff --git a/lib/tasks/data.rake b/lib/tasks/data.rake index 55bbb1f..9f158b5 100644 --- a/lib/tasks/data.rake +++ b/lib/tasks/data.rake @@ -1,32 +1,7 @@ # lib/tasks/update_rails_releases.rake namespace :data do - SUPPORTED_RAILS_VERSIONS = %w( - 2.3 - 3.0 - 3.1 - 3.2 - 4.0 - 4.1 - 4.2 - 5.0 - 5.1 - 5.2 - 6.0 - 6.1 - 7.0 - 7.1 - 7.2 - 8.0 - ) - - task find_or_create_rails_releases: :environment do - SUPPORTED_RAILS_VERSIONS.each do |version| - RailsRelease.find_or_create_by(version: version) - end - end - - desc "Update minimum Ruby versions from Rails 2.3 to 7.2" - task update_rails_releases: :find_or_create_rails_releases do + desc "Find or create Rails releases and update their version constraints" + task update_rails_releases: :environment do min_versions = { "2.3" => { minimum_ruby_version: "1.8.7", @@ -130,13 +105,10 @@ namespace :data do } min_versions.each do |version, attrs| - if rails_release = RailsRelease.find_by(version: version) - puts "Updating Rails Release #{rails_release} with #{attrs}" - rails_release.update_columns(attrs) - puts "Updated Rails Release versions" - else - puts "Skipping Rails Release #{version} as it does not exist" - end + rails_release = RailsRelease.find_or_initialize_by(version: version) + rails_release.assign_attributes(attrs) + puts "Updating Rails Release #{rails_release} with #{attrs}" + rails_release.save!(validate: false) end puts "Rails Releases updated successfully." From 72c2a74b10cf6b864a56f5f49ee77728e58c274b Mon Sep 17 00:00:00 2001 From: Gelsey Torres Date: Wed, 25 Mar 2026 14:43:15 -0400 Subject: [PATCH 2/4] Consolidate Rails release data sync into a single canonical task * Merge find_or_create_rails_releases and update_rails_releases into a single data:sync_rails_releases task * Add guards to raise early if minimum_ruby_version or minimum_bundler_version are missing for any version entry --- lib/tasks/data.rake | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/tasks/data.rake b/lib/tasks/data.rake index 55c7e6c..b684c54 100644 --- a/lib/tasks/data.rake +++ b/lib/tasks/data.rake @@ -1,7 +1,7 @@ # lib/tasks/update_rails_releases.rake namespace :data do desc "Find or create Rails releases and update their version constraints" - task update_rails_releases: :environment do + task sync_rails_releases: :environment do min_versions = { "2.3" => { minimum_ruby_version: "1.8.7", @@ -112,10 +112,13 @@ namespace :data do } min_versions.each do |version, attrs| + raise "minimum_ruby_version is required for Rails #{version}" if attrs[:minimum_ruby_version].blank? + raise "minimum_bundler_version is required for Rails #{version}" if attrs[:minimum_bundler_version].blank? + rails_release = RailsRelease.find_or_initialize_by(version: version) rails_release.assign_attributes(attrs) - puts "Updating Rails Release #{rails_release} with #{attrs}" - rails_release.save!(validate: false) + puts "Syncing Rails Release #{rails_release} with #{attrs}" + rails_release.save! end puts "Rails Releases updated successfully." From 794a1ae3e521e7df51797fe827997de3205229d3 Mon Sep 17 00:00:00 2001 From: Gelsey Torres Date: Wed, 25 Mar 2026 14:44:46 -0400 Subject: [PATCH 3/4] Updates documentation to use sync_rails_release task --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bdf96b1..e3cf4cc 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ In order to set up the application locally: 1. `git clone git@github.com:railsbump/app.git` 2. `bin/setup` -3. `rake data:find_or_create_rails_releases` +3. `rake data:sync_rails_releases` 4. `foreman start -f Procfile.dev` 5. Go to http://localhost:3000 From c1d463ba765c41c7fca36bb781e3e9084090edce Mon Sep 17 00:00:00 2001 From: Gelsey Torres Date: Wed, 25 Mar 2026 15:07:55 -0400 Subject: [PATCH 4/4] Adds validations for minimum_ruby_version and minimum_bundler_version to ensure that they are set on creation --- app/models/rails_release.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/rails_release.rb b/app/models/rails_release.rb index 384914f..1fa6bda 100644 --- a/app/models/rails_release.rb +++ b/app/models/rails_release.rb @@ -12,6 +12,8 @@ class RailsRelease < ApplicationRecord has_many :compats, dependent: :destroy validates :version, presence: true, format: { with: /\A\d+\.\d+\z/, allow_blank: true } + validates :minimum_ruby_version, presence: true + validates :minimum_bundler_version, presence: true validate do if version