From 6391047e11efb9f7d280434911401b7a2e740ed4 Mon Sep 17 00:00:00 2001 From: Issy Long Date: Thu, 11 Jun 2026 18:22:56 +0100 Subject: [PATCH 1/2] Accept keyword arguments in `render_in` methods - Rails `main` now[1] deprecates renderable objects whose `render_in` method only accepts a single positional argument. The args don't have to be used, hence why they're `_` prefixed here: the arity check is very basic. - Uses of PrimerViewComponents in applications on Rails `main` were seeing ActionView deprecation warnings: ``` Change #render_in to accept keyword arguments. (called from block (2 levels) in FooComponent#call at app/components/foo_component.html.erb:8) DEPRECATION WARNING: Action View support for #render_in without options is deprecated. ``` [1]: https://github.com/rails/rails/commit/4870c5f9355823e7052568f8aca1d16a6933059b) --- app/components/primer/alpha/tree_view/sub_tree_node.rb | 2 +- app/components/primer/alpha/tree_view/visual.rb | 2 +- app/components/primer/beta/button_group.rb | 2 +- app/lib/primer/forms/acts_as_component.rb | 2 +- app/lib/primer/forms/toggle_switch_form.rb | 2 +- lib/primer/form_components.rb | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/components/primer/alpha/tree_view/sub_tree_node.rb b/app/components/primer/alpha/tree_view/sub_tree_node.rb index b42c54eaa1..a5f249c511 100644 --- a/app/components/primer/alpha/tree_view/sub_tree_node.rb +++ b/app/components/primer/alpha/tree_view/sub_tree_node.rb @@ -164,7 +164,7 @@ def initialize( ) end - def render_in(*args, &block) + def render_in(*args, **_kwargs, &block) super.tap do # check this _after_ rendering so @sub_tree's slots are defined if @node.select_variant != :none && @sub_tree.defer? diff --git a/app/components/primer/alpha/tree_view/visual.rb b/app/components/primer/alpha/tree_view/visual.rb index e5f260b6a2..88d2070622 100644 --- a/app/components/primer/alpha/tree_view/visual.rb +++ b/app/components/primer/alpha/tree_view/visual.rb @@ -17,7 +17,7 @@ def initialize(id:, visual:, label: nil) @label = label end - def render_in(_view_context, &block) + def render_in(_view_context, **_kwargs, &block) block&.call(@visual) super end diff --git a/app/components/primer/beta/button_group.rb b/app/components/primer/beta/button_group.rb index a31357128c..6ac667508c 100644 --- a/app/components/primer/beta/button_group.rb +++ b/app/components/primer/beta/button_group.rb @@ -107,7 +107,7 @@ def initialize(menu_arguments: {}, button_arguments: {}) @button = @menu.with_show_button(icon: "triangle-down", **button_arguments) end - def render_in(view_context, &block) + def render_in(view_context, **_kwargs, &block) super(view_context) do block.call(@menu, @button) end diff --git a/app/lib/primer/forms/acts_as_component.rb b/app/lib/primer/forms/acts_as_component.rb index 45c6f64ddb..a9ff4f381f 100644 --- a/app/lib/primer/forms/acts_as_component.rb +++ b/app/lib/primer/forms/acts_as_component.rb @@ -10,7 +10,7 @@ module ActsAsComponent module InstanceMethods delegate :render, :content_tag, :output_buffer, :capture, to: :@view_context - def render_in(view_context, &block) + def render_in(view_context, **_kwargs, &block) @view_context = view_context before_render perform_render(&block) diff --git a/app/lib/primer/forms/toggle_switch_form.rb b/app/lib/primer/forms/toggle_switch_form.rb index 3aad28d894..27b918b2a4 100644 --- a/app/lib/primer/forms/toggle_switch_form.rb +++ b/app/lib/primer/forms/toggle_switch_form.rb @@ -69,7 +69,7 @@ def initialize(**system_arguments) # assumes the presence of a builder so we create our own here. A builder # cannot be constructed without a corresponding view context, which is why # we have to override render_in and can't create it in the initializer. - def render_in(view_context, &block) + def render_in(view_context, **_kwargs, &block) @builder = Primer::Forms::Builder.new( nil, nil, view_context, {} ) diff --git a/lib/primer/form_components.rb b/lib/primer/form_components.rb index fb8d9082aa..ba1686559a 100644 --- a/lib/primer/form_components.rb +++ b/lib/primer/form_components.rb @@ -16,7 +16,7 @@ def initialize(**system_arguments) @system_arguments = system_arguments end - def render_in(view_context, &block) + def render_in(view_context, **_kwargs, &block) builder = Primer::Forms::Builder.new( nil, nil, view_context, {} ) From 7aaac791877832cfc8ddad1a9dedeb0ae2b535aa Mon Sep 17 00:00:00 2001 From: Jon Rohan Date: Fri, 12 Jun 2026 11:28:48 -0700 Subject: [PATCH 2/2] Enable keyword arguments in render_in methods Allow `render_in` methods to accept keyword arguments. --- .changeset/soft-stamps-camp.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/soft-stamps-camp.md diff --git a/.changeset/soft-stamps-camp.md b/.changeset/soft-stamps-camp.md new file mode 100644 index 0000000000..dabb0f6a25 --- /dev/null +++ b/.changeset/soft-stamps-camp.md @@ -0,0 +1,5 @@ +--- +"@primer/view-components": patch +--- + +Accept keyword arguments in `render_in` methods