class PrisonParser::Utils::Writer

Constants

INDENT_STR

Attributes

stream[R]

Public Class Methods

new(stream=nil) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 9
def initialize(stream=nil)
  @stream = stream || StringIO.new("")
  @inline = false
  @inline_stack = []
  @indent = 0
end

Public Instance Methods

node_inline?(node) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 82
def node_inline?(node)
  node.nodes.size == 0 && node.properties.size < 13 && node.allow_inline?
end
quote?(value) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 86
def quote?(value)
  !value.index(' ').nil?
end
write(data) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 90
def write(data)
  stream.write data
end
write_indent(indent = nil) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 50
def write_indent(indent = nil)
  indent ||= @indent
  return if indent <= 0
  write INDENT_STR*indent
end
write_node(node) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 22
def write_node(node)
  return nil if node.nil?
  @inline_stack.push(@inline)
  @inline = node_inline?(node)

  write_indent
  @indent += 1
  write "BEGIN "
  write_value node.label

  if @inline
    write "  "
  else
    write "\n"
  end

  write_node_data(node)

  @indent -= 1

  write_indent unless @inline
  write "END\n"

  @inline = @inline_stack.pop

  self
end
write_node_data(node) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 69
def write_node_data(node)
  node.write_properties(self)
  node.write_nodes(self)
end
write_prison(prison) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 16
def write_prison(prison)
  write "\n"
  write_node_data(prison)
  self
end
write_property(key, value) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 56
def write_property(key, value)
  return if value.nil?

  write_indent unless @inline

  write_value key
  write " "
  write_value value

  write (@inline ? "  " : "\n")

end
write_value(value) click to toggle source
# File lib/prison_parser/utils/writer.rb, line 74
def write_value(value)
  if quote?(value)
    write "\"#{value}\""
  else
    write value
  end
end