Module: Phlex::Rails::SGML::Overrides

Included in:
SGML
Defined in:
lib/phlex/rails/sgml/overrides.rb

Instance Method Summary collapse

Instance Method Details

#captureObject



60
61
62
# File 'lib/phlex/rails/sgml/overrides.rb', line 60

def capture
	super&.html_safe
end

#helpersObject



7
8
9
10
11
12
13
# File 'lib/phlex/rails/sgml/overrides.rb', line 7

def helpers
	if defined?(ViewComponent::Base) && @_view_context.is_a?(ViewComponent::Base)
		@_view_context.helpers
	else
		@_view_context
	end
end

#render(*args, **kwargs, &block) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/phlex/rails/sgml/overrides.rb', line 15

def render(*args, **kwargs, &block)
	renderable = args[0]

	case renderable
	when Phlex::SGML, Proc
		return super
	when Class
		return super if renderable < Phlex::SGML
	when Enumerable
		return super unless renderable.is_a?(ActiveRecord::Relation)
	else
		captured_block = -> { capture(&block) } if block
		@_context.target << @_view_context.render(*args, **kwargs, &captured_block)
	end

	nil
end

#render_in(view_context, &block) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/phlex/rails/sgml/overrides.rb', line 33

def render_in(view_context, &block)
	if block_given?
		call(view_context: view_context) do |*args|
			original_length = @_context.target.length

			if args.length == 1 && Phlex::SGML === args[0] && !block.source_location&.[](0)&.end_with?(".rb")
				output = view_context.capture(
					args[0].unbuffered, &block
				)
			else
				output = view_context.capture(*args, &block)
			end

			unchanged = (original_length == @_context.target.length)

			if unchanged
				case output
				when ActiveSupport::SafeBuffer
					@_context.target << output
				end
			end
		end.html_safe
	else
		call(view_context: view_context).html_safe
	end
end