rubytree 0.8.2 → 0.8.3
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/.dir-locals.el +5 -0
- data/{API-CHANGES → API-CHANGES.rdoc} +12 -9
- data/{COPYING → COPYING.rdoc} +2 -13
- data/Gemfile +8 -0
- data/Gemfile.lock +28 -0
- data/{History.txt → History.rdoc} +35 -1
- data/{README → README.rdoc} +6 -8
- data/Rakefile +65 -89
- data/TODO.org +174 -0
- data/lib/rubytree.rb +41 -0
- data/lib/tree.rb +195 -133
- data/lib/tree/binarytree.rb +5 -7
- data/lib/tree/tree_deps.rb +41 -0
- data/lib/tree/version.rb +41 -0
- data/test/test_binarytree.rb +1 -2
- data/test/test_rubytree_require.rb +48 -0
- data/test/test_tree.rb +72 -10
- metadata +152 -104
- data/Manifest.txt +0 -12
- data/TODO +0 -57
- data/setup.rb +0 -1585
data/.dir-locals.el
ADDED
@@ -1,3 +1,5 @@
|
|
1
|
+
# @markup rdoc
|
2
|
+
|
1
3
|
= API Changes in RubyTree
|
2
4
|
|
3
5
|
This file documents various API level changes that have been made to the RubyTree package.
|
@@ -5,6 +7,10 @@ This file documents various API level changes that have been made to the RubyTre
|
|
5
7
|
Note: API level changes are expected to reduce dramatically after the 1.x release. In most cases, an alternative will
|
6
8
|
be provided to ensure relatively smooth transition to the new APIs.
|
7
9
|
|
10
|
+
== Release 8.8.3 Changes
|
11
|
+
|
12
|
+
- {Tree::TreeNode#siblings} will now return an empty array for the root node.
|
13
|
+
|
8
14
|
== Release 0.8.0 Changes
|
9
15
|
|
10
16
|
- Added the ability to specify an optional insertion position in the {Tree::TreeNode#add} method. Idea and original
|
@@ -24,28 +30,25 @@ be provided to ensure relatively smooth transition to the new APIs.
|
|
24
30
|
- {Tree::TreeNode#[]}
|
25
31
|
- {Tree::BinaryTreeNode#add}
|
26
32
|
|
27
|
-
- Added {Tree::TreeNode#level} as an alias for {Tree::TreeNode#
|
33
|
+
- Added {Tree::TreeNode#level} as an alias for {Tree::TreeNode#node_depth}
|
28
34
|
|
29
35
|
- Added new methods {Tree::TreeNode#in_degree} and {Tree::TreeNode#out_degree} to report the node's degree stats
|
30
36
|
|
31
|
-
- {Tree::TreeNode#
|
37
|
+
- {Tree::TreeNode#is_only_child?} now returns +true+ for a root node.
|
32
38
|
|
33
|
-
- {Tree::TreeNode#
|
39
|
+
- {Tree::TreeNode#next_sibling} and {Tree::TreeNode#previous_sibling} now return +nil+ for a root node.
|
34
40
|
|
35
41
|
- {Tree::TreeNode#add} and {Tree::TreeNode#<<} now throw an ArgumentError exception if a +nil+ node is passed as an argument.
|
36
42
|
|
37
|
-
- Added new methods {Tree::TreeNode#to_json} and
|
43
|
+
- Added new methods {Tree::TreeNode#to_json} and Tree::TreeNode::json_create to convert to/from the JSON format.
|
38
44
|
Thanks to Dirk[http://github.com/railsbros-dirk] for this change.
|
39
45
|
|
40
46
|
== Release 0.6.1 Changes
|
41
47
|
|
42
48
|
- Deprecated the {Tree::TreeNode#depth} method as it was returning an incorrect depth value. Have introduced a new replacement
|
43
|
-
method {Tree::TreeNode#
|
44
|
-
|
45
|
-
|
46
|
-
|
49
|
+
method {Tree::TreeNode#node_depth} which returns the correct result.
|
47
50
|
|
48
51
|
# Local Variables:
|
49
|
-
# mode:
|
52
|
+
# mode: rdoc
|
50
53
|
# coding: utf-8-unix
|
51
54
|
# End:
|
data/{COPYING → COPYING.rdoc}
RENAMED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
http://rubytree.rubyforge.org
|
4
4
|
|
5
|
-
Copyright (c) 2006, 2007, 2008, 2009, 2010 Anupam Sengupta (anupamsg at gmail dot com)
|
5
|
+
Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Anupam Sengupta (anupamsg at gmail dot com)
|
6
6
|
|
7
7
|
All rights reserved.
|
8
8
|
|
@@ -26,18 +26,7 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSE
|
|
26
26
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
27
27
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
28
|
|
29
|
-
$Id$
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
29
|
# Local Variables:
|
41
|
-
# mode:
|
30
|
+
# mode: rdoc
|
42
31
|
# coding: utf-8-unix
|
43
32
|
# End:
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rubytree (0.8.3)
|
5
|
+
json (>= 1.7.5)
|
6
|
+
structured_warnings (>= 0.1.3)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
json (1.7.5)
|
12
|
+
rake (0.9.2.2)
|
13
|
+
rcov (0.9.11)
|
14
|
+
rtags (0.98)
|
15
|
+
rtagstask (0.0.4)
|
16
|
+
rtags (> 0.0.0)
|
17
|
+
structured_warnings (0.1.3)
|
18
|
+
yard (0.8.2.1)
|
19
|
+
|
20
|
+
PLATFORMS
|
21
|
+
ruby
|
22
|
+
|
23
|
+
DEPENDENCIES
|
24
|
+
rake (>= 0.9.2.2)
|
25
|
+
rcov (~> 0.9.0)
|
26
|
+
rtagstask (>= 0.0.4)
|
27
|
+
rubytree!
|
28
|
+
yard (>= 0.8.2.1)
|
@@ -1,3 +1,35 @@
|
|
1
|
+
# @markup rdoc
|
2
|
+
|
3
|
+
= History of Changes
|
4
|
+
|
5
|
+
=== 0.8.3 / 2012-08-31
|
6
|
+
|
7
|
+
This is a primarily a bug-fix release, with some packaging changes.
|
8
|
+
|
9
|
+
* Have removed the dependency on Hoe. The build is now vanilla gemspec based.
|
10
|
+
|
11
|
+
* Included support for {gem-testers}[http://test.rubygems.org/].
|
12
|
+
|
13
|
+
* Included support for {Bundler}[http://gembundler.com/].
|
14
|
+
|
15
|
+
* Implemented the +as_json+ method to support Rails' JSON encoding,
|
16
|
+
by pulling in the changes by Eric Cline (https://github.com/escline).
|
17
|
+
|
18
|
+
* Partial fix for {Github Bug
|
19
|
+
#5}[https://github.com/evolve75/RubyTree/issues/5]. This is to
|
20
|
+
prevent infinite looping is an existing node is added again
|
21
|
+
elsewhere in the tree.
|
22
|
+
|
23
|
+
* Fixed the issue with using +integers+ as node names, and its
|
24
|
+
interaction with the +TreeNode#[]+ access method {Github Bug
|
25
|
+
#6}[https://github.com/evolve75/RubyTree/issues/6].
|
26
|
+
|
27
|
+
* Clarified the need to have unique node names {Github Bug
|
28
|
+
#7}[https://github.com/evolve75/RubyTree/issues/7] (documentation).
|
29
|
+
|
30
|
+
* Fixed +siblings+ method to return an empty array for the root node as
|
31
|
+
well (it returned +nil+ earlier).
|
32
|
+
|
1
33
|
=== 0.8.2 / 2011-12-15
|
2
34
|
|
3
35
|
* Minor bug-fix release to address bug #1215 (Tree::TreeNode#to_s
|
@@ -107,4 +139,6 @@
|
|
107
139
|
|
108
140
|
* Minor code refactoring. Changes in the Rakefile.
|
109
141
|
|
110
|
-
|
142
|
+
;; Local Variables:
|
143
|
+
;; mode: rdoc
|
144
|
+
;; End:
|
data/{README → README.rdoc}
RENAMED
@@ -6,7 +6,7 @@
|
|
6
6
|
\/ \_/\__,_|_.__/ \__, |\__|_| \___|\___|
|
7
7
|
|___/
|
8
8
|
|
9
|
-
Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011 Anupam Sengupta (anupamsg at gmail dot com)
|
9
|
+
Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Anupam Sengupta (anupamsg at gmail dot com)
|
10
10
|
|
11
11
|
http://rubytree.rubyforge.org
|
12
12
|
|
@@ -70,10 +70,10 @@ As an example, the following code-snippet implements this tree structure:
|
|
70
70
|
|
71
71
|
* Ruby 1.8+ (http://www.ruby-lang.org)
|
72
72
|
|
73
|
-
*
|
74
|
-
* structured_warnings (http://github.com/schmidt/structured_warnings)
|
73
|
+
* Run-time Dependencies:
|
74
|
+
* structured_warnings (http://github.com/schmidt/structured_warnings) rubygem
|
75
75
|
* Yard (http://yardoc.org) Rubygem for the documentation
|
76
|
-
* JSON (http://flori.github.com/json)
|
76
|
+
* JSON (http://flori.github.com/json) rubygem for converting to/from the JSON format
|
77
77
|
|
78
78
|
* Development dependencies (not required for installing the gem):
|
79
79
|
* Hoe (http://seattlerb.rubyforge.org/hoe/Hoe.html) Rubygem
|
@@ -184,6 +184,7 @@ I would like to acknowledge the following contributors for helping improve RubyT
|
|
184
184
|
|
185
185
|
1. Dirk Breuer (http://github.com/railsbros-dirk) for contributing the JSON conversion code.
|
186
186
|
2. Vincenzo Farruggia for contributing the (sub)tree cloning code.
|
187
|
+
3. Eric Cline (https://github.com/escline) for the Rails JSON encoding fix.
|
187
188
|
|
188
189
|
== LICENSE:
|
189
190
|
|
@@ -212,10 +213,7 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSE
|
|
212
213
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
213
214
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
214
215
|
|
215
|
-
|
216
|
-
(Document Revision: $Revision$ by $Author$)
|
217
|
-
|
218
216
|
# Local Variables:
|
219
|
-
# mode:
|
217
|
+
# mode: rdoc
|
220
218
|
# coding: utf-8-unix
|
221
219
|
# End:
|
data/Rakefile
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# Rakefile - This file is part of the RubyTree package.
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# Copyright (c) 2006, 2007, 2009, 2010 Anupam Sengupta
|
5
|
+
# Copyright (c) 2006, 2007, 2009, 2010, 2011, 2012 Anupam Sengupta
|
8
6
|
#
|
9
7
|
# All rights reserved.
|
10
8
|
#
|
@@ -34,114 +32,92 @@
|
|
34
32
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
35
33
|
#
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
# Default is to create a rubygem.
|
40
|
-
desc "Default Task (create the gem)"
|
41
|
-
task :default => :gem
|
42
|
-
|
43
|
-
# Use Hoe to define the rake tasks.
|
44
|
-
begin
|
45
|
-
require 'hoe'
|
46
|
-
Hoe.plugin :yard
|
47
|
-
|
48
|
-
Hoe.spec PKG_NAME do
|
49
|
-
# The GemSpec settings
|
50
|
-
self.rubyforge_name = PKG_NAME
|
51
|
-
developer "Anupam Sengupta", "anupamsg@gmail.com"
|
52
|
-
|
53
|
-
self.url = "http://rubytree.rubyforge.org"
|
54
|
-
self.readme_file = 'README'
|
55
|
-
|
56
|
-
# Set the Yard Options
|
57
|
-
extra_docs = ["COPYING", "API-CHANGES"]
|
58
|
-
extra_docs.each { |file| self.yard_files << file }
|
59
|
-
self.yard_options = ["--files", extra_docs.join(",") ]
|
60
|
-
|
61
|
-
# Now the publishing settings
|
62
|
-
self.remote_rdoc_dir = 'rdoc'
|
35
|
+
require 'rubygems'
|
36
|
+
GEM_SPEC = eval(File.read("rubytree.gemspec")) # Load the gemspec.
|
63
37
|
|
64
|
-
|
65
|
-
|
66
|
-
|
38
|
+
PKG_NAME = GEM_SPEC.name
|
39
|
+
PKG_VER = GEM_SPEC.version
|
40
|
+
GEM_NAME = "#{PKG_NAME}-#{PKG_VER}.gem"
|
67
41
|
|
68
|
-
|
69
|
-
|
70
|
-
========================================================================
|
42
|
+
desc "Default Task (Run the tests)"
|
43
|
+
task :default => 'test:rcov'
|
71
44
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
Please note that as of 0.8.0 the CamelCase method names are DEPRECATED.
|
45
|
+
desc "Display the current gem version"
|
46
|
+
task :version do
|
47
|
+
puts "Current Version: #{GEM_NAME}"
|
48
|
+
end
|
78
49
|
|
79
|
-
|
50
|
+
require 'rake/clean'
|
51
|
+
task :clean => 'gem:clobber_package'
|
52
|
+
CLEAN.include('coverage')
|
53
|
+
task :clobber => [:clean, 'doc:clobber_rdoc', 'doc:clobber_yard', 'tag:clobber_tags']
|
80
54
|
|
81
|
-
|
82
|
-
|
55
|
+
desc "Open an irb session preloaded with this library"
|
56
|
+
task :console do
|
57
|
+
sh "irb -rubygems -r ./lib/tree.rb"
|
58
|
+
end
|
83
59
|
|
84
|
-
|
60
|
+
namespace :doc do # ................................ Documentation
|
85
61
|
|
86
|
-
|
87
|
-
|
62
|
+
require 'rdoc/task'
|
63
|
+
Rake::RDocTask.new do |rdoc|
|
64
|
+
rdoc.rdoc_dir = 'rdoc'
|
65
|
+
rdoc.title = "#{PKG_NAME}-#{PKG_VER}"
|
66
|
+
rdoc.main = 'README.rdoc'
|
67
|
+
rdoc.rdoc_files.include(GEM_SPEC.extra_rdoc_files)
|
68
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
69
|
+
end
|
88
70
|
|
89
|
-
|
90
|
-
|
91
|
-
|
71
|
+
require 'yard'
|
72
|
+
YARD::Rake::YardocTask.new do |t|
|
73
|
+
t.files = ['lib/**/*.rb', '-', GEM_SPEC.extra_rdoc_files]
|
74
|
+
t.options = ['--no-private', '--embed-mixins']
|
92
75
|
end
|
93
76
|
|
94
|
-
|
95
|
-
|
96
|
-
|
77
|
+
desc "Remove YARD Documentation"
|
78
|
+
task :clobber_yard do
|
79
|
+
rm_rf 'doc'
|
80
|
+
end
|
81
|
+
end
|
97
82
|
|
98
|
-
|
83
|
+
desc "Run the test cases"
|
84
|
+
task :test => 'test:unit'
|
99
85
|
|
100
|
-
|
86
|
+
namespace :test do # ................................ Test related
|
101
87
|
|
102
|
-
|
88
|
+
require 'rake/testtask'
|
89
|
+
Rake::TestTask.new(:unit) do |test|
|
90
|
+
test.libs << 'lib' << 'test'
|
91
|
+
test.pattern = 'test/**/test_*.rb'
|
92
|
+
test.verbose = false
|
93
|
+
end
|
103
94
|
|
104
|
-
|
95
|
+
require 'rcov/rcovtask'
|
96
|
+
Rcov::RcovTask.new(:rcov) do |t|
|
97
|
+
t.libs << "test"
|
98
|
+
t.test_files = FileList['test/**/test_*.rb']
|
99
|
+
t.verbose = true
|
100
|
+
t.rcov_opts << '--exclude /gems/,/Library/,/usr/,spec,lib/tasks'
|
101
|
+
end
|
105
102
|
|
106
|
-
END
|
107
103
|
end
|
108
104
|
|
109
|
-
|
110
|
-
# The following tasks are loaded independently of Hoe
|
111
|
-
# ===================================================
|
112
|
-
|
113
|
-
# Optional TAGS Task.
|
114
|
-
# Needs http://rubyforge.org/projects/rtagstask/
|
115
|
-
begin
|
105
|
+
namespace :tag do # ................................ Emacs Tags
|
116
106
|
require 'rtagstask'
|
117
|
-
RTagsTask.new do |rd|
|
107
|
+
RTagsTask.new(:tags) do |rd|
|
118
108
|
rd.vi = false
|
119
109
|
end
|
120
|
-
rescue LoadError
|
121
|
-
$stderr.puts <<-END
|
122
|
-
ERROR!!! You need to have the rtagstask (https://rubyforge.org/projects/rtagstask/) for generating the TAGS file.
|
123
|
-
|
124
|
-
You can install the rtags gem by running the following command as root (or sudo):
|
125
|
-
|
126
|
-
$ gem install rtagstask
|
127
|
-
|
128
|
-
END
|
129
110
|
end
|
130
111
|
|
131
|
-
|
132
|
-
require '
|
133
|
-
|
134
|
-
|
135
|
-
|
112
|
+
namespace :gem do # ................................ Gem related
|
113
|
+
require 'rubygems/package_task'
|
114
|
+
Gem::PackageTask.new(GEM_SPEC) do |pkg|
|
115
|
+
pkg.need_zip = true
|
116
|
+
pkg.need_tar = true
|
136
117
|
end
|
137
|
-
rescue LoadError
|
138
|
-
$stderr.puts <<-END
|
139
|
-
ERROR!!! You need to have reek (http://github.com/kevinrutherford/reek) for detecing the code smell.
|
140
|
-
|
141
|
-
You can install the reek gem by running the following command as root (or sudo):
|
142
|
-
|
143
|
-
$ gem install reek
|
144
|
-
|
145
|
-
END
|
146
118
|
|
119
|
+
desc "Push the gem into the Rubygems repository"
|
120
|
+
task :push => :gem do
|
121
|
+
sh "gem push pkg/#{GEM_NAME}"
|
122
|
+
end
|
147
123
|
end
|
data/TODO.org
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
# -*- mode: org; coding: utf-8-unix; fill-column: 120; -*-
|
2
|
+
#+OPTIONS: ^:{}
|
3
|
+
|
4
|
+
* R0.7.0 :ARCHIVE:
|
5
|
+
*** DONE Start using signed tags from R0.7.0 :ARCHIVE:
|
6
|
+
*** DONE Add a check in the Tree::TreeNode.add method to prevent addition of nil child nodes :ARCHIVE:
|
7
|
+
CLOSED: [2010-02-23 Tue 23:07]
|
8
|
+
*** DONE Fix the edge condition for Tree::TreeNode.isOnlyChild? when the root node is the receiver. :ARCHIVE:
|
9
|
+
CLOSED: [2010-02-23 Tue 22:03]
|
10
|
+
There really is no good default to this situation. We will return 'true' simply because there is no other sibling
|
11
|
+
to a root. However, a good case can be made that a root node does not have any parent either.
|
12
|
+
*** DONE Add a convenience 'level' method to the TreeNode class (will be an alias to nodeDepth) :ARCHIVE:
|
13
|
+
CLOSED: [2010-02-21 Sun 01:02]
|
14
|
+
*** DONE Add a API-CHANGES file to document the various API changes made till date :ARCHIVE:
|
15
|
+
CLOSED: [2010-01-31 Sun 00:52]
|
16
|
+
*** DONE Add new methods to return the degree counts of the receiver node (in-degree and out-degree) :ARCHIVE:
|
17
|
+
CLOSED: [2010-01-30 Sat 23:56]
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
* R0.8.0 :ARCHIVE:
|
23
|
+
*** DONE Convert all method names to the canonical /^[_a-z<>=\[|+-\/\*`]+[_a-z0-9_<>=~@\[\]]*[=!\?]?$/ pattern :ARCHIVE:
|
24
|
+
See Roodi report at http://getcaliper.com/caliper/tool?tool=roodi&repo=git://github.com/evolve75/RubyTree.git
|
25
|
+
*** DONE Integrate the subtree cloning patch submitted by Vincenzo Farrugia. :ARCHIVE:
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
* R0.8.1 :ARCHIVE:
|
30
|
+
*** DONE Fix [[http://rubyforge.org/tracker/index.php?func%3Ddetail&aid%3D28613&group_id%3D1215&atid%3D4793][bug #28613]] which was affecting the `leftChild=' and `rightChild=' methods for binary trees. :ARCHIVE:
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
* R0.8.3
|
35
|
+
|
36
|
+
This is a bugfix release.
|
37
|
+
|
38
|
+
*** TODO [#A] Resolve the infinite loop bug if a node is added to itself as a child :Partial:
|
39
|
+
Issue https://github.com/evolve75/RubyTree/issues/5
|
40
|
+
|
41
|
+
This is a subtle problem to resolve. The specific case of a node
|
42
|
+
being added to itself is trivial to resolve, and the fix has been
|
43
|
+
put in for 0.8.3.
|
44
|
+
|
45
|
+
However, the general problem is that in the current code, a node
|
46
|
+
can be added as a child to any portion of the tree down the
|
47
|
+
hierarchy (e.g., as a grandchild), which will need a more thorough
|
48
|
+
detection code in the ~TreeNode#add~ method, if it is to be done at
|
49
|
+
runtime.
|
50
|
+
|
51
|
+
The issue is really to prevent the tree becoming a graph. Note
|
52
|
+
that the issue is with duplicate nodes, /not/ duplicated content.
|
53
|
+
|
54
|
+
A few options exist:
|
55
|
+
1. Perform a runtime check in the ~TreeNode#add~ method. This will
|
56
|
+
cause a performance hit as the tree becomes larger.
|
57
|
+
2. Allow the additions to go through, but create a new ~validate~
|
58
|
+
method that checks for such cycles.
|
59
|
+
3. Create separate configuration object which can be attached to
|
60
|
+
the root of the tree, which allows per-tree configuration of
|
61
|
+
the behavior - this does allow for the user to take control,
|
62
|
+
but also introduces complications during tree mergers and
|
63
|
+
spitting subtrees.
|
64
|
+
4. Create a registry (to be maintained at the root?) of all nodes,
|
65
|
+
and use this for validating the node additions (and preventing
|
66
|
+
duplicates). This needs to be a hash (to allow O(1) access),
|
67
|
+
and will sacrifice memory. There might be a need to
|
68
|
+
restructure the internals to make better use of memory.
|
69
|
+
|
70
|
+
|
71
|
+
*** DONE Make Rubytree compatible with Bundler :ARCHIVE:
|
72
|
+
CLOSED: [2012-08-21 Tue 21:04]
|
73
|
+
|
74
|
+
*** DONE Make Rubytree compatible wth gem-testers :ARCHIVE:
|
75
|
+
CLOSED: [2012-08-21 Tue 21:04]
|
76
|
+
|
77
|
+
*** DONE Remove the dependency on Hoe :ARCHIVE:
|
78
|
+
CLOSED: [2012-08-21 Tue 21:05]
|
79
|
+
*** DONE Resolve the _tree.rb_ file conflict with the [[http://netaddr.rubyforge.org/][netaddr gem]] :ARCHIVE:
|
80
|
+
CLOSED: [2012-08-20 Mon 01:03]
|
81
|
+
Issue https://github.com/evolve75/RubyTree/issues/8
|
82
|
+
|
83
|
+
*** DONE Update documentation to be more explicit about duplicate node names :ARCHIVE:
|
84
|
+
CLOSED: [2012-08-19 Sun 21:46]
|
85
|
+
Issue https://github.com/evolve75/RubyTree/issues/7
|
86
|
+
Update documentation for :name attribute in tree.rb. There is no
|
87
|
+
specific code fix needed.
|
88
|
+
|
89
|
+
*** DONE Allow integers to be used as node names (clarify the scenario). Fixed issue #6. :ARCHIVE:
|
90
|
+
CLOSED: [2012-08-19 Sun 15:17]
|
91
|
+
Issue https://github.com/evolve75/RubyTree/issues/6
|
92
|
+
We will need to warn the user when an Integer is used as a name
|
93
|
+
for the node (but still allow the usage),
|
94
|
+
and
|
95
|
+
also add an optional flag to the TreeNode#[] method to allow the
|
96
|
+
user to explicitly indicate use of the Integer parameter as a
|
97
|
+
literal name, and not as an /index/ to the children array.
|
98
|
+
|
99
|
+
*** DONE Clarify (or fix) the scenario whether a root node without children is a leaf :ARCHIVE:
|
100
|
+
CLOSED: [2012-08-19 Sun 15:09]
|
101
|
+
Issue http://rubyforge.org/tracker/index.php?func=detail&aid=29549&group_id=1215&atid=4793
|
102
|
+
|
103
|
+
#+begin_src ruby -n :eval no
|
104
|
+
tree.each_leaf do |tree_leaf|
|
105
|
+
tree_leaf_parent = tree_leaf.parent
|
106
|
+
tree_leaf.remove_from_parent!
|
107
|
+
puts tree_leaf_parent.is_leaf?
|
108
|
+
end
|
109
|
+
#+end_src
|
110
|
+
|
111
|
+
will return ~false~, while technically ~tree_leaf_parent~ becomes leaf itself when ~tree_leaf~ is removed.
|
112
|
+
|
113
|
+
The problem here is that the code above is trying to concurrently modify the collection over which the ~each_leaf~
|
114
|
+
iterator is looping, which has unpredicable results. As an example, try this with an array:
|
115
|
+
|
116
|
+
#+begin_src ruby -n
|
117
|
+
a = Array(1..5)
|
118
|
+
a.each do |e|
|
119
|
+
a.delete(e)
|
120
|
+
end
|
121
|
+
a
|
122
|
+
#+end_src
|
123
|
+
|
124
|
+
#+RESULTS:
|
125
|
+
| 2 | 4 |
|
126
|
+
|
127
|
+
The result is surprising, as not all elements are being deleted. A good explanation is available in [[https://groups.google.com/forum/?fromgroups#!topic/ruby-talk-google/iEDF8qhojss%255B1-25%255D][this thread]] on
|
128
|
+
Ruby-Talk @ Google.
|
129
|
+
|
130
|
+
The correct way to handle the original need is:
|
131
|
+
|
132
|
+
#+begin_src ruby -n :eval no
|
133
|
+
leafs = @root.each_leaf
|
134
|
+
parents = leafs.collect {|leaf| leaf.parent }
|
135
|
+
leafs.each {|leaf| leaf.remove_from_parent!}
|
136
|
+
parents.each {|parent| assert(parent.is_leaf?) if not parent.has_children?}
|
137
|
+
#+end_src
|
138
|
+
|
139
|
+
Basically, the parent removal is done in a separate block, and *then* the check for the parents becoming leafs is done.
|
140
|
+
|
141
|
+
*** DONE Fix the ~first_sibling~ and ~last_sibling~ for the root :ARCHIVE:
|
142
|
+
CLOSED: [2012-08-19 Sun 21:01]
|
143
|
+
The current behavior is correct, and has been left as is.
|
144
|
+
*** DONE Fix the ~siblings~ method to return an empty array for root :ARCHIVE:
|
145
|
+
CLOSED: [2012-08-19 Sun 21:03]
|
146
|
+
*** DONE Fix the TreeNode#root method to return nil for root's root. :ARCHIVE:
|
147
|
+
CLOSED: [2012-08-19 Sun 21:13]
|
148
|
+
|
149
|
+
Left the code as-is, since we need some way to un-ambiguously find the root, regardless of the node given.
|
150
|
+
|
151
|
+
|
152
|
+
* R0.9.0
|
153
|
+
*** TODO Fix the inconsistency of returning root as its first sibling, and returning a nil instead. Ditto for last sibling.
|
154
|
+
*** TODO fix the inconsistency of returning nil for the root, and an empty array for nodes which have no siblings.
|
155
|
+
*** TODO We should perhaps return nil as root's root.
|
156
|
+
*** TODO The semantic of length is probably unclear. Should return the node_depth instead (or remove the method)
|
157
|
+
The current equivalence of length to size should also be removed.
|
158
|
+
|
159
|
+
|
160
|
+
* Unplanned / Not assigned to any release
|
161
|
+
*** TODO Create the basic UML diagrams and upload to the Site
|
162
|
+
DEADLINE: <2010-01-04 Mon>
|
163
|
+
|
164
|
+
*** TODO Add a YAML export method to the TreeNode class.
|
165
|
+
|
166
|
+
*** TODO marshal_load method probably should be a class method. It currently clobbers self.
|
167
|
+
*** DONE Fix bug # [[http://rubyforge.org/tracker/index.php%3Ffunc%3Ddetail&aid%3D22535&group_id%3D1215&atid%3D4793][22535]]: The method Tree::TreeNode#depth is a misnomer. The current definition actually provides the height function. :ARCHIVE:
|
168
|
+
DEADLINE: <2010-01-09 Sat> CLOSED: [2010-01-03 Sun 22:15]
|
169
|
+
|
170
|
+
*** DONE Get the version control moved from CVS to Subversion (request submitted to RubyForge) :ARCHIVE:
|
171
|
+
CLOSED: [2010-01-02 Sat 17:58]
|
172
|
+
|
173
|
+
*** DONE Add logic in Rakefile to read the file list from Manifest.txt file. :ARCHIVE:
|
174
|
+
CLOSED: [2009-12-31 Thu 23:37]
|