rubytree 0.9.5pre4 → 0.9.5pre5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a006133c7e37526b79f4256d041a29af0f34b04
4
- data.tar.gz: 88eae77ba40ffc4a7a4e1e84bad59f25c3de0f91
3
+ metadata.gz: 850e06171da2b8d2ce18e1c2a753940720fa995f
4
+ data.tar.gz: d135be3794997cded9a37f969270e007878371b3
5
5
  SHA512:
6
- metadata.gz: f951cea5ef06e9419b19e17d07c821e6b8c09dd57cd6eafe0e2cee60e9d1293ae645165f2f66e90a7577536fef3ed2e5f8d1441dca9cd934c4bf6816e8e245a0
7
- data.tar.gz: 5a6ae6fb1df04a15dbf11b8293a2e566482d0372af299b49c4c33778a50c1b2f159feb9606422ec1c539ca17594122fb954d08712cd01ce40c25f9cb06f0f7d1
6
+ metadata.gz: c4a868546b8c5e32d216ac7ea5614bff5edd440ce6ef9927b210962f1aa5690afe8b36e797d0a077db4a955b6e42485b0dd3a8da45e52fbbbba9fc1bb4e7c271
7
+ data.tar.gz: d4f1e908972b00e23a7d93722e7cd32c7b40750bbfc8604cd527764dc8fb84d0e7cff42aa29e25041ca49b39cc738a4fdfcb907f487d79a575efd4415e8cf9a7
@@ -9,6 +9,14 @@ Note: API level changes are expected to reduce dramatically after the 1.x
9
9
  release. In most cases, an alternative will be provided to ensure relatively
10
10
  smooth transition to the new APIs.
11
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
+
12
20
  == Release 0.9.3 Changes
13
21
 
