Skip to content

Commit de095e2

Browse files
committed
Harden legacy Redux warning emission
1 parent beffc0e commit de095e2

3 files changed

Lines changed: 33 additions & 6 deletions

File tree

react_on_rails/lib/generators/react_on_rails/install_generator.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ def run_generators
221221
# print_generator_messages raises an exception. This prevents ENV pollution
222222
# that could affect subsequent processes.
223223
ENV.delete("REACT_ON_RAILS_SKIP_VALIDATION")
224+
# Keep primary failure details first; the legacy Redux advisory is best-effort.
224225
add_legacy_redux_install_warning_once_safely
225226
print_generator_messages
226227
end
@@ -816,15 +817,14 @@ def add_legacy_redux_install_warning
816817
def add_legacy_redux_install_warning_once
817818
return if @legacy_redux_install_warning_added
818819

819-
# Set the flag after enqueueing so a failed warning add can be retried.
820820
add_legacy_redux_install_warning
821821
@legacy_redux_install_warning_added = true
822822
end
823823

824824
def add_legacy_redux_install_warning_once_safely
825825
add_legacy_redux_install_warning_once
826-
rescue StandardError
827-
# Preserve the primary generator output; this legacy advisory is best-effort.
826+
rescue StandardError => e
827+
warn "[react_on_rails] Skipped legacy Redux warning: #{e.message}"
828828
nil
829829
end
830830

@@ -1111,7 +1111,7 @@ def handle_shakapacker_gemfile_error
11111111
Then re-run: #{recovery_install_command}
11121112
MSG
11131113
GeneratorMessages.add_error(error)
1114-
add_legacy_redux_install_warning_once
1114+
add_legacy_redux_install_warning_once_safely
11151115
raise Thor::Error, error unless options.ignore_warnings?
11161116
end
11171117

@@ -1136,7 +1136,7 @@ def handle_shakapacker_install_error
11361136
Need help? Visit: https://github.com/shakacode/shakapacker/blob/main/docs/installation.md
11371137
MSG
11381138
GeneratorMessages.add_error(error)
1139-
add_legacy_redux_install_warning_once
1139+
add_legacy_redux_install_warning_once_safely
11401140
raise Thor::Error, error unless options.ignore_warnings?
11411141
end
11421142

react_on_rails/lib/generators/react_on_rails/react_with_redux_generator.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ class ReactWithReduxGenerator < Rails::Generators::Base
1313

1414
Rails::Generators.hide_namespace(namespace)
1515
source_root(File.expand_path("templates", __dir__))
16-
# Keep this standalone warning aligned with InstallGenerator#add_legacy_redux_install_warning.
16+
# Keep the runtime API compatibility sentence aligned with InstallGenerator#add_legacy_redux_install_warning.
17+
# The install path adds recovery docs and command guidance that this standalone warning intentionally omits.
1718
LEGACY_REDUX_GENERATOR_WARNING = <<~MSG.strip.freeze
1819
The react_on_rails:react_with_redux generator is a hidden legacy Redux generator path and is not
1920
recommended for new React on Rails apps.
@@ -28,6 +29,7 @@ class ReactWithReduxGenerator < Rails::Generators::Base
2829
class_option :rsc, type: :boolean, default: false, hide: true
2930
class_option :tailwind, type: :boolean, default: false, hide: true
3031

32+
# Only this public method is dispatched by Rails; helpers below stay private.
3133
def run_generator
3234
add_legacy_redux_generator_warning
3335
validate_standalone_tailwind

react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4575,11 +4575,36 @@ class ActiveSupport::TestCase
45754575
allow(install_generator).to receive(:add_legacy_redux_install_warning)
45764576
.and_raise(StandardError, "warning failed")
45774577
allow(install_generator).to receive(:print_generator_messages)
4578+
allow(install_generator).to receive(:warn)
45784579

45794580
expect { install_generator.run_generators }.to raise_error(Thor::Error, "generator failed")
45804581
expect(install_generator).to have_received(:print_generator_messages)
45814582
end
45824583

4584+
specify "warning failures do not mask shakapacker gemfile errors" do
4585+
install_generator = install_generator_fixture(redux: true)
4586+
4587+
allow(install_generator).to receive(:add_legacy_redux_install_warning)
4588+
.and_raise(StandardError, "warning failed")
4589+
allow(install_generator).to receive(:warn)
4590+
4591+
expect do
4592+
install_generator.send(:handle_shakapacker_gemfile_error)
4593+
end.to raise_error(Thor::Error, /Failed to add Shakapacker/)
4594+
end
4595+
4596+
specify "warning failures do not mask shakapacker install errors" do
4597+
install_generator = install_generator_fixture(redux: true)
4598+
4599+
allow(install_generator).to receive(:add_legacy_redux_install_warning)
4600+
.and_raise(StandardError, "warning failed")
4601+
allow(install_generator).to receive(:warn)
4602+
4603+
expect do
4604+
install_generator.send(:handle_shakapacker_install_error)
4605+
end.to raise_error(Thor::Error, /Failed to install Shakapacker/)
4606+
end
4607+
45834608
specify "hidden install --redux --tailwind warning stays on the install path" do
45844609
install_generator = install_generator_fixture(redux: true, tailwind: true)
45854610

0 commit comments

Comments
 (0)