Skip to content

Commit f2a0e33

Browse files
justin808claude
andcommitted
Fix generator test failures by skipping validation and using exact versions
This commit fixes two issues that were causing generator tests to fail: 1. Version validation running during generator execution - The engine initializer was validating npm package installation - But generators hadn't installed packages yet (chicken-and-egg problem) - Solution: Skip validation when Rails generators are running 2. Package installed with semver range instead of exact version - package_json gem was adding packages with carets (^16.1.1) - React on Rails requires exact version matching between gem and npm package - Solution: Use npm install --save-exact directly for react-on-rails package Changes: - lib/react_on_rails/engine.rb: Skip validation during generator runs - lib/generators/react_on_rails/install_generator.rb: Use --save-exact flag Note: Filed issue with package_json gem to add exact version support: shakacode/package_json#25 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 7096967 commit f2a0e33

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

lib/generators/react_on_rails/install_generator.rb

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -430,25 +430,20 @@ def add_js_dependencies
430430
def add_react_on_rails_package
431431
major_minor_patch_only = /\A\d+\.\d+\.\d+\z/
432432

433-
# Try to use package_json gem first, fall back to direct npm commands
433+
# Always use direct npm install with --save-exact to ensure exact version matching
434+
# The package_json gem doesn't support --save-exact flag
434435
react_on_rails_pkg = if ReactOnRails::VERSION.match?(major_minor_patch_only)
435-
["react-on-rails@#{ReactOnRails::VERSION}"]
436+
"react-on-rails@#{ReactOnRails::VERSION}"
436437
else
437438
puts "Adding the latest react-on-rails NPM module. " \
438439
"Double check this is correct in package.json"
439-
["react-on-rails"]
440+
"react-on-rails"
440441
end
441442

442443
puts "Installing React on Rails package..."
443-
if add_npm_dependencies(react_on_rails_pkg)
444-
@added_dependencies_to_package_json = true
445-
return
446-
end
447-
448-
puts "Using direct npm commands as fallback"
449-
success = system("npm", "install", *react_on_rails_pkg)
444+
success = system("npm", "install", "--save-exact", react_on_rails_pkg)
450445
@ran_direct_installs = true if success
451-
handle_npm_failure("react-on-rails package", react_on_rails_pkg) unless success
446+
handle_npm_failure("react-on-rails package", [react_on_rails_pkg]) unless success
452447
end
453448

454449
def add_react_dependencies

lib/react_on_rails/engine.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ class Engine < ::Rails::Engine
1313
package_json = VersionChecker::NodePackageVersion.package_json_path
1414
next unless File.exist?(package_json)
1515

16+
# Skip validation when running generators (packages may not be installed yet)
17+
next if defined?(Rails::Generators) && ARGV.any? { |arg| arg.include?("generate") || arg.include?("g") }
18+
1619
Rails.logger.info "[React on Rails] Validating package version and compatibility..."
1720
VersionChecker.build.validate_version_and_package_compatibility!
1821
Rails.logger.info "[React on Rails] Package validation successful"

0 commit comments

Comments
 (0)