class PrisonParser::Node

Attributes

allow_inline[RW]
label[R]
nodes[R]
properties[R]

Public Class Methods

new(label=nil) click to toggle source
# File lib/prison_parser/node.rb, line 9
def initialize(label=nil)
  @label = label
  @nodes = Hash.new
  @properties = Hash.new
  @allow_inline = true
end

Public Instance Methods

add_property(key, value) click to toggle source

ReadKey, PushProperty

# File lib/prison_parser/node.rb, line 44
def add_property(key, value)
  return if key == "BEGIN" || key == "END"
  if properties[key]
    if properties[key].is_a?(Array)
      @properties[key] << value
    else
      @properties[key] = [properties[key], value]
    end
  else
    @properties[key] = value
  end
end
allow_inline?() click to toggle source
# File lib/prison_parser/node.rb, line 31
def allow_inline?
  @allow_inline
end
create_node(node_label) click to toggle source
# File lib/prison_parser/node.rb, line 57
def create_node(node_label)
  node = Node.new(node_label)
  if nodes.has_key?(node_label)
    if nodes[node_label].is_a?(Array)
      @nodes[node_label] << node
    else
      @nodes[node_label] = [nodes[node_label], node]
    end
  else
    @nodes[node_label] = node
  end
  node
end
finished_reading_node(node) click to toggle source
# File lib/prison_parser/node.rb, line 71
def finished_reading_node(node)
  # do nothing
end
inspect() click to toggle source
# File lib/prison_parser/node.rb, line 35
def inspect
  str = StringIO.new("")
  str.write "<#{label} "
  str.write properties.entries.map { |e|"#{e[0]}=\"#{e[1]}\"" }.join(", ")
  str.write ">"
  str.string
end
method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/prison_parser/node.rb, line 16
def method_missing(name, *args, &block)
  # Look in Nodes
  # Look in properties
  # if ends with ?, cast property to boolean
  # else SUPER

  if nodes.has_key?(name.to_s)
    nodes[name.to_s]
  elsif properties.has_key?(name.to_s)
    properties[name.to_s]
  else
    super
  end
end
write_nodes(writer) click to toggle source

WRITING

# File lib/prison_parser/node.rb, line 78
def write_nodes(writer)
  nodes.values.each do |node|
    if node.is_a?(Array)
      node.map { |n| writer.write_node(n) }
    else
      writer.write_node(node)
    end
  end
end
write_properties(writer) click to toggle source
# File lib/prison_parser/node.rb, line 88
def write_properties(writer)
  properties.each_pair do |k,value|
    if value.is_a?(Array)
      value.map { |v| writer.write_property(k, v) }
    else
      writer.write_property(k, value)
    end
  end
end