treevisitor 0.2.0 → 0.2.1

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.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 2
4
- :patch: 0
4
+ :patch: 1
5
5
  :build:
@@ -18,15 +18,13 @@ module TreeVisitor
18
18
  #
19
19
  class TreeNodeVisitor
20
20
 
21
- def initialize(&block)
22
-
21
+ def initialize(delegate = nil, &block)
23
22
  @on_enter_tree_node_blocks = []
24
23
  @on_exit_tree_node_blocks = []
25
24
  @on_visit_leaf_node_blocks = []
26
-
27
25
  @stack = []
28
26
  @root = nil
29
-
27
+ @delegate = delegate
30
28
  if block
31
29
  instance_eval(&block)
32
30
  end
@@ -37,64 +35,67 @@ module TreeVisitor
37
35
  #
38
36
  def enter_node(tree_node)
39
37
  parent = @stack.last
40
- @on_enter_tree_node_blocks.each { |b| b.call(tree_node, parent) }
38
+ if @delegate
39
+ @delegate.enter_node(tree_node) if @delegate.respond_to? :enter_node
40
+ else
41
+ @on_enter_tree_node_blocks.each { |b| b.call(tree_node, parent) }
42
+ end
41
43
  @root = tree_node if @stack.empty?
42
44
  @stack.push(tree_node)
43
45
  end
44
46
 
45
- # alias :enter_tree_node :enter_node
46
-
47
47
  #
48
48
  # called on tree node at end of the visit i.e. oll subtree are visited
49
49
  #
50
50
  def exit_node(tree_node)
51
51
  parent = @stack.last
52
- @on_exit_tree_node_blocks.each { |b| b.call(tree_node, parent) }
52
+ if @delegate
53
+ @delegate.exit_node(tree_node) if @delegate.respond_to? :exit_node
54
+ else
55
+ @on_exit_tree_node_blocks.each { |b| b.call(tree_node, parent) }
56
+ end
53
57
  @stack.pop
54
58
  end
55
59
 
56
- # alias :exit_tree_node :exit_node
57
-
58
60
  #
59
61
  # called when visit leaf node
60
62
  #
61
63
  def visit_leaf(leaf_node)
62
64
  parent = @stack.last
63
- @on_visit_leaf_node_blocks.each { |b| b.call(leaf_node, parent) }
65
+ if @delegate
66
+ @delegate.visit_leaf(leaf_node) if @delegate.respond_to? :visit_leaf
67
+ else
68
+ @on_visit_leaf_node_blocks.each { |b| b.call(leaf_node, parent) }
69
+ end
64
70
  end
65
71
 
66
- # alias :visit_leaf_node :visit_leaf
67
-
68
72
  #
69
73
  # add a block to be called when entering into a tree_node
70
74
  #
71
75
  def on_enter_node(&block)
76
+ raise "already defined a delegate" if @delegate
72
77
  raise "block missing" unless block
73
78
  @on_enter_tree_node_blocks << block
74
79
  end
75
80
 
76
- # alias :on_enter_tree_node :on_enter_node
77
-
78
81
  #
79
82
  # add a block to be called when exiting from a TreeNode
80
83
  #
81
84
  def on_exit_node(&block)
85
+ raise "already defined a delegate" if @delegate
82
86
  raise "block missing" unless block
83
87
  @on_exit_tree_node_blocks << block
84
88
  end
85
89
 
86
- # alias :on_exit_tree_node :on_exit_node
87
-
88
90
  #
89
91
  # add a block to be called when visiting a leaf node
90
92
  #
91
93
  def on_leaf(&block)
94
+ raise "already defined a delegate" if @delegate
92
95
  raise "block missing" unless block
93
96
  @on_visit_leaf_node_blocks << block
94
97
  end
95
98
 
96
- # alias :on_visit_leaf_node :on_leaf
97
-
98
99
  end
99
100
 
100
101
  end
