Module: Lifeform::PhlexRenderable

Defined in:
lib/lifeform/phlex_renderable.rb

Instance Method Summary collapse

Instance Method Details

#append=(value) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/lifeform/phlex_renderable.rb', line 51

def append=(value)
  return unless value

  if value.html_safe?
    self.safe_append = value
  else
    @_target << case value
      when String then ERB::Util.html_escape(value)
      when Symbol then ERB::Util.html_escape(value.name)
      else ERB::Util.html_escape(value.to_s)
    end
  end
end

#captureObject



65
66
67
# File 'lib/lifeform/phlex_renderable.rb', line 65

def capture
  super.html_safe
end

#helpersObject



6
7
8
# File 'lib/lifeform/phlex_renderable.rb', line 6

def helpers
  @_view_context
end

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



10
11
12
13
14
15
16
17
# File 'lib/lifeform/phlex_renderable.rb', line 10

def render(renderable, *args, **kwargs, &block)
  return super if renderable.is_a?(Phlex::HTML)
  return super if renderable.is_a?(Class) && renderable < Phlex::HTML

  @_target << @_view_context.render(renderable, *args, **kwargs, &block)

  nil
end

#render_in(view_context, &block) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/lifeform/phlex_renderable.rb', line 19

def render_in(view_context, &block)
  if block_given?
    call(view_context: view_context) do |*args|
      view_context.with_output_buffer(self) do
        original_length = @_target.length
        output = yield(*args)
        unchanged = (original_length == @_target.length)

        if unchanged
          if output.is_a?(ActiveSupport::SafeBuffer)
            unsafe_raw(output)
          else
            text(output)
          end
        end
      end
    end.html_safe
  else
    call(view_context: view_context).html_safe
  end
end

#safe_append=(value) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/lifeform/phlex_renderable.rb', line 41

def safe_append=(value)
  return unless value

  @_target << case value
    when String then value
    when Symbol then value.name
    else value.to_s
  end
end

#set_original_view_context(view_context) ⇒ Object

Trick ViewComponent into thinking we’re a ViewComponent to fix rendering output



70
71
# File 'lib/lifeform/phlex_renderable.rb', line 70

def set_original_view_context(view_context)
end