rubytree 1.0.2 → 2.0.0
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.
- checksums.yaml +4 -4
- data/API-CHANGES.md +153 -0
- data/Gemfile +2 -6
- data/Gemfile.lock +40 -55
- data/History.md +410 -0
- data/LICENSE.md +1 -1
- data/README.md +21 -24
- data/Rakefile +41 -20
- data/TODO.org +19 -15
- data/examples/example_basic.rb +14 -7
- data/lib/rubytree.rb +2 -3
- data/lib/tree/binarytree.rb +13 -12
- data/lib/tree/tree_deps.rb +2 -5
- data/lib/tree/utils/hash_converter.rb +129 -121
- data/lib/tree/utils/json_converter.rb +80 -77
- data/lib/tree/utils/metrics_methods.rb +14 -47
- data/lib/tree/utils/path_methods.rb +11 -11
- data/lib/tree/utils/tree_merge_handler.rb +80 -80
- data/lib/tree/utils/utils.rb +9 -7
- data/lib/tree/version.rb +3 -4
- data/lib/tree.rb +80 -82
- data/rubytree.gemspec +61 -38
- data/spec/spec_helper.rb +4 -2
- data/spec/tree_spec.rb +129 -28
- data/test/run_test.rb +4 -3
- data/test/test_binarytree.rb +25 -45
- data/test/test_rubytree_require.rb +2 -1
- data/test/test_subclassed_node.rb +2 -20
- data/test/test_thread_and_fiber.rb +4 -4
- data/test/test_tree.rb +126 -199
- metadata +103 -69
- data/API-CHANGES.rdoc +0 -99
- data/History.rdoc +0 -303
- data/lib/tree/utils/camel_case_method_handler.rb +0 -77
- data/setup.rb +0 -1565
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubytree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anupam Sengupta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -16,178 +16,195 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: '2.0'
|
20
|
+
- - ">"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.3.1
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
29
|
+
version: '2.0'
|
30
|
+
- - ">"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.3.1
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
34
|
+
name: bundler
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :
|
39
|
+
version: '2.3'
|
40
|
+
type: :development
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
44
|
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
46
|
+
version: '2.3'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
48
|
+
name: rake
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
53
|
+
version: '13.0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
60
|
+
version: '13.0'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
62
|
+
name: rdoc
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
|
-
- - "
|
65
|
+
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
67
|
+
version: '6.0'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
|
-
- - "
|
72
|
+
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0
|
74
|
+
version: '6.0'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
76
|
+
name: rspec
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
|
-
- - "
|
79
|
+
- - "~>"
|
74
80
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
81
|
+
version: '3.0'
|
82
|
+
- - ">"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '3.10'
|
76
85
|
type: :development
|
77
86
|
prerelease: false
|
78
87
|
version_requirements: !ruby/object:Gem::Requirement
|
79
88
|
requirements:
|
80
|
-
- - "
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '3.0'
|
92
|
+
- - ">"
|
81
93
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
94
|
+
version: '3.10'
|
83
95
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
96
|
+
name: rtagstask
|
85
97
|
requirement: !ruby/object:Gem::Requirement
|
86
98
|
requirements:
|
87
|
-
- - "
|
99
|
+
- - "~>"
|
88
100
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
101
|
+
version: 0.0.4
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
93
105
|
requirements:
|
94
|
-
- - "
|
106
|
+
- - "~>"
|
95
107
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
108
|
+
version: 0.0.4
|
97
109
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
110
|
+
name: rubocop
|
99
111
|
requirement: !ruby/object:Gem::Requirement
|
100
112
|
requirements:
|
101
113
|
- - "~>"
|
102
114
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
115
|
+
version: '1.0'
|
104
116
|
type: :development
|
105
117
|
prerelease: false
|
106
118
|
version_requirements: !ruby/object:Gem::Requirement
|
107
119
|
requirements:
|
108
120
|
- - "~>"
|
109
121
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
122
|
+
version: '1.0'
|
111
123
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
124
|
+
name: rubocop-rake
|
113
125
|
requirement: !ruby/object:Gem::Requirement
|
114
126
|
requirements:
|
115
127
|
- - "~>"
|
116
128
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.0
|
129
|
+
version: '0.0'
|
118
130
|
type: :development
|
119
131
|
prerelease: false
|
120
132
|
version_requirements: !ruby/object:Gem::Requirement
|
121
133
|
requirements:
|
122
134
|
- - "~>"
|
123
135
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.0
|
136
|
+
version: '0.0'
|
125
137
|
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop
|
138
|
+
name: rubocop-rspec
|
127
139
|
requirement: !ruby/object:Gem::Requirement
|
128
140
|
requirements:
|
129
|
-
- - "
|
141
|
+
- - "~>"
|
130
142
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
143
|
+
version: '2.0'
|
132
144
|
type: :development
|
133
145
|
prerelease: false
|
134
146
|
version_requirements: !ruby/object:Gem::Requirement
|
135
147
|
requirements:
|
136
|
-
- - "
|
148
|
+
- - "~>"
|
137
149
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
150
|
+
version: '2.0'
|
139
151
|
- !ruby/object:Gem::Dependency
|
140
152
|
name: test-unit
|
141
153
|
requirement: !ruby/object:Gem::Requirement
|
142
154
|
requirements:
|
143
|
-
- - "
|
155
|
+
- - "~>"
|
144
156
|
- !ruby/object:Gem::Version
|
145
|
-
version: 3.
|
157
|
+
version: '3.0'
|
146
158
|
type: :development
|
147
159
|
prerelease: false
|
148
160
|
version_requirements: !ruby/object:Gem::Requirement
|
149
161
|
requirements:
|
150
|
-
- - "
|
162
|
+
- - "~>"
|
151
163
|
- !ruby/object:Gem::Version
|
152
|
-
version: 3.
|
164
|
+
version: '3.0'
|
153
165
|
- !ruby/object:Gem::Dependency
|
154
166
|
name: yard
|
155
167
|
requirement: !ruby/object:Gem::Requirement
|
156
168
|
requirements:
|
157
169
|
- - "~>"
|
158
170
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
171
|
+
version: '0.0'
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 0.9.20
|
160
175
|
type: :development
|
161
176
|
prerelease: false
|
162
177
|
version_requirements: !ruby/object:Gem::Requirement
|
163
178
|
requirements:
|
164
179
|
- - "~>"
|
165
180
|
- !ruby/object:Gem::Version
|
166
|
-
version: 0.
|
181
|
+
version: '0.0'
|
182
|
+
- - ">="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: 0.9.20
|
167
185
|
description: |2+
|
186
|
+
RubyTree is a pure Ruby implementation of the generic tree data
|
187
|
+
structure. It provides a node-based model to store named nodes in the tree,
|
188
|
+
and provides simple APIs to access, modify and traverse the structure.
|
168
189
|
|
169
|
-
|
170
|
-
|
171
|
-
|
190
|
+
The implementation is node-centric, where individual nodes in the tree are
|
191
|
+
the primary structural elements. All common tree-traversal methods
|
192
|
+
(pre-order, post-order, and breadth-first) are supported.
|
172
193
|
|
173
|
-
The
|
174
|
-
|
175
|
-
post-order, and breadth-first) are supported.
|
176
|
-
|
177
|
-
The library mixes in the Enumerable and Comparable modules to allow access to
|
178
|
-
the tree as a standard collection (iteration, comparison, etc.).
|
194
|
+
The library mixes in the Enumerable and Comparable modules to allow access
|
195
|
+
to the tree as a standard collection (iteration, comparison, etc.).
|
179
196
|
|
180
197
|
A Binary tree is also provided, which provides the in-order traversal in
|
181
198
|
addition to the other methods.
|
182
199
|
|
183
|
-
RubyTree supports importing from, and exporting to JSON, and also supports
|
184
|
-
Ruby's standard object marshaling.
|
200
|
+
RubyTree supports importing from, and exporting to JSON, and also supports
|
201
|
+
the Ruby's standard object marshaling.
|
185
202
|
|
186
203
|
This is a BSD licensed open source project, and is hosted at
|
187
|
-
|
188
|
-
|
204
|
+
<https://github.com/evolve75/RubyTree>, and is available as a standard gem
|
205
|
+
from <https://rubygems.org/gems/rubytree>.
|
189
206
|
|
190
|
-
The home page for RubyTree is at http://rubytree.anupamsg.me
|
207
|
+
The home page for RubyTree is at <http://rubytree.anupamsg.me>.
|
191
208
|
|
192
209
|
email: anupamsg@gmail.com
|
193
210
|
executables: []
|
@@ -195,14 +212,14 @@ extensions: []
|
|
195
212
|
extra_rdoc_files:
|
196
213
|
- README.md
|
197
214
|
- LICENSE.md
|
198
|
-
- API-CHANGES.
|
199
|
-
- History.
|
215
|
+
- API-CHANGES.md
|
216
|
+
- History.md
|
200
217
|
files:
|
201
218
|
- ".gemtest"
|
202
|
-
- API-CHANGES.
|
219
|
+
- API-CHANGES.md
|
203
220
|
- Gemfile
|
204
221
|
- Gemfile.lock
|
205
|
-
- History.
|
222
|
+
- History.md
|
206
223
|
- LICENSE.md
|
207
224
|
- README.md
|
208
225
|
- Rakefile
|
@@ -212,7 +229,6 @@ files:
|
|
212
229
|
- lib/tree.rb
|
213
230
|
- lib/tree/binarytree.rb
|
214
231
|
- lib/tree/tree_deps.rb
|
215
|
-
- lib/tree/utils/camel_case_method_handler.rb
|
216
232
|
- lib/tree/utils/hash_converter.rb
|
217
233
|
- lib/tree/utils/json_converter.rb
|
218
234
|
- lib/tree/utils/metrics_methods.rb
|
@@ -221,7 +237,6 @@ files:
|
|
221
237
|
- lib/tree/utils/utils.rb
|
222
238
|
- lib/tree/version.rb
|
223
239
|
- rubytree.gemspec
|
224
|
-
- setup.rb
|
225
240
|
- spec/spec_helper.rb
|
226
241
|
- spec/tree_spec.rb
|
227
242
|
- test/run_test.rb
|
@@ -233,18 +248,37 @@ files:
|
|
233
248
|
homepage: http://rubytree.anupamsg.me
|
234
249
|
licenses:
|
235
250
|
- BSD-3-Clause-Clear
|
236
|
-
metadata:
|
251
|
+
metadata:
|
252
|
+
rubygems_mfa_required: 'true'
|
237
253
|
post_install_message: |2
|
238
254
|
========================================================================
|
239
255
|
Thank you for installing RubyTree.
|
240
256
|
|
241
|
-
Note::
|
257
|
+
Note::
|
258
|
+
|
259
|
+
- 2.0.0 is a major release with BREAKING API changes.
|
260
|
+
See `API-CHANGES.md` for details.
|
261
|
+
|
262
|
+
- `Tree::TreeNode#depth` method has been removed (it was broken).
|
263
|
+
|
264
|
+
- Support for `CamelCase` methods names has bee removed.
|
265
|
+
|
266
|
+
- The predicate methods no longer have `is_` or `has_` prefixes. However,
|
267
|
+
aliases with these prefixes exist to support existing client code.
|
268
|
+
|
269
|
+
- Use of integers as node names does not require the optional
|
270
|
+
`num_as_name` flag.
|
271
|
+
|
272
|
+
- `structured_warnings` is no longer a dependency.
|
273
|
+
|
274
|
+
- Explicit support for rbx Ruby has been removed.
|
242
275
|
|
243
|
-
Details of the API changes are documented in the API-CHANGES file.
|
244
276
|
========================================================================
|
245
277
|
rdoc_options:
|
246
278
|
- "--title"
|
247
|
-
- Rubytree Documentation
|
279
|
+
- 'Rubytree Documentation: rubytree-2.0.0'
|
280
|
+
- "--main"
|
281
|
+
- README.md
|
248
282
|
- "--quiet"
|
249
283
|
require_paths:
|
250
284
|
- lib
|
@@ -252,7 +286,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
252
286
|
requirements:
|
253
287
|
- - ">="
|
254
288
|
- !ruby/object:Gem::Version
|
255
|
-
version: '2.
|
289
|
+
version: '2.6'
|
256
290
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
257
291
|
requirements:
|
258
292
|
- - ">="
|
@@ -262,7 +296,7 @@ requirements: []
|
|
262
296
|
rubygems_version: 3.1.4
|
263
297
|
signing_key:
|
264
298
|
specification_version: 4
|
265
|
-
summary: A generic tree data structure.
|
299
|
+
summary: A generic tree data structure for Ruby.
|
266
300
|
test_files:
|
267
301
|
- test/test_binarytree.rb
|
268
302
|
- test/test_subclassed_node.rb
|
data/API-CHANGES.rdoc
DELETED
@@ -1,99 +0,0 @@
|
|
1
|
-
# @markup rdoc
|
2
|
-
|
3
|
-
= API Changes in RubyTree
|
4
|
-
|
5
|
-
This file documents various API level changes that have been made to the
|
6
|
-
RubyTree package.
|
7
|
-
|
8
|
-
Note: API level changes are expected to reduce dramatically after the 1.x
|
9
|
-
release. In most cases, an alternative will be provided to ensure relatively
|
10
|
-
smooth transition to the new APIs.
|
11
|
-
|
12
|
-
== Release 0.9.5 Changes
|
13
|
-
|
14
|
-
- The {Tree::TreeNode#add} method now provides 'move' semantics, if a child
|
15
|
-
which is on an existing tree is added to another tree, or location on the same
|
16
|
-
tree. In this situation, the child node is removed from its old position, and
|
17
|
-
added to the new parent node. After the add operation is complete, the child
|
18
|
-
no longer exists on the old tree/location.
|
19
|
-
|
20
|
-
== Release 0.9.3 Changes
|
21
|
-
|
22
|
-
- The validation for unique node names has changed in the {Tree::TreeNode#add}
|
23
|
-
method. RubyTree no longer enforces globally unique names. The node-names need
|
24
|
-
to be unique only between the sibling nodes.
|
25
|
-
|
26
|
-
== Release 0.9.0 Changes
|
27
|
-
|
28
|
-
- New post-ordered traversal via the {Tree::TreeNode#postordered_each} method.
|
29
|
-
|
30
|
-
- The Binary Tree implementation now supports in-order traversal via the
|
31
|
-
{Tree::BinaryTreeNode#inordered_each} method.
|
32
|
-
|
33
|
-
- RubyTree now mixes in the {http://ruby-doc.org/core-1.8.7/Comparable.html
|
34
|
-
Comparable} module.
|
35
|
-
|
36
|
-
- The traversal methods ({Tree::TreeNode#each},
|
37
|
-
{Tree::TreeNode#preordered_each}, {Tree::TreeNode#postordered_each} and
|
38
|
-
{Tree::TreeNode#breadth_each}) now correctly return an
|
39
|
-
{http://ruby-doc.org/core-1.8.7/Enumerable.html Enumerator} as the return
|
40
|
-
value when no block is given, and return the receiver node if a block was
|
41
|
-
provided. This is consistent with how the standard Ruby collections work.
|
42
|
-
|
43
|
-
== Release 0.8.3 Changes
|
44
|
-
|
45
|
-
- {Tree::TreeNode#siblings} will now return an empty array for the root node.
|
46
|
-
|
47
|
-
== Release 0.8.0 Changes
|
48
|
-
|
49
|
-
- Added the ability to specify an optional insertion position in the
|
50
|
-
{Tree::TreeNode#add} method. Idea and original code contributed by Dirk.
|
51
|
-
|
52
|
-
- Added a new method {Tree::TreeNode#detached_subtree_copy} to allow cloning
|
53
|
-
the entire tree. This method is also aliased to {Tree::TreeNode#dup}. Idea
|
54
|
-
and original code contributed by Vincenzo Farruggia.
|
55
|
-
|
56
|
-
- Converted all CamelCase method names to the canonical ruby_method_names
|
57
|
-
(underscore separated). The CamelCase methods can still be invoked, but will
|
58
|
-
throw a Deprecated warning.
|
59
|
-
|
60
|
-
== Release 0.7.0 Changes
|
61
|
-
|
62
|
-
- Converted all exceptions thrown on invalid method arguments to from
|
63
|
-
'RuntimeError' to 'ArgumentError'. This impacts the following methods:
|
64
|
-
|
65
|
-
- {Tree::TreeNode#initialize}
|
66
|
-
- {Tree::TreeNode#add}
|
67
|
-
- {Tree::TreeNode#[]}
|
68
|
-
- {Tree::BinaryTreeNode#add}
|
69
|
-
|
70
|
-
- Added {Tree::Utils::TreeMetricsHandler#level Tree::TreeNode#level} as an alias
|
71
|
-
for {Tree::Utils::TreeMetricsHandler#node_depth Tree::TreeNode#node_depth}
|
72
|
-
|
73
|
-
- Added new methods {Tree::Utils::TreeMetricsHandler#in_degree
|
74
|
-
Tree::TreeNode#in_degree} and {Tree::Utils::TreeMetricsHandler#out_degree
|
75
|
-
Tree::TreeNode#out_degree} to report the node's degree stats
|
76
|
-
|
77
|
-
- {Tree::TreeNode#is_only_child?} now returns +true+ for a root node.
|
78
|
-
|
79
|
-
- {Tree::TreeNode#next_sibling} and {Tree::TreeNode#previous_sibling} now
|
80
|
-
return +nil+ for a root node.
|
81
|
-
|
82
|
-
- {Tree::TreeNode#add} and {Tree::TreeNode#<<} now throw an ArgumentError
|
83
|
-
exception if a +nil+ node is passed as an argument.
|
84
|
-
|
85
|
-
- Added new methods {Tree::Utils::JSONConverter#to_json Tree::TreeNode#to_json}
|
86
|
-
and {Tree::Utils::JSONConverter::ClassMethods#json_create
|
87
|
-
Tree::TreeNode#json_create} to convert to/from the JSON format. Thanks to
|
88
|
-
Dirk[http://github.com/railsbros-dirk] for this change.
|
89
|
-
|
90
|
-
== Release 0.6.1 Changes
|
91
|
-
|
92
|
-
- Deprecated the {Tree::Utils::TreeMetricsHandler#depth} method as it was
|
93
|
-
returning an incorrect depth value. Have introduced a new replacement method
|
94
|
-
{Tree::Utils::TreeMetricsHandler#node_depth} which returns the correct result.
|
95
|
-
|
96
|
-
# Local Variables:
|
97
|
-
# mode: rdoc
|
98
|
-
# coding: utf-8-unix
|
99
|
-
# End:
|