rubytree 0.9.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 76d30f00380e7ea4594dda970de679d6949a61b9
4
- data.tar.gz: 11a9fe380940e988200f84e2f69dff3752e4e380
3
+ metadata.gz: e70b5e24e0c6438962d8f5efe4badb962ab27819
4
+ data.tar.gz: 66ea286ac3ae28957cee7fdcf41d7dd007962afa
5
5
  SHA512:
6
- metadata.gz: b7e9ee7173158d02e55c29ea3122076bc164f3bc180a717bce34bf0ca29d65e9e60bd9f0d13fccb16cf4339e064a56d05e2a0bb120b2bf2a65edb83cef29b7ec
7
- data.tar.gz: cf1ced56a4092931a7f8439a466c68a338a3fb86cac941862885bbdd4ac3c34abd8e2c3921e76504681bb075309112cd5b0b5b50faddb9a10e1a7a172c3c7d5f
6
+ metadata.gz: 4f269fac16de633c54ac933d6ec87af7530295f59c1a5f47d2130c822ce50f6560446532546ee0bed3b6171523ccb8a180dac720b41524d810f0e54a2df9dadf
7
+ data.tar.gz: aa174da1e492764079f63aac6cf91b4b931dcc05feb9cc0fedd765e62c57d9202372d191ee16926a977ae8836f6884231e251885fa5abb27c95058086cf64a25
data/Gemfile CHANGED
@@ -4,10 +4,10 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :development, :test do
7
- gem "rake", "~> 10.4"
8
- gem "test-unit", "~> 3.0"
9
- gem "coveralls", ">= 0.7", :require => false, :platforms => :mri_21
10
- gem "rspec", ">= 3.4"
7
+ gem 'rake', '~> 10.4'
8
+ gem 'test-unit', '~> 3.0'
9
+ gem 'coveralls', '>= 0.7', :require => false, :platforms => :mri_21
10
+ gem 'rspec', '>= 3.4'
11
11
  end
12
12
 
13
13
  # Local Variables:
@@ -1,83 +1,68 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubytree (0.9.7)
5
- json (~> 1.8)
6
- structured_warnings (~> 0.2)
4
+ rubytree (1.0.0)
5
+ json (~> 2.1)
6
+ structured_warnings (~> 0.3)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- coveralls (0.8.10)
12
- json (~> 1.8)
13
- rest-client (>= 1.6.8, < 2)
14
- simplecov (~> 0.11.0)
11
+ coveralls (0.8.21)
12
+ json (>= 1.8, < 3)
13
+ simplecov (~> 0.14.1)
15
14
  term-ansicolor (~> 1.3)
16
- thor (~> 0.19.1)
17
- tins (~> 1.6.0)
18
- diff-lcs (1.2.5)
15
+ thor (~> 0.19.4)
16
+ tins (~> 1.6)
17
+ diff-lcs (1.3)
19
18
  docile (1.1.5)
20
- domain_name (0.5.25)
21
- unf (>= 0.0.5, < 1.0.0)
22
- http-cookie (1.0.2)
23
- domain_name (~> 0.5)
24
- json (1.8.3)
25
- mime-types (2.99)
26
- netrc (0.11.0)
27
- power_assert (0.2.6)
28
- rake (10.4.2)
29
- rdoc (4.2.1)
30
- json (~> 1.4)
31
- rest-client (1.8.0)
32
- http-cookie (>= 1.0.2, < 2.0)
33
- mime-types (>= 1.16, < 3.0)
34
- netrc (~> 0.7)
35
- rspec (3.4.0)
36
- rspec-core (~> 3.4.0)
37
- rspec-expectations (~> 3.4.0)
38
- rspec-mocks (~> 3.4.0)
39
- rspec-core (3.4.1)
40
- rspec-support (~> 3.4.0)
41
- rspec-expectations (3.4.0)
19
+ json (2.1.0)
20
+ power_assert (1.1.1)
21
+ rake (10.5.0)
22
+ rdoc (6.0.0)
23
+ rspec (3.7.0)
24
+ rspec-core (~> 3.7.0)
25
+ rspec-expectations (~> 3.7.0)
26
+ rspec-mocks (~> 3.7.0)
27
+ rspec-core (3.7.0)
28
+ rspec-support (~> 3.7.0)
29
+ rspec-expectations (3.7.0)
42
30
  diff-lcs (>= 1.2.0, < 2.0)
