class Voom::Presenters::WebClient::ComponentRenderer

This class renders a given component. First it looks for plugins that override default behavior If they don't exist then it renders the base components

Public Class Methods

new(comp, render:, components:, index:, scope: nil) click to toggle source
# File lib/voom/presenters/web_client/component_renderer.rb, line 13
def initialize(comp,
               render:,
               components:,
               index:,
               scope: nil)
  @comp = comp
  @index = index
  @components = components
  @scope = scope
  @render = render
  initialize_plugins
end

Public Instance Methods

render() click to toggle source
# File lib/voom/presenters/web_client/component_renderer.rb, line 26
def render
  comp = ComponentDecoratorFactory.build(@comp)
  components = @components.map { |c| ComponentDecoratorFactory.build(c) }

  return public_send(:"render_#{@scope ? "_#{@scope}_" : nil}#{@comp.type}",
              comp,
              components: components,
              index: @index,
              render: @render) if respond_to?(:"render_#{@comp.type}")

  @render.call :erb, :"components#{@scope ? "/#{@scope}" : nil}/#{@comp.type}",
               :locals => {comp: comp,
                           components: components, index: @index}
end

Private Instance Methods

initialize_plugins() click to toggle source
# File lib/voom/presenters/web_client/component_renderer.rb, line 43
def initialize_plugins
  self.class.include_plugins(:WebClientComponents, plugins: @comp.send(:_plugins_))
end