gf-treevisitor 0.0.13 → 0.0.15

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.13
1
+ 0.0.15
data/lib/treevisitor.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class TreeVisitor
2
- VERSION = '0.0.13'
2
+ VERSION = '0.0.15'
3
3
  end
@@ -9,6 +9,41 @@ require 'treevisitor/leaf_node'
9
9
  #
10
10
  class TreeNode < AbsNode
11
11
 
12
+ class << self
13
+
14
+ def create(class1 = TreeNode, class2 = LeafNode, &block)
15
+ if class1.ancestors.include?(TreeNode) and class2.ancestors.include?(LeafNode)
16
+ @tree_node_class = class1
17
+ @leaf_node_class = class2
18
+ elsif class1.ancestors.include?(LeafNode) and class2 == LeafNode
19
+ @tree_node_class = self
20
+ @leaf_node_class = class1
21
+ end
22
+
23
+ if @tree_node_class.nil? || @leaf_node_class.nil?
24
+ raise "Must be specified class derived from TreeNode and LeafNode"
25
+ end
26
+
27
+ @scope_stack = []
28
+ class_eval(&block)
29
+ end
30
+
31
+ private
32
+
33
+ def node(name, &block)
34
+ parent_node = @scope_stack.length > 0 ? @scope_stack[-1] : nil
35
+ tree_node = @tree_node_class.new(name, parent_node)
36
+ @scope_stack.push tree_node
37
+ class_eval(&block)
38
+ @scope_stack.pop
39
+ end
40
+
41
+ def leaf(name)
42
+ tree_node = @scope_stack[-1]
43
+ @leaf_node_class.new(name, tree_node)
44
+ end
45
+ end
46
+
12
47
  attr_reader :leaves
13
48
  attr_reader :children
14
49
 
@@ -0,0 +1,78 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ require 'treevisitor/tree_node.rb'
4
+
5
+
6
+ class DTreeNode < TreeNode
7
+ def to_s
8
+ "dt: #{name}"
9
+ end
10
+ end
11
+
12
+ class DLeafNode < LeafNode
13
+ def to_s
14
+ "dl: #{name}"
15
+ end
16
+ end
17
+
18
+ class TCTreeNodeDsl < Test::Unit::TestCase
19
+
20
+ def test_dsl
21
+
22
+ tree = TreeNode.create do
23
+ node "root" do
24
+ leaf "l1"
25
+ leaf "l2"
26
+ node "sub" do
27
+ leaf "l3"
28
+ end
29
+ end
30
+ end
31
+
32
+ # puts tree.to_str
33
+ out =<<EOS
34
+ root
35
+ |-- l1
36
+ |-- l2
37
+ `-- sub
38
+ `-- l3
39
+ EOS
40
+ assert_equal out, tree.to_str
41
+
42
+ end
43
+
44
+
45
+ def test_derivated
46
+ tree = TreeNode.create(DTreeNode, DLeafNode) do
47
+ node "root" do
48
+ leaf "l1"
49
+ leaf "l2"
50
+ node "sub" do
51
+ leaf "l3"
52
+ end
53
+ end
54
+ end
55
+
56
+ # puts tree.to_str
57
+ out =<<EOS
58
+ dt: root
59
+ |-- dl: l1
60
+ |-- dl: l2
61
+ `-- dt: sub
62
+ `-- dl: l3
63
+ EOS
64
+ assert_equal out, tree.to_str
65
+
66
+ tree = DTreeNode.create(DLeafNode) do
67
+ node "root" do
68
+ leaf "l1"
69
+ leaf "l2"
70
+ node "sub" do
71
+ leaf "l3"
72
+ end
73
+ end
74
+ end
75
+ assert_equal out, tree.to_str
76
+ end
77
+
78
+ end
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.13
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - gf
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-07 00:00:00 -07:00
12
+ date: 2009-06-09 00:00:00 -07:00
13
13
  default_executable: tree.rb
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -96,6 +96,7 @@ test_files:
96
96
  - test/treevisitor/tc_dir_tree_walker.rb
97
97
  - test/treevisitor/tc_tree_node.rb
98
98
  - test/treevisitor/tc_tree_node_visitor.rb
99
+ - test/treevisitor/tc_tree_node_dsl.rb
99
100
  - test/treevisitor/test_helper.rb
100
101
  - test/gf_utilities/tc_md5.rb
101
102
  - test/gf_utilities/tc_kwartz.rb