43
- rspec-support (~> 3.4.0)
44
- rspec-mocks (3.4.0)
31
+ rspec-support (~> 3.7.0)
32
+ rspec-mocks (3.7.0)
45
33
  diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.4.0)
47
- rspec-support (3.4.1)
34
+ rspec-support (~> 3.7.0)
35
+ rspec-support (3.7.0)
48
36
  rtags (0.97)
49
37
  rtagstask (0.0.4)
50
38
  rtags (> 0.0.0)
51
- simplecov (0.11.1)
39
+ simplecov (0.14.1)
52
40
  docile (~> 1.1.0)
53
- json (~> 1.8)
41
+ json (>= 1.8, < 3)
54
42
  simplecov-html (~> 0.10.0)
55
- simplecov-html (0.10.0)
56
- structured_warnings (0.2.0)
57
- term-ansicolor (1.3.2)
43
+ simplecov-html (0.10.2)
44
+ structured_warnings (0.3.0)
45
+ term-ansicolor (1.6.0)
58
46
  tins (~> 1.0)
59
- test-unit (3.1.5)
47
+ test-unit (3.2.7)
60
48
  power_assert
61
- thor (0.19.1)
62
- tins (1.6.0)
63
- unf (0.1.4)
64
- unf_ext
65
- unf_ext (0.0.7.1)
66
- yard (0.8.7.6)
49
+ thor (0.19.4)
50
+ tins (1.16.3)
51
+ yard (0.9.12)
67
52
 
68
53
  PLATFORMS
69
54
  ruby
70
55
 
71
56
  DEPENDENCIES
72
- bundler (~> 1.7)
57
+ bundler (~> 1.16)
73
58
  coveralls (>= 0.7)
74
59
  rake (~> 10.4)
75
- rdoc (~> 4.2)
60
+ rdoc (~> 6.0)
76
61
  rspec (>= 3.4)
77
62
  rtagstask (~> 0.0)
78
63
  rubytree!
79
64
  test-unit (~> 3.0)
80
- yard (~> 0.8)
65
+ yard (~> 0.9)
81
66
 
82
67
  BUNDLED WITH
83
- 1.10.2
68
+ 1.16.0
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <!--
2
2
  README.md
3
3
 
4
- Copyright (C) 2006-2015 Anupam Sengupta (anupamsg@gmail.com)
4
+ Copyright (C) 2006-2017 Anupam Sengupta (anupamsg@gmail.com)
5
5
 
6
6
  -->
7
7
  # **RubyTree** #
@@ -120,7 +120,7 @@ This example can also be found at
120
120
 
121
121
  ## REQUIREMENTS: ##
122
122
 
123
- * [Ruby][] 1.8.x, 1.9.x, 2.0.x, or 2.1.x.
123
+ * [Ruby][] 2.2.x, 2.3.x or 2.4.x
124
124
 
125
125
 
126
126
  * Run-time Dependencies:
@@ -244,8 +244,8 @@ A big thanks to the following contributors for helping improve **RubyTree**:
244
244
  [BSD]: http://opensource.org/licenses/bsd-license.php "BSD License"
245
245
  [Binary tree]: http://en.wikipedia.org/wiki/Binary_tree "Binary Tree Data Structure"
246
246
  [Bundler]: http://bundler.io "Bundler"
247
- [Comparable]: http://ruby-doc.org/core-1.8.7/Comparable.html "Comparable mix-in"
248
- [Enumerable]: http://ruby-doc.org/core-1.9.3/Enumerable.html "Enumerable mix-in"
247
+ [Comparable]: http://ruby-doc.org/core-2.4.2/Comparable.html "Comparable mix-in"
248
+ [Enumerable]: http://ruby-doc.org/core-2.4.2/Enumerable.html "Enumerable mix-in"
249
249
  [JSON]: http://flori.github.com/json "JSON"