14
22
  - The validation for unique node names has changed in the {Tree::TreeNode#add}
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubytree (0.9.5pre4)
4
+ rubytree (0.9.5pre5)
5
5
  json (~> 1.8)
6
6
  structured_warnings (~> 0.1)
7
7
 
@@ -23,7 +23,7 @@ GEM
23
23
  json (~> 1.4)
24
24
  rest-client (1.6.7)
25
25
  mime-types (>= 1.16)
26
- rtags (0.98)
26
+ rtags (0.97)
27
27
  rtagstask (0.0.4)
28
28
  rtags (> 0.0.0)
29
29
  simplecov (0.9.1)
@@ -2,6 +2,13 @@
2
2
 
3
3
  = History of Changes
4
4
 
5
+ === 0.9.5pre5 / 2015-01-01
6
+
7
+ * Fixed {issue 32}{https://github.com/evolve75/RubyTree/issues/32} and enabled
8
+ 'move' semantics on the {Tree::TreeNode#add} method, so that a child being
9
+ added, that has an existing parent, will be removed from its old parent, prior
10
+ to being added to the new location.
11
+
5
12
  === 0.9.5pre4 / 2014-12-17
6
13
 
7
14
  * Added performance improvements to {Tree::TreeNode#is_root?} and
data/TODO.org CHANGED
@@ -187,6 +187,8 @@
187
187
 
188
188
 
189
189
  * R0.9.5
190
+ ** DONE Fix [[Issue:32][Issue #32]] and enable move semantics on the TreeNode#add method. :ARCHIVE:
191
+ CLOSED: [2015-01-01 Thu 16:05]
190
192
  ** DONE Check the lazy initialization of =@node_depth= and changes in parent nodes :ARCHIVE:
191
193
  CLOSED: [2014-12-18 Thu 11:05]
192
194
  ** DONE Pull the performance improvements from Aidan [[Pull:37][#37]] :ARCHIVE:
@@ -235,6 +237,7 @@
235
237
  restructure the internals to make better use of memory.
236
238
  ** STARTED Convert all documentation to markdown mode.
237
239
  ** TODO Expand the examples section, and add supporting documentation
240
+
238
241
  * Unplanned / Not assigned to any release
239
242
  *** DONE [#A] Migrate the website and references from http://rubyforge.org/ :ARCHIVE:
240
243
  CLOSED: [2014-07-04 Fri 22:18]
@@ -9,7 +9,7 @@
9
9
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
10
10
  #
11
11
 
12
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Anupam Sengupta
12
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Anupam Sengupta
13
13
  #
14
14
  # All rights reserved.
15
15
  #
@@ -347,6 +347,12 @@ module Tree
347
347
  #
348
348
  # This is to prevent +nil+ nodes being created as children if a non-existant position is used.
349
349
  #
350
+ # If the new node being added has an existing parent node, then it will be
351
+ # removed from this pre-existing parent prior to being added as a child to
352
+ # this node. I.e., the child node will effectively be moved from its old
353
+ # parent to this node. In this situation, after the operation is complete,
354
+ # the node will no longer exist as a child for its old parent.
355
+ #
350
356
  # @param [Tree::TreeNode] child The child node to add.
351
357
  # @param [optional, Number] at_index The optional position where the node is to be inserted.
352
358
  #
@@ -365,6 +371,8 @@ module Tree
365
371
  # Lazy mans unique test, won't test if children of child are unique in this tree too.
366
372
  raise "Child #{child.name} already added!" if @children_hash.include?(child.name)
367
373
 
374
+ child.parent.remove! child if child.parent # Detach from the old parent
375
+
368
376
  if insertion_range.include?(at_index)
369
377
  @children.insert(at_index, child)
370
378
  else
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
6
6
  #
7
- # Copyright (c) 2012, 2013, 2014 Anupam Sengupta
7
+ # Copyright (c) 2012, 2013, 2014, 2015 Anupam Sengupta
8
8
  #
9
9
  # All rights reserved.
10
10
  #
@@ -37,5 +37,5 @@
37
37
  #
38
38
  module Tree
39
39
  # Rubytree Package Version
40
- VERSION = '0.9.5pre4'
40
+ VERSION = '0.9.5pre5'
41
41
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # test_tree.rb - This file is part of the RubyTree package.
4
4
  #
5
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Anupam Sengupta
5
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Anupam Sengupta
6
6
  #
7
7
  # All rights reserved.
8
8
  #
@@ -512,6 +512,7 @@ module TestTree
512
512
 
513
513
  # Test the addition of a nil node.
514
514
  assert_raise(ArgumentError) { @root.add(nil) }
515
+
515
516
  end
516
517
 
517
518
  # Test the addition of a duplicate node (duplicate being defined as a node with the same name).
@@ -1615,28 +1616,45 @@ module TestTree
1615
1616
  root_node = Tree::TreeNode.new("OLDROOT")
1616
1617
 
1617
1618
  child_node = Tree::TreeNode.new("CHILD")
1618
- assert_equal(child_node.node_depth, 0)
1619
+ assert_equal(0, child_node.node_depth)
1619
1620
 
1620
1621
  root_node << child_node
1621
1622
  assert_equal(root_node["CHILD"].name, "CHILD")
1622
- assert_equal(root_node.node_depth, 0)
1623
- assert_equal(child_node.node_depth, 1)
1623
+ assert_equal(0, root_node.node_depth)
1624
+ assert_equal(1, child_node.node_depth)
1624
1625
 
1625
1626
  grandchild_node = Tree::TreeNode.new("GRANDCHILD")
1626
1627
  child_node << grandchild_node
1627
1628
  assert_equal(root_node["CHILD"]["GRANDCHILD"].name, "GRANDCHILD")
1628
- assert_equal(root_node.node_depth, 0)
1629
- assert_equal(child_node.node_depth, 1)
1630
- assert_equal(grandchild_node.node_depth, 2)
1629
+ assert_equal(0, root_node.node_depth)
1630
+ assert_equal(1, child_node.node_depth)
1631
+ assert_equal(2, grandchild_node.node_depth)
1631
1632
 
1632
1633
  root2_node = Tree::TreeNode.new("NEWROOT")
1633
- assert_equal(root2_node.node_depth, 0)
1634
+ assert_equal(0, root2_node.node_depth)
1634
1635
 
1635
1636
  # Move the grand child to a new root.
1636
1637
  root2_node << grandchild_node
1637
1638
  assert_equal(root2_node["GRANDCHILD"].name, "GRANDCHILD")
1638
- assert_equal(grandchild_node.parent, root2_node)
1639
- assert_equal(grandchild_node.node_depth, 1)
1639
+ assert_equal(root2_node, grandchild_node.parent)
1640
+ assert_equal(1, grandchild_node.node_depth)
1641
+
1642
+ # Test the move semantics for addition of an existing child node
1643
+ root1 = Tree::TreeNode.new("1")
1644
+ root1 << Tree::TreeNode.new("2") << Tree::TreeNode.new("4")
1645
+ root1 << Tree::TreeNode.new("3") << Tree::TreeNode.new("5")
1646
+ root1["3"] << Tree::TreeNode.new("6")
1647
+ assert_equal(root1["3"]["6"].name, "6")
1648
+
1649
+ # Create a new tree
1650
+ root2 = root1.dup
1651
+ assert_equal(root1, root2)
1652
+ assert_not_same(root1, root2)
1653
+
1654
+ # Now 'move' the "4" node to the new tree. This should have 'dup' semantics.
1655
+ root2["3"] << root1["2"]["4"]
1656
+ assert_equal("3", root2["3"]["4"].parent.name) # This is on the new tree
1657
+ assert_nil(root1["2"]["4"]) # This is on the old tree
1640
1658
 
1641
1659
  end
1642
1660
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubytree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5pre4
4
+ version: 0.9.5pre5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anupam Sengupta