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