gf-treevisitor 0.0.13 → 0.0.15

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.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