class Eskimo::Core::Renderer

Render a component or a list of ones.

Public Class Methods

new(**props) click to toggle source

@param props [Hash]

Properties to pass to each component being rendered.
# File lib/eskimo/core/renderer.rb, line 8
def initialize(**props)
  @props = { **props, render: method(:render) }
end

Public Instance Methods

apply(&components) click to toggle source

@param components [Proc]

A block that returns components to render.
# File lib/eskimo/core/renderer.rb, line 14
def apply(&components)
  render(components)
end

Private Instance Methods

bail(component) click to toggle source
# File lib/eskimo/core/renderer.rb, line 40
def bail(component)
  raise ArgumentError.new(
    "Eskimo: don't know how to render #{component.class} => #{component}"
  )
end
render(*components) click to toggle source
# File lib/eskimo/core/renderer.rb, line 20
def render(*components)
  buf = +''

  for component in components do
    if component.is_a?(String)
      buf << component
    elsif component.is_a?(Array)
      buf << render(*component)
    elsif component.is_a?(Proc)
      buf << render(component[**@props])
    elsif component.respond_to?(:render)
      buf << render(component.render(**@props))
    elsif component
      bail(component)
    end
  end

  buf
end