@@ -1,42 +1,45 @@
1
- # -*- coding: utf-8 -*-
2
- module TreeVisitor
3
- #
4
- # Executes a block when enter in a node
5
- # The block are defined from on_enter_X methods
6
- # The blocks take as argument only the node
7
- #
8
- class CallbackTreeNodeVisitor # < BasicTreeNodeVisitor
9
-
10
- def initialize
11
- @root = nil
12
- @stack = []
13
- @action_enter_tree_node = nil
14
- @action_visit_leaf_node = nil
15
- end
16
-
17
- def on_enter_node( &action )
18
- @action_enter_tree_node = action
19
- end
20
-
21
- def on_visit_leaf( &action )
22
- @action_visit_leaf_node = action
23
- end
24
-
25
- def enter_node( tree_node )
26
- # parent_node = @stack.empty? ? nil : @stack.last
27
- @root = tree_node if @stack.empty?
28
- @stack.push( tree_node )
29
- @action_enter_tree_node.call( tree_node ) if @action_enter_tree_node
30
- end
31
-
32
- def exit_node( tree_node )
33
- @stack.pop
34
- end
35
-
36
- def visit_leaf( leaf_node )
37
- # parent_node = @stack.last
38
- @action_visit_leaf_node.call( leaf_node ) if @action_visit_leaf_node
39
- end
40
-
41
- end
42
- end
1
+ ## -*- coding: utf-8 -*-
2
+ #module TreeVisitor
3
+ # #
4
+ # # Executes a block when enter in a node
5
+ # # The block are defined from on_enter_X methods
6
+ # # The blocks take as argument only the node
7
+ # #
8
+ # class CallbackTreeNodeVisitor
9
+ #
10
+ # def initialize(delegate = nil)
11
+ # @root = nil
12
+ # @stack = []
13
+ # @action_enter_tree_node = nil
14
+ # @action_visit_leaf_node = nil
15
+ # @delegate = delegate
16
+ # end
17
+ #
18
+ # def on_enter_node(&block)
19
+ # raise "already defined a delegate" if @delegate
20
+ # @action_enter_tree_node = block
21
+ # end
22
+ #
23
+ # def on_visit_leaf(&block)
24
+ # raise "already defined a delegate" if @delegate
25
+ # @action_visit_leaf_node = block
26
+ # end
27
+ #
28
+ # def enter_node(tree_node)
29
+ # @root = tree_node if @stack.empty?
30
+ # @stack.push(tree_node)
31
+ # @action_enter_tree_node.call(tree_node) if @action_enter_tree_node
32
+ # @delegate.enter_node(tree_node) if @delegate
33
+ # end
34
+ #
35
+ # def exit_node(tree_node)
36
+ # @stack.pop
37
+ # end
38
+ #
39
+ # def visit_leaf(leaf_node)
40
+ # @action_visit_leaf_node.call(leaf_node) if @action_visit_leaf_node
41
+ # @delegate.visit_leaf(leaf_node) if @delegate
42
+ # end
43
+ #
44
+ # end
45
+ #end
@@ -5,7 +5,7 @@ module TreeVisitor
5
5
  # The block are defined from on_enter_X methods
6
6
  # The blocks take as argument the node and the parent_node
7
7
  #
8
- class CallbackTreeNodeVisitor2 # < BasicTreeNodeVisitor
8
+ class CallbackTreeNodeVisitor2
9
9
 
10
10
  attr_reader :root
11
11
 
@@ -16,21 +16,20 @@ module TreeVisitor
16
16
  @delegate = delegate
17
17
  end
18
18
 
19
- def on_enter_node(&action)
20
- @action_enter_tree_node = action
19
+ def on_enter_node(&block)
20
+ raise "already defined a delegate" if @delegate
21
+ @action_enter_tree_node = block
21
22
  end
22
23
 
23
- def on_visit_leaf(&action)
24
- @action_visit_leaf_node = action
24
+ def on_visit_leaf(&block)
25
+ raise "already defined a delegate" if @delegate
26
+ @action_visit_leaf_node = block
25
27
  end
26
28
 
27
29
  def enter_node(src_tree_node)
28
30
  dst_parent_node = @stack.empty? ? nil : @stack.last
29
- if @action_enter_tree_node
30
- dst_tree_node = @action_enter_tree_node.call(src_tree_node, dst_parent_node)
31
- elsif @delegate
32
- dst_tree_node = @delegate.on_enter_tree_node(src_tree_node, dst_parent_node)
33
- end
31
+ dst_tree_node = @action_enter_tree_node.call(src_tree_node, dst_parent_node) if @action_enter_tree_node
32
+ dst_tree_node = @delegate.enter_node(src_tree_node, dst_parent_node) if @delegate and @delegate.respond_to? :enter_node
34
33
  @root = dst_tree_node if @stack.empty?
35
34
  @stack.push(dst_tree_node)
36
35
  end
@@ -41,11 +40,8 @@ module TreeVisitor
41
40
 
42
41
  def visit_leaf(src_leaf_node)
43
42
  parent_node = @stack.last
