# @markup rdoc
This file documents various API level changes that have been made to the RubyTree package.
Note: API level changes are expected to reduce dramatically after the 1.x release. In most cases, an alternative will be provided to ensure relatively smooth transition to the new APIs.
-
The validation for unique node names has changed in the {Tree::TreeNode#add} method. RubyTree no longer enforces globally unique names. The node-names need to be unique only between the sibling nodes.
-
New post-ordered traversal via the {Tree::TreeNode#postordered_each} method.
-
The Binary Tree implementation now supports in-order traversal via the {Tree::BinaryTreeNode#inordered_each} method.
-
RubyTree now mixes in the {ruby-doc.org/core-1.8.7/Comparable.html Comparable} module.
-
The traversal methods ({Tree::TreeNode#each}, {Tree::TreeNode#preordered_each}, {Tree::TreeNode#postordered_each} and {Tree::TreeNode#breadth_each}) now correctly return an {ruby-doc.org/core-1.8.7/Enumerable.html Enumerator} as the return value when no block is given, and return the receiver node if a block was provided. This is consistent with how the standard Ruby collections work.
-
{Tree::TreeNode#siblings} will now return an empty array for the root node.
-
Added the ability to specify an optional insertion position in the {Tree::TreeNode#add} method. Idea and original code contributed by Dirk.
-
Added a new method {Tree::TreeNode#detached_subtree_copy} to allow cloning the entire tree. This method is also aliased to {Tree::TreeNode#dup}. Idea and original code contributed by Vincenzo Farruggia.
-
Converted all CamelCase method names to the canonical ruby_method_names (underscore separated). The CamelCase methods can still be invoked, but will throw a Deprecated warning.
-
Converted all exceptions thrown on invalid method arguments to from ‘RuntimeError’ to ‘ArgumentError’. This impacts the following methods:
-
{Tree::TreeNode#initialize}
-
{Tree::TreeNode#add}
-
{Tree::TreeNode#[]}
-
{Tree::BinaryTreeNode#add}
-
-
Added {Tree::Utils::TreeMetricsHandler#level Tree::TreeNode#level} as an alias for {Tree::Utils::TreeMetricsHandler#node_depth Tree::TreeNode#node_depth}
-
Added new methods {Tree::Utils::TreeMetricsHandler#in_degree Tree::TreeNode#in_degree} and {Tree::Utils::TreeMetricsHandler#out_degree Tree::TreeNode#out_degree} to report the node’s degree stats
-
{Tree::TreeNode#is_only_child?} now returns
true
for a root node. -
{Tree::TreeNode#next_sibling} and {Tree::TreeNode#previous_sibling} now return
nil
for a root node. -
{Tree::TreeNode#add} and {Tree::TreeNode#<<} now throw an ArgumentError exception if a
nil
node is passed as an argument. -
Added new methods {Tree::Utils::JSONConverter#to_json Tree::TreeNode#to_json} and {Tree::Utils::JSONConverter::ClassMethods#json_create Tree::TreeNode#json_create} to convert to/from the JSON format. Thanks to Dirk for this change.
-
Deprecated the {Tree::Utils::TreeMetricsHandler#depth} method as it was returning an incorrect depth value. Have introduced a new replacement method {Tree::Utils::TreeMetricsHandler#node_depth} which returns the correct result.
# Local Variables: # mode: rdoc # coding: utf-8-unix # End: