class Argyle::Blueprint

@!attribute [r] pages

@return [Hash{Symbol=>Argyle::Page}]

Attributes

pages[R]

Public Class Methods

new(layout_factory: nil, layout_registry: nil, page_factory: nil, renderer: nil) click to toggle source

@param layout_factory [Argyle::Layout::Factory] @param layout_registry [Argyle::Layout::Registry] @param page_factory [Argyle::Page::Factory] @param renderer [Argyle::Renderer]

# File lib/argyle/blueprint.rb, line 12
def initialize(layout_factory: nil, layout_registry: nil, page_factory: nil, renderer: nil)
  @pages = {}
  @layouts = []
  @current_page = nil
  @layout_factory = layout_factory || Argyle::Layout::Factory.new
  @layout_registry = layout_registry || create_layout_registry
  @page_factory = page_factory || Argyle::Page::Factory.new(@layout_registry)
  @renderer = renderer || Argyle::Renderer.new
end

Public Instance Methods

add_page(page_klass) click to toggle source

@param page_klass [Class<Argyle::Page::Base>] Subclass of Argyle::Page::Base

# File lib/argyle/blueprint.rb, line 35
def add_page(page_klass)
  raise Argyle::Error::ArgumentError.new("Page #{page_klass} has no id") if page_klass.identifier.nil?

  page = @page_factory.create(page_klass)
  @pages[page_klass.identifier] = page

  @current_page = page if @current_page.nil?
end
render() click to toggle source

@note Renders the current page

# File lib/argyle/blueprint.rb, line 46
def render
  raise Argyle::Error::NotFound.new('No pages defined yet') if @pages.empty?

  @renderer.render(@current_page)
end

Private Instance Methods

create_layout_registry() click to toggle source
# File lib/argyle/blueprint.rb, line 24
def create_layout_registry
  registry = Argyle::Layout::Registry.new
  registry.add(@layout_factory.create(Argyle::Layout::Default))

  registry
end