250
250
  [Rake]: https://rubygems.org/gems/rake "Rake"
251
251
  [Ruby]: http://www.ruby-lang.org "Ruby Programming Language"
@@ -254,7 +254,7 @@ A big thanks to the following contributors for helping improve **RubyTree**:
254
254
  [breadth-first]: http://en.wikipedia.org/wiki/Breadth-first_search "Breadth-first (level-first) Traversal"
255
255
  [git]: http://git-scm.com "Git SCM"
256
256
  [in-order]: http://en.wikipedia.org/wiki/Tree_traversal#In-order "In-order (symmetric) Traversal"
257
- [marshaling]: http://ruby-doc.org/core-1.8.7/Marshal.html "Marshaling in Ruby"
257
+ [marshaling]: http://ruby-doc.org/core-2.4.2/Marshal.html "Marshaling in Ruby"
258
258
  [post-order]: http://en.wikipedia.org/wiki/Tree_traversal#Post-order "Post-ordered Traversal"
259
259
  [pre-order]: http://en.wikipedia.org/wiki/Tree_traversal#Pre-order "Pre-ordered Traversal"
260
260
  [rt@github]: http://github.com/evolve75/RubyTree "RubyTree Project Page on Github"
data/Rakefile CHANGED
@@ -33,23 +33,23 @@
33
33
  #
34
34
 
35
35
  require 'rubygems'
36
- GEM_SPEC = eval(File.read("rubytree.gemspec")) # Load the gemspec.
36
+ GEM_SPEC = eval(File.read('./rubytree.gemspec')) # Load the gemspec.
37
37
 
38
38
  PKG_NAME = GEM_SPEC.name
39
39
  PKG_VER = GEM_SPEC.version
40
40
  GEM_NAME = "#{PKG_NAME}-#{PKG_VER}.gem"
41
41
 
42
- desc "Default Task (Run the tests)"
42
+ desc 'Default Task (Run the tests)'
43
43
  task :default do
44
- if ENV["COVERAGE"]
45
- Rake::Task["test:coverage"].invoke
44
+ if ENV['COVERAGE']
45
+ Rake::Task['test:coverage'].invoke
46
46
  else
47
- Rake::Task["test:unit"].invoke
48
- Rake::Task["spec"].invoke
47
+ Rake::Task['test:unit'].invoke
48
+ Rake::Task['spec'].invoke
49
49
  end
50
50
  end
51
51
 
52
- desc "Display the current gem version"
52
+ desc 'Display the current gem version'
53
53
  task :version do
54
54
  puts "Current Version: #{GEM_NAME}"
55
55
  end
@@ -59,21 +59,21 @@ task :clean => 'gem:clobber_package'
59
59
  CLEAN.include('coverage')
60
60
  task :clobber => [:clean, 'doc:clobber_rdoc', 'doc:clobber_yard']
61
61
 
62
- desc "Open an irb session preloaded with this library"
62
+ desc 'Open an irb session preloaded with this library'
63
63
  task :console do
64
- sh "irb -rubygems -r ./lib/tree.rb"
64
+ sh 'irb -rubygems -r ./lib/tree.rb'
65
65
  end
66
66
 
67
67
  namespace :doc do # ................................ Documentation
68
68
  begin
69
- gem 'rdoc', ">= 2.4.2" # To get around a stupid bug in Ruby 1.9.2 Rake.
69
+ gem 'rdoc', '>= 2.4.2' # To get around a stupid bug in Ruby 1.9.2 Rake.
70
70
  require 'rdoc/task'
71
71
  Rake::RDocTask.new do |rdoc|
72
72
  rdoc.rdoc_dir = 'rdoc'
73
73
  rdoc.title = "#{PKG_NAME}-#{PKG_VER}"
74
74
  rdoc.main = 'README.rdoc'
75
75
  rdoc.rdoc_files.include(GEM_SPEC.extra_rdoc_files)
76
- rdoc.rdoc_files.include('lib/**/*.rb')
76
+ rdoc.rdoc_files.include('./lib/**/*.rb')
77
77
  end
78
78
  rescue LoadError
79
79
  # Oh well.
@@ -83,19 +83,19 @@ namespace :doc do # ................................ Documentation
83
83
  require 'yard'
84
84
  YARD::Rake::YardocTask.new do |t|
85
85
  t.files = ['lib/**/*.rb', '-', GEM_SPEC.extra_rdoc_files]
86
- t.options = ['--no-private', '--embed-mixins']
86
+ t.options = %w(--no-private --embed-mixins)
87
87
  end
88
88
  rescue LoadError
89
89
  # Oh well.
90
90
  end
91
91
 
92
- desc "Remove YARD Documentation"
92
+ desc 'Remove YARD Documentation'
93
93
  task :clobber_yard do
94
94
  rm_rf 'doc'
95
95
  end
96
96
  end
97
97
 
98
- desc "Run the test cases"
98
+ desc 'Run the test cases'
99
99
  task :test => 'test:unit'
100
100
 
101
101
  namespace :test do # ................................ Test related
@@ -107,7 +107,7 @@ namespace :test do # ................................ Test related
107
107
  test.verbose = false
108
108
  end
109
109
 
110
- desc "Run the examples"
110
+ desc 'Run the examples'
111
111
  Rake::TestTask.new(:examples) do |example|
112
112
  example.libs << 'lib' << 'examples'
113
113
  example.pattern = 'examples/**/example_*.rb'
@@ -115,7 +115,7 @@ namespace :test do # ................................ Test related
115
115
  example.warning = false
116
116
  end
117
117
 
118
- desc "Run the code coverage"
118
+ desc 'Run the code coverage'
119
119
  task :coverage do
120
120
  ruby 'test/run_test.rb'
121
121
  end
@@ -123,7 +123,7 @@ namespace :test do # ................................ Test related
123
123
  begin
124
124
  require 'rcov/rcovtask'
125
125
  Rcov::RcovTask.new(:rcov) do |t|
126
- t.libs << "test"
126
+ t.libs << 'test'
127
127
  t.test_files = FileList['test/**/test_*.rb']
128
128
  t.verbose = true
129
129
  t.rcov_opts << '--exclude /gems/,/Library/,/usr/,spec,lib/tasks'
@@ -139,7 +139,7 @@ begin # ................................ rspec tests
139
139
 
140
140
  RSpec::Core::RakeTask.new(:spec) do |t|
141
141
  t.fail_on_error = false
142
- t.rspec_opts = ["--color", "--format doc"]
142
+ t.rspec_opts = ['--color', '--format doc']
143
143
  end
144
144
  rescue LoadError
145
145
  # Cannot load rspec.
@@ -164,7 +164,7 @@ namespace :gem do # ................................ Gem related
164
164
  pkg.need_tar = true
165
165
  end
166
166
 
167
- desc "Push the gem into the Rubygems repository"
167
+ desc 'Push the gem into the Rubygems repository'
168
168
  task :push => :gem do
169
169
  sh "gem push pkg/#{GEM_NAME}"
170
170
  end
@@ -26,19 +26,19 @@
26
26
  require 'tree' # Load the library
27
27
 
28
28
  # ..... Create the root node first. Note that every node has a name and an optional content payload.
29
- root_node = Tree::TreeNode.new("ROOT", "Root Content")
29
+ root_node = Tree::TreeNode.new('ROOT', 'Root Content')
30
30
  root_node.print_tree
31
31
 
32
32
  # ..... Now insert the child nodes. Note that you can "chain" the child insertions for a given path to any depth.
33
- root_node << Tree::TreeNode.new("CHILD1", "Child1 Content") << Tree::TreeNode.new("GRANDCHILD1", "GrandChild1 Content")
34
- root_node << Tree::TreeNode.new("CHILD2", "Child2 Content")
33
+ root_node << Tree::TreeNode.new('CHILD1', 'Child1 Content') << Tree::TreeNode.new('GRANDCHILD1', 'GrandChild1 Content')
34
+ root_node << Tree::TreeNode.new('CHILD2', 'Child2 Content')
35
35
 