44
- if @action_visit_leaf_node
45
- @action_visit_leaf_node.call(src_leaf_node, parent_node)
46
- elsif @delegate
47
- @delegate.on_visit_leaf_node(src_leaf_node, parent_node)
48
- end
43
+ @action_visit_leaf_node.call(src_leaf_node, parent_node) if @action_visit_leaf_node
44
+ @delegate.visit_leaf(src_leaf_node, parent_node) if @delegate and @delegate.respond_to? :visit_leaf
49
45
  end
50
46
  end
51
47
 
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.join(File.dirname(__FILE__), "..", "spec_helper")
3
+
4
+ describe TreeNodeVisitor do
5
+
6
+ class Delegate
7
+ def enter_node(node)
8
+ @entered_node= true
9
+ end
10
+
11
+ def exit_node(node)
12
+ @exit_node= true
13
+ end
14
+
15
+ def visit_leaf(leaf)
16
+ @visited_leaf= true
17
+ end
18
+ end
19
+
20
+ it "should use a delegate" do
21
+
22
+ delegate = Delegate.new
23
+ visitor = TreeNodeVisitor.new(delegate)
24
+
25
+ visitor.enter_node(nil)
26
+ delegate.instance_eval{ @entered_node }.should be_true
27
+
28
+ visitor.exit_node(nil)
29
+ delegate.instance_eval{ @exit_node }.should be_true
30
+
31
+ visitor.visit_leaf(nil)
32
+ delegate.instance_eval{ @visited_leaf }.should be_true
33
+ end
34
+
35
+ end
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
- describe "Tree Node Visitors" do
4
+ describe TreeNodeVisitor do
5
5
 
6
6
  before do
7
7
  ta = TreeNode.new( "a", nil )
@@ -14,11 +14,11 @@ describe "Tree Node Visitors" do
14
14
  @tree = ta
15
15
  end
16
16
 
17
- it CallbackTreeNodeVisitor do
17
+ it TreeNodeVisitor do
18
18
  accumulator = []
19
- visitor = CallbackTreeNodeVisitor.new
19
+ visitor = TreeNodeVisitor.new
20
20
  visitor.on_enter_node{ |tree_node| accumulator << tree_node.content }
21
- visitor.on_visit_leaf{ |leaf_node| accumulator << leaf_node.content }
21
+ visitor.on_leaf{ |leaf_node| accumulator << leaf_node.content }
22
22
  @tree.accept( visitor )
23
23
  accumulator.length.should == 5
24
24
  accumulator.should == %w{ a 1 2 b 3 }
data/treevisitor.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{treevisitor}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tokiro"]
12
- s.date = %q{2011-02-01}
12
+ s.date = %q{2011-02-06}
13
13
  s.default_executable = %q{tree.rb}
14
14
  s.description = %q{ Implementation of visitor design pattern. It contains a 'tree.rb'
15
15
  command line clone of the tree unix tool.
@@ -61,7 +61,7 @@ Gem::Specification.new do |s|
61
61
  ]
