gf-treevisitor 0.0.18 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/treevisitor.rb +1 -1
- data/lib/treevisitor/tree_node.rb +27 -7
- data/test/treevisitor/tc_tree_node_dsl.rb +28 -0
- metadata +1 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.19
|
data/lib/treevisitor.rb
CHANGED
@@ -35,14 +35,34 @@ class TreeNode < AbsNode
|
|
35
35
|
args << parent_node
|
36
36
|
tree_node = @tree_node_class.new(*args)
|
37
37
|
@scope_stack.push tree_node
|
38
|
-
|
38
|
+
if block
|
39
|
+
if block.arity == 0 || block.arity == -1
|
40
|
+
class_eval(&block)
|
41
|
+
elsif block.arity == 1
|
42
|
+
new_block = Proc.new{ block.call(tree_node) }
|
43
|
+
class_eval(&new_block)
|
44
|
+
else
|
45
|
+
raise "block take too much arguments #{block.arity}"
|
46
|
+
end
|
47
|
+
end
|
39
48
|
@scope_stack.pop
|
40
49
|
end
|
41
50
|
|
42
|
-
def leaf(*args)
|
51
|
+
def leaf(*args, &block)
|
43
52
|
tree_node = @scope_stack[-1]
|
44
53
|
args << tree_node
|
45
|
-
@leaf_node_class.new(*args)
|
54
|
+
leaf_node = @leaf_node_class.new(*args)
|
55
|
+
if block
|
56
|
+
if block.arity == 0 || block.arity == -1
|
57
|
+
class_eval(&block)
|
58
|
+
elsif block.arity == 1
|
59
|
+
new_block = Proc.new{ block.call(leaf_node) }
|
60
|
+
class_eval(&new_block)
|
61
|
+
else
|
62
|
+
raise "block take too much arguments #{block.arity}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
leaf_node
|
46
66
|
end
|
47
67
|
end
|
48
68
|
|
@@ -89,7 +109,7 @@ class TreeNode < AbsNode
|
|
89
109
|
return if leaf.parent == self
|
90
110
|
if not leaf.parent.nil?
|
91
111
|
leaf.remove_from_parent
|
92
|
-
end
|
112
|
+
end
|
93
113
|
leaf.parent = self
|
94
114
|
if @leaves.length > 0
|
95
115
|
@leaves.last.next = leaf
|
@@ -108,7 +128,7 @@ class TreeNode < AbsNode
|
|
108
128
|
tree_node.remove_from_parent
|
109
129
|
else
|
110
130
|
tree_node.prefix_path = nil
|
111
|
-
end
|
131
|
+
end
|
112
132
|
tree_node.invalidate
|
113
133
|
tree_node.parent = self
|
114
134
|
if @children.length > 0
|
@@ -157,8 +177,8 @@ class TreeNode < AbsNode
|
|
157
177
|
if root?
|
158
178
|
str << to_s << "\n"
|
159
179
|
else
|
160
|
-
str << prefix
|
161
|
-
if self.next
|
180
|
+
str << prefix
|
181
|
+
if self.next
|
162
182
|
str << "|-- "
|
163
183
|
else
|
164
184
|
str << "\`-- "
|
@@ -71,6 +71,34 @@ EOS
|
|
71
71
|
assert_equal out, tree.to_str
|
72
72
|
end
|
73
73
|
|
74
|
+
def test_dsl_block_with_arg
|
75
|
+
|
76
|
+
tree = TreeNode.create do
|
77
|
+
node "root" do |node|
|
78
|
+
node.prefix_path=("pre/")
|
79
|
+
leaf "l1"
|
80
|
+
leaf "l2"
|
81
|
+
node "sub" do
|
82
|
+
leaf "l3" do |leaf|
|
83
|
+
end
|
84
|
+
end
|
85
|
+
node "woleaves"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# puts tree.to_str
|
90
|
+
out =<<EOS
|
91
|
+
root
|
92
|
+
|-- l1
|
93
|
+
|-- l2
|
94
|
+
|-- sub
|
95
|
+
| `-- l3
|
96
|
+
`-- woleaves
|
97
|
+
EOS
|
98
|
+
assert_equal out, tree.to_str
|
99
|
+
assert_equal "pre/root/sub/l3", tree.find("l3").path_with_prefix
|
100
|
+
end
|
101
|
+
|
74
102
|
def test_derivated
|
75
103
|
tree = TreeNode.create(DTreeNode, DLeafNode) do
|
76
104
|
node "root" do
|