36
36
  # ..... Lets print the representation to stdout. This is primarily used for debugging purposes.
37
37
  root_node.print_tree
38
38
 
39
39
  # ..... Lets directly access children and grandchildren of the root. The can be "chained" for a given path to any depth.
40
- child1 = root_node["CHILD1"]
41
- grand_child1 = root_node["CHILD1"]["GRANDCHILD1"]
40
+ child1 = root_node['CHILD1']
41
+ grand_child1 = root_node['CHILD1']['GRANDCHILD1']
42
42
 
43
43
  # ..... Now lets retrieve siblings of the current node as an array.
44
44
  siblings_of_child1 = child1.siblings
@@ -38,4 +38,4 @@
38
38
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
39
  #
40
40
 
41
- require "tree.rb"
41
+ require 'tree.rb'
@@ -9,7 +9,7 @@
9
9
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
10
10
  #
11
11
 
12
- # Copyright (c) 2006-2015 Anupam Sengupta
12
+ # Copyright (c) 2006-2015, 2017 Anupam Sengupta
13
13
  #
14
14
  # All rights reserved.
15
15
  #
@@ -83,6 +83,7 @@ module Tree
83
83
  # {include:file:examples/example_basic.rb}
84
84
  #
85
85
  # @author Anupam Sengupta
86
+ # noinspection RubyTooManyMethodsInspection
86
87
  class TreeNode
87
88
  include Enumerable
88
89
  include Comparable
@@ -132,7 +133,7 @@ module Tree
132
133
  # @return [Tree::TreeNode] Root of the (sub)tree.
133
134
  def root
134
135
  root = self
135
- root = root.parent while !root.is_root?
136
+ root = root.parent until root.is_root?
136
137
  root
137
138
  end
138
139
 
@@ -177,7 +178,7 @@ module Tree
177
178
 
178
179
  parentage_array = []
179
180
  prev_parent = self.parent
180
- while (prev_parent)
181
+ while prev_parent
181
182
  parentage_array << prev_parent
182
183
  prev_parent = prev_parent.parent
183
184
  end
@@ -215,13 +216,13 @@ module Tree
215
216
  #
216
217
  # @see #[]
217
218
  def initialize(name, content = nil)
218
- raise ArgumentError, "Node name HAS to be provided!" if name == nil
219
+ raise ArgumentError, 'Node name HAS to be provided!' if name == nil
219
220
  @name, @content = name, content
220
221
 
221
222
  if name.kind_of?(Integer)
222
- warn StandardWarning,
223
- "Using integer as node name."\
224
- " Semantics of TreeNode[] may not be what you expect!"\
223
+ warn StructuredWarnings::StandardWarning,
224
+ 'Using integer as node name.'\
225
+ ' Semantics of TreeNode[] may not be what you expect!'\
225
226
  " #{name} #{content}"
226
227
  end
227
228
 
@@ -256,7 +257,7 @@ module Tree
256
257
  alias :dup :detached_subtree_copy
257
258
 
258
259
  # Returns a {marshal-dump}[http://ruby-doc.org/core-1.8.7/Marshal.html]
259
- # represention of the (sub)tree rooted at this node.
260
+ # representation of the (sub)tree rooted at this node.
260
261
  #
261
262
  def marshal_dump
262
263
  self.collect { |node| node.create_dump_rep }
@@ -265,15 +266,15 @@ module Tree
265
266
  # Creates a dump representation of this node and returns the same as
266
267
  # a hash.
267
268
  def create_dump_rep # :nodoc:
268
- { :name => @name,
269
- :parent => (is_root? ? nil : @parent.name),
270
- :content => Marshal.dump(@content)
269
+ {name: @name,
270
+ parent: (is_root? ? nil : @parent.name),
271
+ content: Marshal.dump(@content)
271
272
  }
272
273
  end
273
274
 
274
275
  protected :create_dump_rep
275
276
 
276
- # Loads a marshalled dump of a tree and returns the root node of the
277
+ # Loads a marshaled dump of a tree and returns the root node of the
277
278
  # reconstructed tree. See the
278
279
  # {Marshal}[http://ruby-doc.org/core-1.8.7/Marshal.html] class for
279
280
  # additional details.
@@ -289,7 +290,7 @@ module Tree
289
290
  parent_name = node_hash[:parent]
290
291
  content = Marshal.load(node_hash[:content])
291
292
 
292
- if parent_name then
293
+ if parent_name
293
294
  nodes[name] = current_node = Tree::TreeNode.new(name, content)
294
295
  nodes[parent_name].add current_node
295
296
  else
@@ -308,11 +309,7 @@ module Tree
308
309
  #
309
310
  # @return [String] A string representation of the node.
310
311
  def to_s
311
- "Node Name: #{@name}" +
312
- " Content: " + (@content.to_s || "<Empty>") +
313
- " Parent: " + (is_root?() ? "<None>" : @parent.name.to_s) +
314
- " Children: #{@children.length}" +
315
- " Total Nodes: #{size()}"
312
+ "Node Name: #{@name} Content: #{(@content.to_s || '<Empty>')} Parent: #{(is_root? ? '<None>' : @parent.name.to_s)} Children: #{@children.length} Total Nodes: #{size}"
316
313
  end
317
314
 
318
315
  # @!group Structure Modification
@@ -354,7 +351,7 @@ module Tree
354
351
  #
355
352
  # -children.size..children.size
356
353
  #
357
- # This is to prevent +nil+ nodes being created as children if a non-existant
354
+ # This is to prevent +nil+ nodes being created as children if a non-existent
358
355
  # position is used.
359
356
  #
360
357
  # If the new node being added has an existing parent node, then it will be
@@ -381,11 +378,11 @@ module Tree
381
378
  def add(child, at_index = -1)
382
379
  # Only handles the immediate child scenario
383
380
  raise ArgumentError,
384
- "Attempting to add a nil node" unless child
381
+ 'Attempting to add a nil node' unless child
385
382
  raise ArgumentError,
386
- "Attempting add node to itself" if self.equal?(child)
383
+ 'Attempting add node to itself' if self.equal?(child)
387
384
  raise ArgumentError,
388
- "Attempting add root as a child" if child.equal?(root)
385
+ 'Attempting add root as a child' if child.equal?(root)
389
386
 
390
387
  # Lazy mans unique test, won't test if children of child are unique in
391
388
  # this tree too.
@@ -397,15 +394,15 @@ module Tree
397
394
  if insertion_range.include?(at_index)
398
395
  @children.insert(at_index, child)
399
396
  else
400
- raise "Attempting to insert a child at a non-existent location"\
397
+ raise 'Attempting to insert a child at a non-existent location'\
401
398
  " (#{at_index}) "\
402
- "when only positions from "\
399
+ 'when only positions from '\
403
400
  "#{insertion_range.min} to #{insertion_range.max} exist."
404
401
  end
405
402
 
406
403
  @children_hash[child.name] = child
407
404
  child.parent = self
408
- return child
405
+ child
409
406
  end
410
407
 
411
408
  # Return a range of valid insertion positions. Used in the #add method.
@@ -472,7 +469,7 @@ module Tree
472
469
  old_child = remove! old_child
473
470
  add new_child, child_index
474
471
 
475
- return old_child
472
+ old_child
476
473
  end
477
474
 
478
475
  # Replaces the node with another node
@@ -605,14 +602,14 @@ module Tree
605
602
  # @see #initialize
606
603
  def [](name_or_index, num_as_name=false)
607
604
  raise ArgumentError,
608
- "Name_or_index needs to be provided!" if name_or_index == nil
605
+ 'Name_or_index needs to be provided!' if name_or_index == nil
609
606
 
610
607
  if name_or_index.kind_of?(Integer) and not num_as_name
611
608
  @children[name_or_index]
612
609
  else
613
610
  if num_as_name and not name_or_index.kind_of?(Integer)
614
- warn StandardWarning,
615
- "Redundant use of the `num_as_name` flag for non-integer node name"
611
+ warn StructuredWarnings::StandardWarning,
612
+ 'Redundant use of the `num_as_name` flag for non-integer node name'
616
613
  end
617
614
  @children_hash[name_or_index]
618
615
  end
@@ -624,6 +621,7 @@ module Tree
624
621
  # The traversal is *depth-first* and from *left-to-right* in pre-ordered
625
622
  # sequence.
626
623
  #
624
+ # @param [Object] block
627
625
  # @yieldparam node [Tree::TreeNode] Each node.
628
626
  #
629
627
  # @see #preordered_each
@@ -631,6 +629,7 @@ module Tree
631
629
  #
632
630
  # @return [Tree::TreeNode] this node, if a block if given
633
631
  # @return [Enumerator] an enumerator on this tree, if a block is *not* given
632
+ # noinspection RubyUnusedLocalVariable
634
633
  def each(&block) # :yields: node
635
634
 
636
635
  return self.to_enum unless block_given?
@@ -646,7 +645,7 @@ module Tree
646
645
  end
647
646
  end
648
647
 
649
- return self if block_given?
648
+ self if block_given?
650
649
  end
651
650
 
652
651
  # Traverses the (sub)tree rooted at this node in pre-ordered sequence.
@@ -665,20 +664,22 @@ module Tree
665
664
 
666
665
  # Traverses the (sub)tree rooted at this node in post-ordered sequence.
667
666
  #
667
+ # @param [Object] block
668
668
  # @yieldparam node [Tree::TreeNode] Each node.
669
669
  #
670
670
  # @see #preordered_each
671
671
  # @see #breadth_each
672
672
  # @return [Tree::TreeNode] this node, if a block if given
673
673
  # @return [Enumerator] an enumerator on this tree, if a block is *not* given
674
+ # noinspection RubyUnusedLocalVariable
674
675
  def postordered_each(&block)
675
676
  return self.to_enum(:postordered_each) unless block_given?
676
677
 
677
678
  # Using a marked node in order to skip adding the children of nodes that
678
679
  # have already been visited. This allows the stack depth to be controlled,
679
680
  # and also allows stateful backtracking.
680
- markednode = Struct.new(:node, :visited)
681
- node_stack = [markednode.new(self, false)] # Start with self
681
+ marked_node = Struct.new(:node, :visited)
682
+ node_stack = [marked_node.new(self, false)] # Start with self
682
683
 
683
684
  until node_stack.empty?
684
685
  peek_node = node_stack[0]
@@ -686,7 +687,7 @@ module Tree
686
687
  peek_node.visited = true
687
688
  # Add the children to the stack. Use the marking structure.
688
689
  marked_children =
689
- peek_node.node.children.map {|node| markednode.new(node, false)}
690
+ peek_node.node.children.map {|node| marked_node.new(node, false)}
690
691
  node_stack = marked_children.concat(node_stack)
691
692
  next
692
693
  else
@@ -694,13 +695,14 @@ module Tree
694
695
  end
695
696
  end
696
697
 
697
- return self if block_given?
698
+ self if block_given?
698
699
  end
699
700
 
700
701
  # Performs breadth-first traversal of the (sub)tree rooted at this node. The
701
702
  # traversal at a given level is from *left-to-right*. this node itself is
702
703
  # the first node to be traversed.
703
704
  #
705
+ # @param [Object] block
704
706
  # @yieldparam node [Tree::TreeNode] Each node.
705
707
  #
706
708
  # @see #preordered_each
@@ -708,6 +710,7 @@ module Tree
708
710
  #
709
711
  # @return [Tree::TreeNode] this node, if a block if given
710
712
  # @return [Enumerator] an enumerator on this tree, if a block is *not* given
713
+ # noinspection RubyUnusedLocalVariable
711
714
  def breadth_each(&block)
712
715
  return self.to_enum(:breadth_each) unless block_given?
713
716
 
@@ -721,7 +724,7 @@ module Tree
721
724
  node_to_traverse.children { |child| node_queue.push child }
722
725
  end
723
726
 
724
- return self if block_given?
727
+ self if block_given?
725
728
  end
726
729
 
727
730
  # An array of all the immediate children of this node. The child
@@ -739,9 +742,9 @@ module Tree
739
742
  def children
740
743
  if block_given?
741
744
  @children.each {|child| yield child}
742
- return self
745
+ self
743
746
  else
744
- return @children.clone
747
+ @children.clone
745
748
  end
746
749
  end
747
750
 
@@ -751,6 +754,7 @@ module Tree
751
754
  # May yield this node as well if this is a leaf node.
752
755
  # Leaf traversal is *depth-first* and *left-to-right*.
753
756
  #
757
+ # @param [Object] block
754
758
  # @yieldparam node [Tree::TreeNode] Each leaf node.
755
759
  #
756
760
  # @see #each
@@ -758,12 +762,13 @@ module Tree
758
762
  #
759
763
  # @return [Tree::TreeNode] this node, if a block if given
760
764
  # @return [Array<Tree::TreeNode>] An array of the leaf nodes
761
- def each_leaf &block
765
+ # noinspection RubyUnusedLocalVariable
766
+ def each_leaf(&block)
762
767
  if block_given?
763
768
  self.each { |node| yield(node) if node.is_leaf? }
764
- return self
769
+ self
765
770
  else
766
- self.select { |node| node.is_leaf?}
771
+ self.select { |node| node.is_leaf? }
767
772
  end
768
773
  end
769
774
 
@@ -776,7 +781,7 @@ module Tree
776
781
  #
777
782
  # @return [Tree::TreeNode] The first child, or +nil+ if none is present.
778
783
  def first_child
779
- children.first
784
+ @children.first
780
785
  end
781
786
 
782
787
  # Last child of this node.
@@ -784,7 +789,7 @@ module Tree
784
789
  #
785
790
  # @return [Tree::TreeNode] The last child, or +nil+ if none is present.
786
791
  def last_child
787
- children.last
792
+ @children.last
788
793
  end
789
794
 
790
795
  # @!group Navigating the Sibling Nodes
@@ -858,7 +863,7 @@ module Tree
858
863
  def siblings
859
864
  if block_given?
860
865
  parent.children.each { |sibling| yield sibling if sibling != self }
861
- return self
866
+ self
862
867
  else
863
868
  return [] if is_root?
864
869
  siblings = []
@@ -892,8 +897,8 @@ module Tree
892
897
  def next_sibling
893
898
  return nil if is_root?
894
899
 
895
- myidx = parent.children.index(self)
896
- parent.children.at(myidx + 1) if myidx
900
+ idx = parent.children.index(self)
901
+ parent.children.at(idx + 1) if idx
897
902
  end
898
903
 
899
904
  # Previous sibling of this node.
@@ -909,15 +914,15 @@ module Tree
909
914
  def previous_sibling
910
915
  return nil if is_root?
911
916
 
912
- myidx = parent.children.index(self)
913
- parent.children.at(myidx - 1) if myidx && myidx > 0
917
+ idx = parent.children.index(self)
918
+ parent.children.at(idx - 1) if idx && idx > 0
914
919
  end
915
920
 
916
921
  # @!endgroup
917
922
 
918
- # Provides a comparision operation for the nodes.
923
+ # Provides a comparison operation for the nodes.
919
924
  #
920
- # Comparision is based on the natural ordering of the node name objects.
925
+ # Comparison is based on the natural ordering of the node name objects.
921
926
  #
922
927
  # @param [Tree::TreeNode] other The other node to compare against.
923
928
  #
@@ -935,7 +940,7 @@ module Tree
935
940
  # @param [Integer] max_depth optional maximum depth at which the printing
936
941
  # with stop.
937
942
  # @param [Proc] block optional block to use for rendering
938
- def print_tree(level = node_depth, max_depth = nil,
943
+ def print_tree(level = self.node_depth, max_depth = nil,
939
944
  block = lambda { |node, prefix|
940
945
  puts "#{prefix} #{node.name}" })
941
946
  prefix = ''