gf-treevisitor 0.0.18 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
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