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 CHANGED
@@ -1 +1 @@
1
- 0.0.18
1
+ 0.0.19
@@ -1,3 +1,3 @@
1
1
  class TreeVisitor
2
- VERSION = '0.0.18'
2
+ VERSION = '0.0.19'
3
3
  end
@@ -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
- class_eval(&block) if block
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gf-treevisitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - gf