rubytree 0.9.5pre4 → 0.9.5pre5

Sign up to get free protection for your applications and to get access to all the features.
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