Class: PrisonParser::Utils::Writer
- Inherits:
-
Object
- Object
- PrisonParser::Utils::Writer
- Defined in:
- lib/prison_parser/utils/writer.rb
Constant Summary collapse
- INDENT_STR =
" "
Instance Attribute Summary collapse
-
#stream ⇒ Object
readonly
Returns the value of attribute stream.
Instance Method Summary collapse
-
#initialize(stream = nil) ⇒ Writer
constructor
A new instance of Writer.
- #node_inline?(node) ⇒ Boolean
- #quote?(value) ⇒ Boolean
- #write(data) ⇒ Object
- #write_indent(indent = nil) ⇒ Object
- #write_node(node) ⇒ Object
- #write_node_data(node) ⇒ Object
- #write_prison(prison) ⇒ Object
- #write_property(key, value) ⇒ Object
- #write_value(value) ⇒ Object
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
#stream ⇒ Object (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
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
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 |