From e8c5911ea67694018810f752afef76f4a033260d Mon Sep 17 00:00:00 2001 From: Juan Vasquez Date: Thu, 20 Feb 2025 15:09:51 -0600 Subject: [PATCH] Split compatibility method for Rails and Ruby Based on the code review --- exe/bundle_report | 4 ++-- lib/next_rails/bundle_report.rb | 12 +++++++++--- .../rails_version_compatibility.rb | 12 +++--------- .../rails_version_compatibility_spec.rb | 13 +++++++++++++ .../ruby_version_compatibility_spec.rb | 1 - spec/next_rails/bundle_report_spec.rb | 17 +++++++++++------ 6 files changed, 38 insertions(+), 21 deletions(-) create mode 100644 spec/next_rails/bundle_report/rails_version_compatibility_spec.rb diff --git a/exe/bundle_report b/exe/bundle_report index 0708464..25bbc8a 100755 --- a/exe/bundle_report +++ b/exe/bundle_report @@ -67,9 +67,9 @@ at_exit do when "outdated" then NextRails::BundleReport.outdated(options.fetch(:format, nil)) else if options[:ruby_version] - NextRails::BundleReport.compatibility(ruby_version: options.fetch(:ruby_version, "2.3")) + NextRails::BundleReport.ruby_compatibility(ruby_version: options.fetch(:ruby_version, "2.3")) else - NextRails::BundleReport.compatibility(rails_version: options.fetch(:rails_version, "5.0"), include_rails_gems: options.fetch(:include_rails_gems, false)) + NextRails::BundleReport.rails_compatibility(rails_version: options.fetch(:rails_version, "5.0"), include_rails_gems: options.fetch(:include_rails_gems, false)) end end end diff --git a/lib/next_rails/bundle_report.rb b/lib/next_rails/bundle_report.rb index 1a55f9f..76fec87 100644 --- a/lib/next_rails/bundle_report.rb +++ b/lib/next_rails/bundle_report.rb @@ -8,12 +8,18 @@ module NextRails module BundleReport extend self - def compatibility(rails_version: nil, ruby_version: nil, include_rails_gems: nil) - return puts RubyVersionCompatibility.new(options: { ruby_version: ruby_version }).generate if ruby_version + def ruby_compatibility(ruby_version: nil) + return unless ruby_version + options = { ruby_version: ruby_version } + puts RubyVersionCompatibility.new(options: options).generate + end + + def rails_compatibility(rails_version: nil, include_rails_gems: nil) return unless rails_version - puts RailsVersionCompatibility.new(options: { rails_version: rails_version, include_rails_gems: include_rails_gems }).generate + options = { rails_version: rails_version, include_rails_gems: include_rails_gems } + puts RailsVersionCompatibility.new(options: options).generate end def compatible_ruby_version(rails_version) diff --git a/lib/next_rails/bundle_report/rails_version_compatibility.rb b/lib/next_rails/bundle_report/rails_version_compatibility.rb index dd7f2a8..b6e8fe9 100644 --- a/lib/next_rails/bundle_report/rails_version_compatibility.rb +++ b/lib/next_rails/bundle_report/rails_version_compatibility.rb @@ -69,18 +69,12 @@ def incompatible_gems_by_state end def incompatible_gems - @gems.reject { |gem| incompatible?(gem) }.sort_by(&:name) + @incompatible_gems ||= @gems.reject do |gem| + gem.compatible_with_rails?(rails_version: rails_version) || (!include_rails_gems && gem.from_rails?) + end.sort_by { |gem| gem.name } end def rails_version @options[:rails_version] end - - def incompatible?(gem) - gem.compatible_with_rails?(rails_version: rails_version) || exclude_rails_gems?(gem) - end - - def exclude_rails_gems?(gem) - !@options[:include_rails_gems] && gem.from_rails? - end end diff --git a/spec/next_rails/bundle_report/rails_version_compatibility_spec.rb b/spec/next_rails/bundle_report/rails_version_compatibility_spec.rb new file mode 100644 index 0000000..86f0f28 --- /dev/null +++ b/spec/next_rails/bundle_report/rails_version_compatibility_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require "spec_helper" + +RSpec.describe NextRails::BundleReport::RailsVersionCompatibility do + describe "output" do + it "returns ERB generated output" do + output = NextRails::BundleReport::RailsVersionCompatibility.new(options: { rails_version: 7.0 }).generate + expect(output).to match "gems incompatible with Rails 7.0" + end + end +end + diff --git a/spec/next_rails/bundle_report/ruby_version_compatibility_spec.rb b/spec/next_rails/bundle_report/ruby_version_compatibility_spec.rb index ff416f3..be617c9 100644 --- a/spec/next_rails/bundle_report/ruby_version_compatibility_spec.rb +++ b/spec/next_rails/bundle_report/ruby_version_compatibility_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require "spec_helper" -require "next_rails/bundle_report/ruby_version_compatibility" RSpec.describe NextRails::BundleReport::RubyVersionCompatibility do let(:ruby_3_0_gem) do diff --git a/spec/next_rails/bundle_report_spec.rb b/spec/next_rails/bundle_report_spec.rb index d20f4b4..606168e 100644 --- a/spec/next_rails/bundle_report_spec.rb +++ b/spec/next_rails/bundle_report_spec.rb @@ -64,12 +64,17 @@ end end - describe ".compatibility" do - describe "output" do - it "returns ERB generated output" do - output = NextRails::BundleReport::RailsVersionCompatibility.new(options: { rails_version: 7.0 }).generate - expect(output).to match "gems incompatible with Rails 7.0" - end + describe ".rails_compatibility" do + it "returns nil for invalid rails version" do + output = NextRails::BundleReport.rails_compatibility(rails_version: nil) + expect(output).to eq(nil) + end + end + + describe ".ruby_compatibility" do + it "returns nil for invalid ruby version" do + output = NextRails::BundleReport.ruby_compatibility(ruby_version: nil) + expect(output).to eq(nil) end end