class Argyle::Renderer

Public Class Methods

new(style_container) click to toggle source

@param style_container [Argyle::StyleSheet::Container]

# File lib/argyle/renderer.rb, line 4
def initialize(style_container)
  @style_container = style_container
  @views = {}

  set_view(Argyle::Component::Text, Argyle::View::Text)
end

Public Instance Methods

render(page) click to toggle source

@param page [Argyle::Page::Base]

@raise [Argyle::Error::NotFound] If no view is set for a component class @raise [Argyle::Error::NotFound] If the layout has no associated window for the a component's area

# File lib/argyle/renderer.rb, line 29
def render(page)
  windows = page.layout.windows

  page.components.each_value do |component|
    component_class = component.class
    area = component.area

    unless @views.include?(component_class)
      raise Argyle::Error::NotFound.new("View not found fo component #{component_class}")
    end

    raise Argyle::Error::NotFound.new("Window not found for area: #{area}") unless windows.include?(area)

    @views[component_class].render(windows[area], component)
  end

  windows.each_value(&:refresh)
end
set_view(component_klass, view_klass) click to toggle source

@param component_klass [Class<Argyle::Component::Base>] @param view_klass [Class<Argyle::View::Base>]

@raise [Argyle::Error::TypeError] If component_klass is not a subclass of Argyle::Component::Base @raise [Argyle::Error::TypeError] If view_klass is not a subclass of Argyle::View::Base

# File lib/argyle/renderer.rb, line 17
def set_view(component_klass, view_klass)
  Argyle::Assert.klass(Argyle::Component::Base, component_klass)
  Argyle::Assert.klass(Argyle::View::Base, view_klass)

  @views[component_klass] = view_klass.new(@style_container)
end