Class: PrisonParser::Utils::Writer

Inherits:
Object
  • Object
show all
Defined in:
lib/prison_parser/utils/writer.rb

Constant Summary collapse

INDENT_STR =
"    "

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stream = nil) ⇒ Writer

Returns a new instance of Writer.



9
10
11
12
13
14
# File 'lib/prison_parser/utils/writer.rb', line 9

def initialize(stream=nil)
  @stream = stream || StringIO.new("")
  @inline = false
  @inline_stack = []
  @indent = 0
end

Instance Attribute Details

#streamObject (readonly)

Returns the value of attribute stream.



6
7
8
# File 'lib/prison_parser/utils/writer.rb', line 6

def stream
  @stream
end

Instance Method Details

#node_inline?(node) ⇒ Boolean

Returns:

  • (Boolean)


82
83
84
# 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) ⇒ Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/prison_parser/utils/writer.rb', line 86

def quote?(value)
  !value.index(' ').nil?
end

#write(data) ⇒ Object



90
91
92
# File 'lib/prison_parser/utils/writer.rb', line 90

def write(data)
  stream.write data
end

#write_indent(indent = nil) ⇒ Object



50
51
52
53
54
# 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) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 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) ⇒ Object



69
70
71
72
# 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) ⇒ Object



16
17
18
19
20
# 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) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
# 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) ⇒ Object



74
75
76
77
78
79
80
# File 'lib/prison_parser/utils/writer.rb', line 74

def write_value(value)
  if quote?(value)
    write "\"#{value}\""
  else
    write value
  end
end