Class: Marko::TreeNode
- Inherits:
-
Object
- Object
- Marko::TreeNode
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/marko/tree_node.rb
Instance Attribute Summary collapse
-
#body ⇒ Object
readonly
Returns the value of attribute body.
-
#meta ⇒ Object
readonly
Returns the value of attribute meta.
-
#parent ⇒ Object
readonly
Returns the value of attribute parent.
-
#title ⇒ Object
readonly
Returns the value of attribute title.
Instance Method Summary collapse
- #<<(node) ⇒ Object
- #belongs_to?(ref) ⇒ Boolean
-
#each {|_self| ... } ⇒ Object
see Enumerable#each.
- #find_item(ref) ⇒ Object
- #find_node(ref) ⇒ Object
- #id ⇒ Object
-
#initialize(title = '', body = '', **meta) ⇒ TreeNode
constructor
A new instance of TreeNode.
-
#items ⇒ Array<Node>
Ordered list of child nodes.
-
#links ⇒ Array<String>
Macro links in the node #body IT IS RATHER MACRO FOR WRITER SO TI SHOULD BE PROCESSED APPROPRIATELY.
-
#nesting_level ⇒ Integer
The node level in the node hierarchy.
- #order_index ⇒ Array<String>
- #orphan! ⇒ Object
-
#root ⇒ Node
The root node in the node hierarchy.
- #root? ⇒ Boolean
Constructor Details
#initialize(title = '', body = '', **meta) ⇒ TreeNode
Returns a new instance of TreeNode.
29 30 31 32 33 34 35 |
# File 'lib/marko/tree_node.rb', line 29 def initialize(title = '', body = '', **) @parent, @items = nil, [] @title = MustbeString.(title, :title) @body = MustbeString.(body, :body) = [:id] = '' unless [:id] end |
Instance Attribute Details
#body ⇒ Object (readonly)
Returns the value of attribute body.
21 22 23 |
# File 'lib/marko/tree_node.rb', line 21 def body @body end |
#meta ⇒ Object (readonly)
Returns the value of attribute meta.
20 21 22 |
# File 'lib/marko/tree_node.rb', line 20 def end |
#parent ⇒ Object
Returns the value of attribute parent.
18 19 20 |
# File 'lib/marko/tree_node.rb', line 18 def parent @parent end |
#title ⇒ Object (readonly)
Returns the value of attribute title.
19 20 21 |
# File 'lib/marko/tree_node.rb', line 19 def title @title end |
Instance Method Details
#<<(node) ⇒ Object
37 38 39 40 41 42 |
# File 'lib/marko/tree_node.rb', line 37 def <<(node) MustbeTreeNode.(node) node.parent = self @items << node node end |
#belongs_to?(ref) ⇒ Boolean
87 88 89 90 91 |
# File 'lib/marko/tree_node.rb', line 87 def belongs_to?(ref) node = self.parent node = node.parent while node && node.id != ref node&.id == ref end |
#each {|_self| ... } ⇒ Object
see Enumerable#each
45 46 47 48 49 |
# File 'lib/marko/tree_node.rb', line 45 def each(&block) return to_enum(__callee__) unless block_given? yield(self) items.each{|n| n.each(&block) } end |
#find_item(ref) ⇒ Object
65 66 67 |
# File 'lib/marko/tree_node.rb', line 65 def find_item(ref) @items.find{|n| n.id == ref || n.id.end_with?(ref)} end |
#find_node(ref) ⇒ Object
69 70 71 72 |
# File 'lib/marko/tree_node.rb', line 69 def find_node(ref) return find_item(ref) if ref.start_with?(?.) root.find{|n| n.id == ref} end |
#id ⇒ Object
59 60 61 62 63 |
# File 'lib/marko/tree_node.rb', line 59 def id val = .fetch(:id, '') return val unless @parent val.start_with?('.') ? @parent.id + val : val end |
#items ⇒ Array<Node>
Returns ordered list of child nodes.
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/marko/tree_node.rb', line 75 def items return @items unless order_index.any? [].tap do |ary| src = Array.new(@items) order_index.each do |i| node = find_item(i) ary << src.delete(node) if node end ary.concat(src) end end |
#links ⇒ Array<String>
Returns macro links in the node #body IT IS RATHER MACRO FOR WRITER SO TI SHOULD BE PROCESSED APPROPRIATELY.
110 111 112 113 |
# File 'lib/marko/tree_node.rb', line 110 def links return [] if @body.empty? @body.scan(/\[\[([\w\.]*)\]\]/).flatten.uniq end |
#nesting_level ⇒ Integer
Returns the node level in the node hierarchy.
105 106 107 |
# File 'lib/marko/tree_node.rb', line 105 def nesting_level @parent.nil? ? 0 : @parent.nesting_level + 1 end |
#order_index ⇒ Array<String>
52 53 54 55 56 57 |
# File 'lib/marko/tree_node.rb', line 52 def order_index .fetch(:order_index, '') .strip .split(/\s{1,}/) end |
#orphan! ⇒ Object
115 116 117 118 119 |
# File 'lib/marko/tree_node.rb', line 115 def orphan! return unless @parent @parent.delete_item(self) @parent = nil end |
#root ⇒ Node
Returns the root node in the node hierarchy.
94 95 96 97 98 |
# File 'lib/marko/tree_node.rb', line 94 def root n = self n = n.parent while n.parent n end |
#root? ⇒ Boolean
100 101 102 |
# File 'lib/marko/tree_node.rb', line 100 def root? self == root end |