Skip to content

Commit 9eeca41

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 <[email protected]>
1 parent ef315c9 commit 9eeca41

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
@@ -453,25 +453,20 @@ def add_js_dependencies
453453
def add_react_on_rails_package
454454
major_minor_patch_only = /\A\d+\.\d+\.\d+\z/
455455

456-
# Try to use package_json gem first, fall back to direct npm commands
456+
# Always use direct npm install with --save-exact to ensure exact version matching
457+
# The package_json gem doesn't support --save-exact flag
457458
react_on_rails_pkg = if ReactOnRails::VERSION.match?(major_minor_patch_only)
458-
["react-on-rails@#{ReactOnRails::VERSION}"]
459+
"react-on-rails@#{ReactOnRails::VERSION}"
459460
else
460461
puts "Adding the latest react-on-rails NPM module. " \
461462
"Double check this is correct in package.json"
462-
["react-on-rails"]
463+
"react-on-rails"
463464
end
464465

465466
puts "Installing React on Rails package..."
466-
if add_npm_dependencies(react_on_rails_pkg)
467-
@added_dependencies_to_package_json = true
468-
return
469-
end
470-
471-
puts "Using direct npm commands as fallback"
472-
success = system("npm", "install", *react_on_rails_pkg)
467+
success = system("npm", "install", "--save-exact", react_on_rails_pkg)
473468
@ran_direct_installs = true if success
474-
handle_npm_failure("react-on-rails package", react_on_rails_pkg) unless success
469+
handle_npm_failure("react-on-rails package", [react_on_rails_pkg]) unless success
475470
end
476471

477472
def add_react_dependencies

lib/react_on_rails/engine.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ class Engine < ::Rails::Engine
1111
config.after_initialize do
1212
next if Engine.skip_version_validation?
1313

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

0 commit comments

Comments
 (0)