class Beckett::Renderer

Constants

DISPATCHER

Public Class Methods

new(root, options = {}) click to toggle source
Calls superclass method
# File lib/beckett/renderer.rb, line 8
def initialize(root, options = {})
  super
  @stack = []
end

Public Instance Methods

convert(node) click to toggle source
# File lib/beckett/renderer.rb, line 13
def convert(node)
  send(DISPATCHER[node.type], node)
end

Protected Instance Methods

build(node) click to toggle source

# File lib/beckett/renderer.rb, line 39
def build(node)
  Node.find(node).new(node).tap do |result|
    push(result)
    inner(node)
    pop
  end
end
build_section(node) click to toggle source
# File lib/beckett/renderer.rb, line 47
def build_section(node)
  level = node.options[:level]

  while @stack.length > level
    pop
  end

  if level == 1
    Node::Article.new(node)
  else
    Node::Section.new(node)
  end
end
context() click to toggle source
# File lib/beckett/renderer.rb, line 61
def context
  @stack.last
end
convert_blank(node) click to toggle source

# File lib/beckett/renderer.rb, line 29
def convert_blank(node)
  nil
end
convert_node(node) click to toggle source
# File lib/beckett/renderer.rb, line 23
def convert_node(node)
  build(node)
end
convert_root(node) click to toggle source
# File lib/beckett/renderer.rb, line 19
def convert_root(node)
  build(node).to_h
end
convert_text(node) click to toggle source
# File lib/beckett/renderer.rb, line 33
def convert_text(node)
  Node.find(node).new(node)
end
debug?() click to toggle source

# File lib/beckett/renderer.rb, line 101
def debug?
  if @debug == nil
    @debug = (ENV['DEBUG'] == 'true')
  end
  @debug
end
inner(node) click to toggle source
# File lib/beckett/renderer.rb, line 65
def inner(node)
  node.children.each do |child|
    if child.type == :header
      build_section(child).tap do |result|
        context << result
        push(result)
      end
    end

    convert(child).tap do |result|
      context << result unless result.nil?
    end
  end
end
pop() click to toggle source
# File lib/beckett/renderer.rb, line 90
def pop
  context = @stack.pop

  if debug?
    @indent -= 2
    puts "#{' ' * @indent}#{context}".sub(/^(\s*)<([A-Z]+).*/, '\1</\2>')
  end
end
push(context) click to toggle source
# File lib/beckett/renderer.rb, line 80
def push(context)
  if debug?
    @indent ||= 0
    puts "#{' ' * @indent}#{context}"
    @indent += 2
  end

  @stack.push(context)
end