rubytree 1.0.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.md ADDED
@@ -0,0 +1,410 @@
1
+ # History of Changes
2
+
3
+ ### 2.0.0 / 2022-06-21
4
+
5
+ * A major release with significant modernization to the code base and removal of
6
+ legacy cruft, thanks to [jmortlock][].
7
+
8
+ * The long deprecated `Tree::TreeNode#depth` method has finally been
9
+ **removed**. Use [Tree::TreeNode#node_depth][node_depth] instead.
10
+
11
+ * Support for `CamelCase` methods has been dropped.
12
+
13
+ * The predicate methods beginning with `is_` or `has_` are now aliases to real
14
+ methods **without** these prefixes. For example, `Tree::TreeNode#is_root?` is
15
+ now aliased to `Tree::TreeNode#root?`. This is to comply with the Ruby
16
+ standard. The original prefixed method names should be considered as
17
+ deprecated and the corresponding non-prefixed method names should be used
18
+ instead. it is possible that the old prefixed method names might be removed in
19
+ the future.
20
+
21
+ * RubyTree now supports MRI Ruby versions `2.6.x`, `2.7.x`, and `3.0.x`.
22
+
23
+ * Explicit support for `rbx` Ruby has been removed (_might_ still work, but not
24
+ tested.)
25
+
26
+ * RubyTree now uses [Github Workflows][workflow] for its CI pipeline.
27
+
28
+ * RubyTree now allows proper sub-classing of [Tree::TreeNode][TreeNode]. Thanks to
29
+ [jack12816][] for this.
30
+
31
+ * RubyTree now correctly handles creating detached copies of un-clonable objects
32
+ such as `:symbol`, `true|false`, etc. Thanks to [igneus][] for this.
33
+
34
+ ### 1.0.2 / 2021-12-29
35
+
36
+ * A minor maintenance version to address a minor but annoying warning for
37
+ circular dependencies.
38
+
39
+ ### 1.0.1 / 2021-12-29
40
+
41
+ * Updated all dependencies (dev and runtime) to their _latest_ stable
42
+ releases. This is to primarily address potential CVE exposures from upstream
43
+ libraries.
44
+
45
+ * Updated the supported version of MRI Ruby to `2.7.x`.
46
+
47
+ * Minor code cleanup using the safe automated corrections using `rubocop`.
48
+
49
+ * Note that this was never released to <https://rubygems.org>.
50
+
51
+ ### 1.0.0 / 2017-12-21
52
+
53
+ * Finally! Released version `1.0.0`.
54
+
55
+ * This is a maintenance release that updates the dependent gem versions and
56
+ addresses a few security vulnerabilities for older upstream gem packages.
57
+
58
+ * With this release, Rubytree now requires Ruby version `2.2.x` or higher.
59
+
60
+ ### 0.9.7 / 2015-12-31
61
+
62
+ * Released `0.9.6`. This is a minor bug-fix release.
63
+
64
+ * This release allows the [Tree::TreeNode#print_tree][print_tree] method to be
65
+ used on non-root nodes. Thanks to [Ojab][Ojab].
66
+
67
+ * The spaceship operator (`<=>`) now returns `nil` if the object being compared
68
+ to is _itself_ `nil` or not another [Tree::TreeNode][TreeNode].
69
+
70
+ ### 0.9.6 / 2015-05-30
71
+
72
+ * Released `0.9.6`, which is identical to `0.9.5`, _except_ for an update to the
73
+ gem's release date.
74
+
75
+ ### 0.9.5 / 2015-05-30
76
+
77
+ * Released `0.9.5`.
78
+
79
+ ### 0.9.5pre7 / 2015-05-30
80
+
81
+ * Added new methods for getting the path of a node as a `string`. These have
82
+ been added as a new `mixin`
83
+ [Tree::Utils::TreePathHandler][TreePathHandler]. Thanks to [Marco][].
84
+
85
+ ### 0.9.5pre5 / 2015-01-01
86
+
87
+ * Fixed [bug-32][] and enabled _move_ semantics on the [Tree::TreeNode#add][add]
88
+ method, so that if a child is added, which has an existing parent, then it
89
+ will be _removed_ from its old parent, prior to being added to the new location.
90
+
91
+ ### 0.9.5pre4 / 2014-12-17
92
+
93
+ * Added performance improvements to [Tree::TreeNode#is_root?][is_root] and
94
+ [Tree::Utils::TreeMetricsHandler#node_depth][mnode_depth]. Thanks to [Aidan Steel][Aidan].
95
+
96
+ ### 0.9.5pre3 / 2014-12-16
97
+
98
+ * Minor fix to correct the release date. This release is otherwise identical
99
+ to `0.9.5pre2`.
100
+
101
+ ### 0.9.5pre2 / 2014-12-16
102
+
103
+ * Added [Tree::TreeNode#rename][rename] and
104
+ [Tree::TreeNode#rename_child][rename_child] methods by merging in code from
105
+ [pr-35][]. Thanks to [Evan Sharp][Evan].
106
+
107
+ ### 0.9.5pre / 2014-11-01
108
+
109
+ * Fixed [bug-13][] with the patch provided by [Jen Hamon][jhamon].
110
+
111
+ * Fixed a bug in [Tree::TreeNode#print_tree][print_tree] with the patch provided
112
+ by [Evan Sharp][Evan].
113
+
114
+ * Fixed [bug-31][], which was causing incorrect behavior in
115
+ [Tree::TreeNode#postordered_each][postordered_each] and
116
+ [Tree::TreeNode#breadth_each][breadth_each] methods when a block was not
117
+ provided.
118
+
119
+ ### 0.9.4 / 2014-07-04
120
+
121
+ * Changed all references to <http://rubyforge.org>.
122
+
123
+ ### 0.9.3 / 2014-02-01
124
+
125
+ * Fixed the issue with globally unique node names. See [bug-24][].
126
+
127
+ ### 0.9.2 / 2014-01-03
128
+
129
+ * Yanked `R0.9.1` as the `History.rdoc` file was not updated.
130
+
131
+ * Updated the gem description.
132
+
133
+ * Changed the [travis-ci][] build to include `coverall` support.
134
+
135
+ ### 0.9.1 / 2014-01-03
136
+
137
+ * Updated the gem description.
138
+
139
+ * Incorporated code coverage using the `coverall` gem.
140
+
141
+ ### 0.9.0 / 2014-01-02
142
+
143
+ This is a feature and bug-fix release.
144
+
145
+ #### The Features
146
+
147
+ * Rubytree now supports `postordered` traversal via the
148
+ [Tree::TreeNode#postordered_each][postordered_each] method. Thanks to [Paul de
149
+ Courcel][Paul] for this.
150
+
151
+ * The Binary tree now supports `inorder` traversal via the
152
+ [Tree::BinaryTreeNode#inordered_each][inordered_each] method.
153
+
154
+ * Ability to merge in another tree at a chosen node, or merge two trees to
155
+ create a third tree. Thanks to [Darren Oakley][Darren] for this [pr-2][].
156
+
157
+ * RubyTree now mixes in the [Comparable][] module.
158
+
159
+ #### The Fixes
160
+
161
+ * (_Partial_) fix for preventing cyclic graphs in the tree.
162
+
163
+ * Refactored the [Tree::TreeNode#each][each] method to prevent stack errors while
164
+ navigating deep trees ([bug-12][]).
165
+
166
+ * Check to ensure that the added node's name is unique to the destination tree
167
+ ([pr-9][]). Thanks to [Youssef Rebahi-Gilbert][Youssef] for the idea and the
168
+ initial code.
169
+
170
+ * Fix for [bug-23][], where the tree traversal on a binary tree would fail if
171
+ the _left_ child was `nil`.
172
+
173
+ * The following traversal methods now correctly return an
174
+ [Enumerator][] as the return value when no block is given, and
175
+ return the _receiver node_ if a block was provided. This is consistent with
176
+ how the standard Ruby collections work.
177
+
178
+ * [Tree::TreeNode#each][each],
179
+ * [Tree::TreeNode#preordered_each][preordered_each],
180
+ * [Tree::TreeNode#postordered_each][postordered_each] and
181
+ * [Tree::TreeNode#breadth_each][breadth_each].
182
+
183
+ #### Other Changes
184
+
185
+ * Structural changes in the code to refactor out the non-core functions into
186
+ modules (mostly by extracting out non-core code as `mixins`).
187
+
188
+ * Significant refactoring of the documentation. The [Yard][] tags are now
189
+ extensively used.
190
+
191
+ * Basic support built-in for including example code in the gem. This will be
192
+ fully expanded in the next release.
193
+
194
+ * Various changes to the [Bundler][], [travis-ci][] and other `Rakefile`
195
+ changes.
196
+
197
+ ### 0.8.3 / 2012-08-21
198
+
199
+ This is a primarily a bug-fix release, with some packaging changes.
200
+
201
+ * Have removed the dependency on [Hoe][]. The build is now based on vanilla
202
+ [gemspec][].
203
+
204
+ * Included support for [gem-testers][].
205
+
206
+ * Included support for [Bundler][].
207
+
208
+ * Implemented the [Tree::Utils::JSONConverter#as_json][as_json] method to
209
+ support Rails' `JSON` encoding, by pulling in the changes from [Eric Cline][Eric].
210
+
211
+ * Partial fix for [bug-5][]. This is to prevent infinite looping if an existing
212
+ node is added again elsewhere in the tree.
213
+
214
+ * Fixed the issue with using `integers` as node names, and its interaction
215
+ with the `Tree::TreeNode#[]` access method as documented in [bug-6][].
216
+
217
+ * Clarified the need to have _unique_ node names in the documentation ([bug-7][]).
218
+
219
+ * Fixed [Tree::TreeNode#siblings][siblings] method to return an _empty_ array
220
+ for the root node as well (it returned `nil` earlier).
221
+
222
+ ### 0.8.2 / 2011-12-15
223
+
224
+ * Minor bug-fix release to address [bug-1215][] ([Tree::TreeNode#to_s][to_s]
225
+ breaks if `@content` or `@parent.name` is not a string).
226
+
227
+ ### 0.8.1 / 2010-10-02
228
+
229
+ * This is the public release of `R0.8.0`, with additional bug-fixes. Note that
230
+ `R0.8.0` will **not be** released separately as a publicly available
231
+ Rubygem. All changes as listed for `R0.8.0` are available in this release.
232
+
233
+ * The main change in `R0.8.0`/`R0.8.1` is conversion of all `CamelCase` method
234
+ names to `snake_case`. The old `CamelCase` method names will _still_ work (to
235
+ ensure backwards compatibility), but will also display a warning.
236
+
237
+ * The [Tree::TreeNode#add][add] method now accepts an _optional_ child insertion
238
+ point.
239
+
240
+ * The sub-tree from the current node can now be cloned in its _entirety_ using
241
+ the [Tree::TreeNode#detached_subtree_copy][detached_subtree_copy] method.
242
+
243
+ * A major bug-fix for [bug-28613][] which impacted the `Binarytree`
244
+ implementation.
245
+
246
+ * Minor code re-factoring driven by the code-smell checks using
247
+ [reek][].
248
+
249
+ * Inclusion of the `reek` code-smell detection tool in the `Rakefile`.
250
+
251
+ ### 0.8.0 / 2010-05-04
252
+
253
+ * Updated the [Tree::TreeNode#add][add] method to allow the optional
254
+ specification of an insertion position in the child array.
255
+
256
+ * Added a new method
257
+ [Tree::TreeNode#detached_subtree_copy][detached_subtree_copy] to allow cloning
258
+ the entire tree (this method is also aliased as `dup`).
259
+
260
+ * Converted all `CamelCase` method names to the canonical `ruby_method_names`
261
+ (underscore separated). The `CamelCase` methods _can still_ be invoked, but
262
+ will throw a [Deprecated Warning][dep-warning]. The support for old
263
+ `CamelCase` methods **will** go away some time in the future, so the user is
264
+ advised to convert all current method invocations to the new names.
265
+
266
+ ### 0.7.0 / 2010-05-03
267
+
268
+ * Added new methods to report the degree-statistics of a node.
269
+
270
+ * Added a convenience method alias [Tree::TreeNode#level][level] to `nodeDepth`.
271
+
272
+ * Converted the exceptions thrown on invalid arguments to [ArgumentError][]
273
+ instead of [RuntimeError][].
274
+
275
+ * Converted the documentation to [Yard][] format.
276
+
277
+ * Added new methods for converting to/from [JSON][] format. Thanks to Dirk
278
+ [Breuer][] for this [fork](http://github.com/galaxycats/).
279
+
280
+ * Added a separate [API-CHANGES.md](file:API-CHANGES.md) documentation file.
281
+
282
+ * Added fixes for root related edge conditions to the:
283
+
284
+ * [Tree::TreeNode#is_only_child?][is_only_child],
285
+ * [Tree::TreeNode#next_sibling][next_sibling],
286
+ * [Tree::TreeNode#previous_sibling][previous_sibling] and
287
+ * [Tree::TreeNode#remove!][remove] methods.
288
+
289
+ * Removed the `ChangeLog` file as this can now be generated from the git logs.
290
+
291
+ * Other minor code cleanup.
292
+
293
+ ### 0.6.2 / 2010-01-30
294
+
295
+ * Updated the documentation.
296
+
297
+ ### 0.6.1 / 2010-01-04
298
+
299
+ * Changed the hard-dependency on the [structured_warnings][] gem to a
300
+ _soft-dependency_ - which lets `RubyTree` still work if this gem is not
301
+ available. The rationale for this is that we _should not_ require the user to
302
+ install a separate library just for _one_ edge-case function (in this case, to
303
+ indicate a deprecated method). However, if the library *is* available on the
304
+ user's system, then it **will** get used.
305
+
306
+ ### 0.6.0 / 2010-01-03
307
+
308
+ * Fixed [bug-22535][] where the `Tree::TreeNode#depth` method was actually
309
+ returning `height+1` (**not** the `depth`).
310
+
311
+ * Marked the `Tree::TreeNode#depth` method as **deprecated** (and introduced the
312
+ run-time dependency on the [structured-warnings][] gem).
313
+
314
+ ### 0.5.3 / 2009-12-31
315
+
316
+ * Cleanup of the build system to exclusively use [Hoe][].
317
+ * Modifications and reformatting to the documentation.
318
+ * No user visible changes.
319
+
320
+ ### 0.5.2 / 2007-12-21
321
+
322
+ * Added more test cases and enabled [ZenTest][] compatibility for the test case
323
+ names.
324
+
325
+ ### 0.5.1 / 2007-12-20
326
+
327
+ * Minor code refactoring.
328
+
329
+ ### 0.5.0 / 2007-12-18
330
+
331
+ * Fixed the marshalling code to correctly handle non-string content.
332
+
333
+ ### 0.4.3 / 2007-10-09
334
+
335
+ * Changes to the build mechanism (now uses [Hoe]).
336
+
337
+ ### 0.4.2 / 2007-10-01
338
+
339
+ * Minor code refactoring. Changes in the `Rakefile`.
340
+
341
+ [bug-5]: https://github.com/evolve75/RubyTree/issues/5
342
+ [bug-6]: https://github.com/evolve75/RubyTree/issues/6
343
+ [bug-7]: https://github.com/evolve75/RubyTree/issues/7
344
+ [bug-12]: https://github.com/evolve75/RubyTree/issues/12
345
+ [bug-13]: https://github.com/evolve75/RubyTree/issues/13
346
+ [bug-23]: https://github.com/evolve75/RubyTree/issues/23
347
+ [bug-24]: https://github.com/evolve75/RubyTree/issues/24
348
+ [bug-31]: https://github.com/evolve75/RubyTree/issues/31
349
+ [bug-32]: https://github.com/evolve75/RubyTree/issues/32
350
+ [bug-1215]: http://rubyforge.org/tracker/index.php?func=detail&aid=1215&group_id=1215&atid=4793
351
+ [bug-28613]: http://rubyforge.org/tracker/index.php?func=detail&aid=28613&group_id=1215&atid=4793
352
+ [bug-22535]: http://rubyforge.org/tracker/index.php?func=detail&aid=22535&group_id=1215&atid=4793
353
+
354
+ [pr-2]: https://github.com/evolve75/RubyTree/pull/2
355
+ [pr-9]: https://github.com/evolve75/RubyTree/pull/9
356
+ [pr-35]: https://github.com/evolve75/RubyTree/pull/35
357
+
358
+ [ArgumentError]: http://www.ruby-doc.org/core-2.0.0/ArgumentError.html
359
+ [Bundler]: https://bundler.io
360
+ [Comparable]: http://ruby-doc.org/core-1.8.7/Comparable.html
361
+ [Enumerator]: http://ruby-doc.org/core-1.8.7/Enumerable.html
362
+ [Hoe]: http://www.zenspider.com/projects/hoe.html
363
+ [JSON]: http://www.json.org
364
+ [RuntimeError]: http://www.ruby-doc.org/core-2.0.0/RuntimeError.html
365
+ [Yard]: http://yardoc.org
366
+ [ZenTest]: https://github.com/seattlerb/zentest
367
+ [dep-warning]: http://rug-b.rubyforge.org/structured_warnings/rdoc/
368
+ [gem-testers]: https://test.rubygems.org/
369
+ [gemspec]: https://guides.rubygems.org/specification-reference/
370
+ [reek]: https://github.com/troessner/reek
371
+ [structured-warnings]: http://github.com/schmidt/structured_warnings
372
+ [travis-ci]: https://travis-ci.org
373
+ [workflow]: https://docs.github.com/en/actions/using-workflows
374
+
375
+ [Aidan]: https://github.com/aidansteele
376
+ [Breuer]: http://github.com/railsbros-dirk
377
+ [Darren]: https://github.com/dazoakley
378
+ [Eric]: https://github.com/escline
379
+ [Evan]: https://github.com/packetmonkey
380
+ [Marco]: https://github.com/MZic
381
+ [Ojab]: https://github.com/ojab
382
+ [Paul]: https://github.com/pdecourcel
383
+ [Youssef]: https://github.com/ysf
384
+ [igneus]: https://github.com/igneus
385
+ [jack12816]: https://github.com/jack12816
386
+ [jhamon]: https://www.github.com/jhamon
387
+ [jmortlock]: https://github.com/jmortlock
388
+
389
+ [TreeNode]: rdoc-ref:Tree::TreeNode
390
+ [TreePathHandler]: Tree::Utils::TreePathHandler
391
+ [add]: rdoc-ref:Tree::TreeNode#add
392
+ [as_json]: rdoc-ref:Tree::Utils::JSONConverter#as_json
393
+ [breadth_each]: rdoc-ref:Tree::TreeNode#breadth_each
394
+ [detached_subtree_copy]: rdoc-ref:Tree::TreeNode#detached_subtree_copy
395
+ [each]: rdoc-ref:Tree::TreeNode#each
396
+ [inordered_each]: rdoc-ref:Tree::BinaryTreeNode#inordered_each
397
+ [is_only_child]: rdoc-ref:Tree::TreeNode#is_only_child?
398
+ [is_root]: rdoc-ref:Tree::TreeNode#is_root?
399
+ [level]: rdoc-ref:Tree::TreeNode#level
400
+ [mnode_depth]: rdoc-ref:Tree::Utils::TreeMetricsHandler#node_depth
401
+ [next_sibling]: rdoc-ref:Tree::TreeNode#next_sibling
402
+ [node_depth]: rdoc-ref:Tree::TreeNode#node_depth
403
+ [postordered_each]: rdoc-ref:Tree::TreeNode#postordered_each
404
+ [previous_sibling]: rdoc-ref:Tree::TreeNode#previous_sibling
405
+ [print_tree]: rdoc-ref:Tree::TreeNode#print_tree
406
+ [remove]: rdoc-ref:Tree::TreeNode#remove!
407
+ [rename]: rdoc-ref:Tree::TreeNode#rename
408
+ [rename_child]: rdoc-ref:Tree::TreeNode#rename_child
409
+ [siblings]: rdoc-ref:Tree::TreeNode#siblings
410
+ [to_s]: rdoc-ref:Tree::TreeNode#to_s
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [RubyTree][] is licensed under the [BSD][] license.
2
2
 
3
- Copyright (c) 2006-2021 Anupam Sengupta (<anupamsg@gmail.com>).
3
+ Copyright (c) 2006-2022 Anupam Sengupta (<anupamsg@gmail.com>).
4
4
 
5
5
  All rights reserved.
6
6
 
data/README.md CHANGED
@@ -1,13 +1,6 @@
1
- <!--
2
- README.md
3
-
4
- Copyright (C) 2006-2017, 2020 Anupam Sengupta (anupamsg@gmail.com)
5
-
6
- -->
7
1
  # **RubyTree** #
8
2
 
9
3
  [![Gem Version](https://badge.fury.io/rb/rubytree.png)](http://badge.fury.io/rb/rubytree)
10
- [![Travis Build Status](https://secure.travis-ci.org/evolve75/RubyTree.png)](http://travis-ci.org/evolve75/rubytree)
11
4
  [![Code Climate](https://codeclimate.com/github/evolve75/RubyTree.png)](https://codeclimate.com/github/evolve75/RubyTree)
12
5
  [![Coverage Status](https://coveralls.io/repos/evolve75/RubyTree/badge.png)](https://coveralls.io/r/evolve75/RubyTree)
13
6
 
@@ -39,9 +32,9 @@ The home page for **RubyTree** is at [rubytree.anupamsg.me][rt_site].
39
32
 
40
33
  ## WHAT'S NEW: ##
41
34
 
42
- See [History](./History.rdoc) for the detailed Changelog.
35
+ See [History](./History.md) for the detailed Changelog.
43
36
 
44
- See [API-CHANGES](./API-CHANGES.rdoc) for the detailed description of
37
+ See [API-CHANGES](./API-CHANGES.md) for the detailed description of
45
38
  API level changes.
46
39
 
47
40
  ## GETTING STARTED: ##
@@ -54,9 +47,7 @@ See the [API][rt_doc] documentation for more details.
54
47
  #
55
48
  # example_basic.rb:: Basic usage of the tree library.
56
49
  #
57
- # Author: Anupam Sengupta
58
- # Time-stamp: <2013-12-28 12:14:20 anupam>
59
- # Copyright (C) 2013 Anupam Sengupta <anupamsg@gmail.com>
50
+ # Copyright (C) 2013-2022 Anupam Sengupta <anupamsg@gmail.com>
60
51
  #
61
52
  # The following example implements this tree structure:
62
53
  #
@@ -119,19 +110,21 @@ This example can also be found at
119
110
 
120
111
  ## REQUIREMENTS: ##
121
112
 
122
- * [Ruby][] 2.2.x, 2.3.x or 2.4.x
113
+ * [Ruby][] 2.6.x and above.
123
114
 
124
115
 
125
116
  * Run-time Dependencies:
126
- * [structured_warnings][]
117
+
127
118
  * [JSON][] for converting to/from the JSON format
128
119
 
129
120
 
130
121
  * Development dependencies (not required for installing the gem):
122
+
131
123
  * [Bundler][] for creating the stable build environment
132
124
  * [Rake][] for building the package
133
125
  * [Yard][] for the documentation
134
126
  * [RSpec][] for additional Ruby Spec test files
127
+ * [Rubocop][] for linting the code
135
128
 
136
129
  ## INSTALL: ##
137
130
 
@@ -144,7 +137,7 @@ have super-user privileges (root/sudo) to successfully install the gem.
144
137
 
145
138
  ## DOCUMENTATION: ##
146
139
 
147
- The primary class **RubyTree** is {Tree::TreeNode}. See the class
140
+ The primary class **RubyTree** is [Tree::TreeNode][TreeNode]. See the class
148
141
  documentation for an example of using the library.
149
142
 
150
143
  If the *ri* documentation was generated during install, you can use this
@@ -180,11 +173,11 @@ The git repository is available at [github.com/evolve75/RubyTree][rt@github].
180
173
 
181
174
  For cloning the git repository, use one of the following commands:
182
175
 
183
- $ git clone git://github.com/evolve75/RubyTree.git
176
+ $ git clone git://github.com/evolve75/RubyTree.git # using ssh
184
177
 
185
178
  or
186
179
 
187
- $ git clone http://github.com/evolve75/RubyTree.git
180
+ $ git clone https://github.com/evolve75/RubyTree.git # using https
188
181
 
189
182
  ### Setting up the Development Environment ###
190
183
 
@@ -195,9 +188,9 @@ After checking out the source, run:
195
188
 
196
189
  $ gem install bundler
197
190
  $ bundle install
198
- $ rake test
199
- $ rake doc:yard
200
- $ rake gem:package
191
+ $ bundle exec rake test:all
192
+ $ bundle exec rake doc:yard
193
+ $ bundle exec rake gem:package
201
194
 
202
195
  These steps will install any missing dependencies, run the tests/specs,
203
196
  generate the documentation, and finally generate the gem file.
@@ -225,14 +218,18 @@ A big thanks to the following contributors for helping improve **RubyTree**:
225
218
  to `is_root?` and `node_depth`.
226
219
  10. [Marco Ziccadi](https://github.com/MZic) for adding the `path_as_string` and
227
220
  `path_as_array` methods.
221
+ 11. [John Mortlock](https://github.com/jmortlock) for significant modernization
222
+ of the library code and addition of Github `workflows`.
223
+ 12. [Hermann Mayer](https://github.com/jack12816) for adding support for
224
+ specialized tree nodes (sub-classes of `Tree::TreeNode`).
225
+ 13. [Jakub Pavlik](https://github.com/igneus) for fixing the creation of
226
+ detached copies of unclonable objects such as `:symbol`, `true|false`, etc.
228
227
 
229
228
  ## LICENSE: ##
230
229
 
231
230
  **RubyTree** is licensed under the terms of the [BSD][] license. See
232
231
  [LICENSE.md](./LICENSE.md) for details.
233
232
 
234
- {include:file:LICENSE.md}
235
-
236
233
  __ _ _
237
234
  /__\_ _| |__ _ _| |_ _ __ ___ ___
238
235
  / \// | | | '_ \| | | | __| '__/ _ \/ _ \
@@ -261,8 +258,8 @@ A big thanks to the following contributors for helping improve **RubyTree**:
261
258
  [rt_doc]: http://rubytree.anupamsg.me/rdoc "RubyTree Documentation"
262
259
  [rt_gem]: http://rubygems.org/gems/rubytree "RubyTree Gem"
263
260
  [rt_site]: http://rubytree.anupamsg.me "RubyTree Site"
264
- [structured_warnings]: http://github.com/schmidt/structured_warnings "structured_warnings"
265
261
  [tree_data_structure]: http://en.wikipedia.org/wiki/Tree_data_structure "Tree Data Structure"
266
262
  [RSpec]: https://relishapp.com/rspec/
263
+ [Rubocop]: https://rubocop.org
267
264
 
268
- [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/evolve75/rubytree/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
265
+ [TreeNode]: rdoc-ref:Tree::TreeNode
data/Rakefile CHANGED
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # Rakefile - This file is part of the RubyTree package.
4
4
  #
5
- # Copyright (c) 2006-2021 Anupam Sengupta
5
+ # Copyright (c) 2006-2022 Anupam Sengupta
6
6
  #
7
7
  # All rights reserved.
8
8
  #
@@ -31,9 +31,13 @@
31
31
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32
32
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
33
  #
34
+ #
35
+ # frozen_string_literal: true
34
36
 
35
37
  require 'rubygems'
36
- GEM_SPEC = eval(File.read('./rubytree.gemspec')) # Load the gemspec.
38
+
39
+ # @todo: Check if Bundler needs to be `require`d.
40
+ GEM_SPEC = Bundler.load_gemspec(File.join(__dir__, 'rubytree.gemspec'))
37
41
 
38
42
  PKG_NAME = GEM_SPEC.name
39
43
  PKG_VER = GEM_SPEC.version
@@ -55,6 +59,7 @@ task :version do
55
59
  end
56
60
 
57
61
  require 'rake/clean'
62
+ desc 'Remove all generated files.'
58
63
  task clean: 'gem:clobber_package'
59
64
  CLEAN.include('coverage')
60
65
  task clobber: [:clean, 'doc:clobber_rdoc', 'doc:clobber_yard']
@@ -70,8 +75,8 @@ namespace :doc do # ................................ Documentation
70
75
  require 'rdoc/task'
71
76
  Rake::RDocTask.new do |rdoc|
72
77
  rdoc.rdoc_dir = 'rdoc'
73
- rdoc.title = "#{PKG_NAME}-#{PKG_VER}"
74
- rdoc.main = 'README.rdoc'
78
+ rdoc.title = "RubyTree Documenation: #{PKG_NAME}-#{PKG_VER}"
79
+ rdoc.main = 'README.md'
75
80
  rdoc.rdoc_files.include(GEM_SPEC.extra_rdoc_files)
76
81
  rdoc.rdoc_files.include('./lib/**/*.rb')
77
82
  end
@@ -95,10 +100,14 @@ namespace :doc do # ................................ Documentation
95
100
  end
96
101
  end
97
102
 
98
- desc 'Run the test cases'
99
- task test: 'test:unit'
103
+ desc 'Run the unit tests'
104
+ task test: %w[test:unit]
105
+
106
+ # ................................ Test related
107
+ namespace :test do
108
+ desc 'Run all the tests'
109
+ task all: %w[test:unit test:spec test:examples]
100
110
 
101
- namespace :test do # ................................ Test related
102
111
  require 'rake/testtask'
103
112
  Rake::TestTask.new(:unit) do |test|
104
113
  test.libs << 'lib' << 'test'
@@ -106,6 +115,18 @@ namespace :test do # ................................ Test related
106
115
  test.verbose = false
107
116
  end
108
117
 
118
+ # ................................ rspec tests
119
+ begin
120
+ require 'rspec/core/rake_task'
121
+
122
+ RSpec::Core::RakeTask.new(:spec) do |t|
123
+ t.fail_on_error = false
124
+ t.rspec_opts = ['--color', '--format doc']
125
+ end
126
+ rescue LoadError
127
+ # Cannot load rspec.
128
+ end
129
+
109
130
  desc 'Run the examples'
110
131
  Rake::TestTask.new(:examples) do |example|
111
132
  example.libs << 'lib' << 'examples'
@@ -132,18 +153,8 @@ namespace :test do # ................................ Test related
132
153
  end
133
154
  end
134
155
 
135
- begin # ................................ rspec tests
136
- require 'rspec/core/rake_task'
137
-
138
- RSpec::Core::RakeTask.new(:spec) do |t|
139
- t.fail_on_error = false
140
- t.rspec_opts = ['--color', '--format doc']
141
- end
142
- rescue LoadError
143
- # Cannot load rspec.
144
- end
145
-
146
- namespace :tag do # ................................ Emacs Tags
156
+ # ................................ Emacs Tags
157
+ namespace :tag do
147
158
  require 'rtagstask'
148
159
  RTagsTask.new(:tags) do |rd|
149
160
  rd.vi = false
@@ -153,7 +164,8 @@ rescue LoadError
153
164
  # Oh well. Can't have everything.
154
165
  end
155
166
 
156
- namespace :gem do # ................................ Gem related
167
+ # ................................ Gem related
168
+ namespace :gem do
157
169
  require 'rubygems/package_task'
158
170
  Gem::PackageTask.new(GEM_SPEC) do |pkg|
159
171
  pkg.need_zip = true
@@ -165,3 +177,12 @@ namespace :gem do # ................................ Gem related
165
177
  sh "gem push pkg/#{GEM_NAME}"
166
178
  end
167
179
  end
180
+
181
+ # ................................ Ruby linting
182
+ require 'rubocop/rake_task'
183
+
184
+ RuboCop::RakeTask.new(:rubocop) do |t|
185
+ t.options = ['--display-cop-names']
186
+ t.requires << 'rubocop-rake'
187
+ t.requires << 'rubocop-rspec'
188
+ end