Skip to content

Commit 4ed04e8

Browse files
authored
Merge pull request #223 from phlex-ruby/explicit-partial-rendering
Require long-form partial rendering
2 parents f0dd6d0 + 7458c4d commit 4ed04e8

File tree

2 files changed

+23
-35
lines changed

2 files changed

+23
-35
lines changed

lib/phlex/rails/sgml.rb

+22-34
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,38 @@ def helpers
1818
end
1919
end
2020

21-
def render(*args, **, &block)
21+
def render(*args, **kwargs, &block)
2222
renderable = args[0]
2323

2424
case renderable
25-
when Phlex::SGML, Proc, Method
25+
when Phlex::SGML, Proc, Method, String
2626
return super
2727
when Class
2828
return super if renderable < Phlex::SGML
2929
when Enumerable
3030
return super unless ActiveRecord::Relation === renderable
31-
else
32-
if block
33-
@_context.target << @_view_context.render(*args, **) do |*yielded_args|
34-
if yielded_args.length == 1 && defined?(ViewComponent::Base) && ViewComponent::Base === yielded_args[0]
35-
capture(Phlex::Rails::Buffered.new(yielded_args[0], view: self), &block)
36-
else
37-
capture(*yielded_args, &block)
38-
end
31+
when nil
32+
partial = kwargs.delete(:partial)
33+
34+
if partial # this is a hack to get around https://github.com/rails/rails/issues/51015
35+
@_context.target << @_view_context.render(partial, **kwargs) do |*yielded_args|
36+
capture(*yielded_args, &block)
37+
end
38+
39+
return nil
40+
end
41+
end
42+
43+
if block
44+
@_context.target << @_view_context.render(*args, **kwargs) do |*yielded_args|
45+
if yielded_args.length == 1 && defined?(ViewComponent::Base) && ViewComponent::Base === yielded_args[0]
46+
capture(Phlex::Rails::Buffered.new(yielded_args[0], view: self), &block)
47+
else
48+
capture(*yielded_args, &block)
3949
end
40-
else
41-
@_context.target << @_view_context.render(*args, **)
4250
end
51+
else
52+
@_context.target << @_view_context.render(*args, **kwargs)
4353
end
4454

4555
nil
@@ -81,28 +91,6 @@ def capture(...)
8191
super&.html_safe
8292
end
8393

84-
# @api private
85-
def __text__(content)
86-
case content
87-
when ActiveSupport::SafeBuffer
88-
@_context.target << content
89-
else
90-
super
91-
end
92-
end
93-
94-
# TODO: Re-introduce this when we can figure out how to test it
95-
# def await(task)
96-
# case task
97-
# when ActiveRecord::Relation
98-
# future = task.instance_variable_get(:@future_result)
99-
# flush if future && future.pending?
100-
# task
101-
# else
102-
# super
103-
# end
104-
# end
105-
10694
# Trick ViewComponent into thinking we're a ViewComponent to fix rendering output
10795
# @api private
10896
def set_original_view_context(view_context)

test/dummy/app/views/rendering/partial_from_phlex.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module Rendering
44
class PartialFromPhlex < ApplicationView
55
def view_template
6-
render "partial" do
6+
render partial: "partial" do
77
h1(id: "phlex") { "Partial from Phlex" }
88
end
99
end

0 commit comments

Comments
 (0)