From 30667610db49a37f8e0e940279a2f0a1b90c0fea Mon Sep 17 00:00:00 2001 From: Joel Drapper Date: Fri, 20 Dec 2024 22:09:50 +0000 Subject: [PATCH] Warn when using `options_for_select` as a value --- lib/phlex/rails/helpers/options_for_select.rb | 13 +++++++++--- lib/phlex/rails/helpers/select_tag.rb | 21 ++++++++++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/phlex/rails/helpers/options_for_select.rb b/lib/phlex/rails/helpers/options_for_select.rb index 91d75078..231b48e1 100644 --- a/lib/phlex/rails/helpers/options_for_select.rb +++ b/lib/phlex/rails/helpers/options_for_select.rb @@ -1,9 +1,16 @@ # frozen_string_literal: true module Phlex::Rails::Helpers::OptionsForSelect + Never = Object.new + extend Phlex::Rails::HelperMacros - # @!method options_for_select(...) - # @return [nil] - register_output_helper :options_for_select + def options_for_select(...) + context = @_context + return if context.fragments && !context.in_target_fragment + + raw helpers.options_for_select(...) + + Never + end end diff --git a/lib/phlex/rails/helpers/select_tag.rb b/lib/phlex/rails/helpers/select_tag.rb index a634a3af..7fecad7d 100644 --- a/lib/phlex/rails/helpers/select_tag.rb +++ b/lib/phlex/rails/helpers/select_tag.rb @@ -3,7 +3,22 @@ module Phlex::Rails::Helpers::SelectTag extend Phlex::Rails::HelperMacros - # @!method select_tag(...) - # @return [nil] - register_output_helper :select_tag + def select_tag(*args, **kwargs, &block) + context = @_context + return if context.fragments && !context.in_target_fragment + + if args[1] == Phlex::Rails::Helpers::OptionsForSelect::Never + raise ArgumentError.new(<<~MESSAGE + Figure out how to explain this problem here. + MESSAGE + end + + output = if block + helpers.select_tag(*args, **kwargs) { capture(&block) } + else + helpers.select_tag(*args, **kwargs) + end + + raw(output) + end end