Class: LineTree
- Inherits:
-
Object
- Object
- LineTree
- Defined in:
- lib/line-tree.rb
Instance Method Summary collapse
-
#initialize(raw_s, level: nil, ignore_non_element: true, ignore_blank_lines: true, ignore_label: false, ignore_newline: true, root: nil, debug: false) ⇒ LineTree
constructor
A new instance of LineTree.
- #make_tree_list(a) ⇒ Object
- #scan2keypair(h, trail = nil) ⇒ Object
- #to_a(normalize: false) ⇒ Object
- #to_doc(encapsulate: false) ⇒ Object
- #to_h ⇒ Object
- #to_html(numbered: false) ⇒ Object
-
#to_kv_pair ⇒ Object
key–value pair returns Hash object describing a flat representation of a tree.
- #to_tree ⇒ Object
- #to_xml(options = {}) ⇒ Object
Constructor Details
#initialize(raw_s, level: nil, ignore_non_element: true, ignore_blank_lines: true, ignore_label: false, ignore_newline: true, root: nil, debug: false) ⇒ LineTree
Returns a new instance of LineTree.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/line-tree.rb', line 24 def initialize(raw_s, level: nil, ignore_non_element: true, ignore_blank_lines: true, ignore_label: false, ignore_newline: true, root: nil, debug: false) puts 'inside linetree'.info if @debug @root = root s = raw_s @ignore_non_element = ignore_non_element @ignore_label = ignore_label @ignore_blank_lines = ignore_blank_lines @ignore_newline = ignore_newline @debug = debug lines = ignore_blank_lines ? s.gsub(/^ *$\n/,'') : s puts ('lines : ' + lines.inspect).debug if @debug @to_a = scan_shift(lines.lstrip, level) end |
Instance Method Details
#make_tree_list(a) ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/line-tree.rb', line 120 def make_tree_list(a) items = a.inject([]) do |r,x| if x.is_a? Array then r << make_tree_list(x) else r + ['item', {title: x}] end end end |
#scan2keypair(h, trail = nil) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/line-tree.rb', line 90 def scan2keypair(h, trail=nil) h.inject([]) do |r,x| if x.last.is_a? String then key, val = x new_key = if r.last and r.last.first.length > 0 then key.to_s else key.to_s end r << [[trail, new_key].compact.join('/'), val] else new_key = x.first.to_s r << [new_key, x.last.first] r.concat scan2keypair(x.last.last, [trail, new_key].compact.join('/')) end end end |
#to_a(normalize: false) ⇒ Object
46 47 48 |
# File 'lib/line-tree.rb', line 46 def to_a(normalize: false) normalize ? norm(@to_a) : @to_a end |
#to_doc(encapsulate: false) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/line-tree.rb', line 50 def to_doc(encapsulate: false) a = @to_a a2 = if a[0].is_a? Array then encapsulate ? encap(a) : scan_a(a) else puts 'before scan_a' if @debug scan_a(*a) end a3 = @root ? a2.unshift(@root, {}) : a2.flatten(1) puts 'a3: ' + a3.inspect if @debug Rexle.new(a3) end |
#to_h ⇒ Object
71 72 73 |
# File 'lib/line-tree.rb', line 71 def to_h() build_h(@to_a) end |
#to_html(numbered: false) ⇒ Object
75 76 77 78 79 80 81 82 83 |
# File 'lib/line-tree.rb', line 75 def to_html(numbered: false) @numbered = numbered s = "<ul>%s</ul>" % make_html_list(@to_a) puts ('s: ' + s.inspect).debug if @debug puts s if @debug Rexle.new(s).xml declaration: false end |
#to_kv_pair ⇒ Object
key–value pair returns Hash object describing a flat representation of a tree
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/line-tree.rb', line 88 def to_kv_pair def scan2keypair(h, trail=nil) h.inject([]) do |r,x| if x.last.is_a? String then key, val = x new_key = if r.last and r.last.first.length > 0 then key.to_s else key.to_s end r << [[trail, new_key].compact.join('/'), val] else new_key = x.first.to_s r << [new_key, x.last.first] r.concat scan2keypair(x.last.last, [trail, new_key].compact.join('/')) end end end scan2keypair(self.to_h).to_h end |
#to_tree ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/line-tree.rb', line 118 def to_tree() def make_tree_list(a) items = a.inject([]) do |r,x| if x.is_a? Array then r << make_tree_list(x) else r + ['item', {title: x}] end end end a = make_tree_list(@to_a) doc = Rexle.new(['tree', {}, *a]) doc.xml end |
#to_xml(options = {}) ⇒ Object
139 140 141 |
# File 'lib/line-tree.rb', line 139 def to_xml(={}) to_doc.xml() end |