62
62
  s.homepage = %q{http://github.com/tokiro/treevisitor}
63
63
  s.require_paths = ["lib"]
64
- s.rubygems_version = %q{1.3.7}
64
+ s.rubygems_version = %q{1.5.0}
65
65
  s.summary = %q{Implementation of visitor design pattern}
66
66
  s.test_files = [
67
67
  "spec/fixtures/test_dir_1/.dir_with_dot/dummy.txt",
@@ -76,16 +76,16 @@ Gem::Specification.new do |s|
76
76
  "spec/treevisitor/tree_dsl_with_derived_class_spec.rb",
77
77
  "spec/treevisitor/tree_node_paths_spec.rb",
78
78
  "spec/treevisitor/tree_node_spec.rb",
79
+ "spec/treevisitor/tree_node_visitor_delegate_spec.rb",
80
+ "spec/treevisitor/tree_node_visitor_dsl_spec.rb",
79
81
  "spec/treevisitor/util/dir_processor_spec.rb",
80
- "spec/treevisitor/visitor_dsl_spec.rb",
81
82
  "spec/treevisitor/visitors/block_tree_node_visitor_spec.rb",
82
83
  "spec/treevisitor/visitors/callback_tree_node_visitor2_spec.rb",
83
- "spec/treevisitor/visitors/callback_tree_node_visitors_spec.rb",
84
- "spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb"
84
+ "spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb",
85
+ "spec/treevisitor/visitors/tree_node_visitors_spec.rb"
85
86
  ]
86
87
 
87
88
  if s.respond_to? :specification_version then
88
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
89
89
  s.specification_version = 3
90
90
 
91
91
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: treevisitor
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 2
8
- - 0
9
- version: 0.2.0
4
+ prerelease:
5
+ version: 0.2.1
10
6
  platform: ruby
11
7
  authors:
12
8
  - Tokiro
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-02-01 00:00:00 +01:00
13
+ date: 2011-02-06 00:00:00 +01:00
18
14
  default_executable: tree.rb
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -24,8 +20,6 @@ dependencies:
24
20
  requirements:
25
21
  - - ">="
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
23
  version: "0"
30
24
  type: :runtime
31
25
  prerelease: false
@@ -37,8 +31,6 @@ dependencies:
37
31
  requirements:
38
32
  - - ">="
39
33
  - !ruby/object:Gem::Version
40
- segments:
41
- - 0
42
34
  version: "0"
43
35
  type: :development
44
36
  prerelease: false
@@ -50,8 +42,6 @@ dependencies:
50
42
  requirements:
51
43
  - - ">="
52
44
  - !ruby/object:Gem::Version
53
- segments:
54
- - 0
55
45
  version: "0"
56
46
  type: :development
57
47
  prerelease: false
@@ -63,8 +53,6 @@ dependencies:
63
53
  requirements:
64
54
  - - ">="
65
55
  - !ruby/object:Gem::Version
66
- segments:
67
- - 0
68
56
  version: "0"
69
57
  type: :development
70
58
  prerelease: false
@@ -76,8 +64,6 @@ dependencies:
76
64
  requirements:
77
65
  - - ">="
78
66
  - !ruby/object:Gem::Version
79
- segments:
80
- - 0
81
67
  version: "0"
82
68
  type: :development
83
69
  prerelease: false
@@ -89,8 +75,6 @@ dependencies:
89
75
  requirements:
90
76
  - - ">="
91
77
  - !ruby/object:Gem::Version
92
- segments:
93
- - 0
94
78
  version: "0"
95
79
  type: :development
96
80
  prerelease: false
@@ -154,12 +138,13 @@ files:
154
138
  - spec/treevisitor/tree_dsl_with_derived_class_spec.rb
155
139
  - spec/treevisitor/tree_node_paths_spec.rb
156
140
  - spec/treevisitor/tree_node_spec.rb
141
+ - spec/treevisitor/tree_node_visitor_delegate_spec.rb
142
+ - spec/treevisitor/tree_node_visitor_dsl_spec.rb
157
143
  - spec/treevisitor/util/dir_processor_spec.rb
158
- - spec/treevisitor/visitor_dsl_spec.rb
159
144
  - spec/treevisitor/visitors/block_tree_node_visitor_spec.rb
160
145
  - spec/treevisitor/visitors/callback_tree_node_visitor2_spec.rb
161
- - spec/treevisitor/visitors/callback_tree_node_visitors_spec.rb
162
146
  - spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb
147
+ - spec/treevisitor/visitors/tree_node_visitors_spec.rb
163
148
  - bin/tree.rb
164
149
  has_rdoc: true
165
150
  homepage: http://github.com/tokiro/treevisitor
@@ -175,21 +160,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
175
160
  requirements:
176
161
  - - ">="
177
162
  - !ruby/object:Gem::Version
178
- segments:
179
- - 0
180
163
  version: "0"
181
164
  required_rubygems_version: !ruby/object:Gem::Requirement
182
165
  none: false
183
166
  requirements:
184
167
  - - ">="
185
168
  - !ruby/object:Gem::Version
186
- segments:
187
- - 0
188
169
  version: "0"
189
170
  requirements: []
190
171
 
191
172
  rubyforge_project:
192
- rubygems_version: 1.3.7
173
+ rubygems_version: 1.5.0
193
174
  signing_key:
194
175
  specification_version: 3
195
176
  summary: Implementation of visitor design pattern
@@ -206,9 +187,10 @@ test_files:
206
187
  - spec/treevisitor/tree_dsl_with_derived_class_spec.rb
207
188
  - spec/treevisitor/tree_node_paths_spec.rb
208
189
  - spec/treevisitor/tree_node_spec.rb
190
+ - spec/treevisitor/tree_node_visitor_delegate_spec.rb
191
+ - spec/treevisitor/tree_node_visitor_dsl_spec.rb
209
192
  - spec/treevisitor/util/dir_processor_spec.rb
210
- - spec/treevisitor/visitor_dsl_spec.rb
211
193
  - spec/treevisitor/visitors/block_tree_node_visitor_spec.rb
212
194
  - spec/treevisitor/visitors/callback_tree_node_visitor2_spec.rb
213
- - spec/treevisitor/visitors/callback_tree_node_visitors_spec.rb
214
195
  - spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb
196
+ - spec/treevisitor/visitors/tree_node_visitors_spec.rb