Skip to content

Commit a2d5d55

Browse files
committed
Extract module + include
1 parent 4913da0 commit a2d5d55

File tree

3 files changed

+38
-47
lines changed

3 files changed

+38
-47
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# frozen_string_literal: true
2+
3+
module ViewComponent
4+
module ActionViewCompatibility
5+
attr_accessor :top_level_parent
6+
7+
def children
8+
@_children ||= []
9+
end
10+
11+
def set_output_buffer(buf)
12+
@output_buffer = buf
13+
end
14+
15+
def output_buffer=(buf)
16+
if top_level_parent
17+
top_level_parent.set_output_buffer_for_children(buf)
18+
else
19+
set_output_buffer_for_children(buf)
20+
end
21+
end
22+
23+
def set_output_buffer_for_children(buf)
24+
set_output_buffer(buf)
25+
26+
children.each do |child|
27+
child.set_output_buffer(buf)
28+
end
29+
end
30+
end
31+
end

lib/view_component/base.rb

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,53 +10,6 @@
1010
require "view_component/slotable_v2"
1111
require "view_component/with_content_helper"
1212

13-
class ActionView::Base
14-
attr_reader :children
15-
attr_accessor :parent
16-
17-
def _prepare_context
18-
@children = []
19-
@parent = nil
20-
21-
super
22-
end
23-
24-
def set_output_buffer(buf)
25-
@output_buffer = buf
26-
end
27-
28-
def output_buffer=(buf)
29-
if parent.nil?
30-
set_output_buffer_for_children(buf)
31-
else
32-
top_level_parent.set_output_buffer_for_children(buf)
33-
end
34-
end
35-
36-
def top_level_parent
37-
return if parent.nil?
38-
return @_top_level_parent if defined?(@_top_level_parent)
39-
40-
@_top_level_parent = begin
41-
top_level = parent
42-
43-
while top_level.parent
44-
top_level = top_level.parent
45-
end
46-
47-
top_level
48-
end
49-
end
50-
51-
def set_output_buffer_for_children(buf)
52-
set_output_buffer(buf)
53-
54-
children.each do |child|
55-
child.set_output_buffer(buf)
56-
end
57-
end
58-
end
59-
6013
module ViewComponent
6114
class Base < ActionView::Base
6215
include ActiveSupport::Configurable

lib/view_component/engine.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ class Engine < Rails::Engine # :nodoc:
8181
end
8282
end
8383

84+
initializer "view_component.include_render_compatibility" do |app|
85+
ActiveSupport.on_load(:action_view) do
86+
require "view_component/action_view_compatibility"
87+
ActionView::Base.prepend ViewComponent::ActionViewCompatibility
88+
end
89+
end
90+
8491
initializer "view_component.include_render_component" do |app|
8592
next if Rails.version.to_f >= 6.1
8693

0 commit comments

Comments
 (0)