rubytree 0.9.3pre → 0.9.3

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: 3dd9b9757055ea2f6896146448b13996c7e099cf
4
- data.tar.gz: 96f4a3cce558178889c67e64984778ad2192f42f
3
+ metadata.gz: 2696640cc7392fcb9a3d373ad067d2e58c01d0a0
4
+ data.tar.gz: 7ebb55c5a07049ff8ee0faa621e198d9e30354aa
5
5
  SHA512:
6
- metadata.gz: 32066b906cf88e1cba0ebc79c3b824e2f074ca884d90ddbbff76ee128ecc9f13c584fa362231f58c81ffc733574a4a780700e3d7b458b95476fe81920f17a71f
7
- data.tar.gz: 7d1eef090b839f6c8a3335d0fc5b8820aea6a614d2c7e2f6de3b784dd318f39fe99ef6bdec5d7105cb4c17c1c403bf69524b1f7411ee7f8d07aba843dc211a34
6
+ metadata.gz: 84b245a63875a6e70bf3e63a24717430981eaf7c6c2c7671e1ef5e46b95e82aeb9f5890ab85a48bc560ab023062c8cc8b0ed840f9850ba0bf1b627f12705cc02
7
+ data.tar.gz: f30e25b3626ec5f44214711b4d7b9392469d39410e6c399aca0b94bbd961840a33584c51b553f2cd7e5534af1b8602edf5a1c68d5fff031af41d2e0977ceef3f
@@ -9,6 +9,12 @@ 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.3 Changes
13
+
14
+ - The validation for unique node names has changed in the {Tree::TreeNode#add}
15
+ method. RubyTree no longer enforces globally unique names. The node-names need
16
+ to be unique only between the sibling nodes.
17
+
12
18
  == Release 0.9.0 Changes
13
19
 
14
20
  - New post-ordered traversal via the {Tree::TreeNode#postordered_each} method.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubytree (0.9.3pre)
4
+ rubytree (0.9.3)
5
5
  json (~> 1.8)
6
6
  structured_warnings (~> 0.1)
7
7
 
@@ -2,6 +2,10 @@
2
2
 
3
3
  = History of Changes
4
4
 
5
+ === 0.9.3 / 2014-02-01
6
+
7
+ * Fixed the issue with globally unique node names. See Github issue #24.
8
+
5
9
  === 0.9.2 / 2014-01-03
6
10
 
7
11
  * Yanked R0.9.1 as the History file was not updated.
data/TAGS CHANGED
@@ -81,32 +81,32 @@ module Tree::Tree48,2158
81
81
  def to_s::Tree::TreeNode#to_s297,10212
82
82
  def <<::Tree::TreeNode#<<320,10983
83
83
  def add::Tree::TreeNode#add355,12489
84
- def insertion_range::Tree::TreeNode#insertion_range375,13549
85
- def remove!::Tree::TreeNode#remove!397,14336
86
- def parent=::Tree::TreeNode#parent=412,14739
87
- def remove_from_parent!::Tree::TreeNode#remove_from_parent!425,15124
88
- def remove_all!::Tree::TreeNode#remove_all!436,15496
89
- def set_as_root!::Tree::TreeNode#set_as_root!447,15725
90
- def freeze_tree!::Tree::TreeNode#freeze_tree!457,16051
91
- def []::Tree::TreeNode#[]497,17569
92
- def each::Tree::TreeNode#each522,18536
93
- def preordered_each::Tree::TreeNode#preordered_each550,19496
94
- def postordered_each::Tree::TreeNode#postordered_each562,19908
95
- def breadth_each::Tree::TreeNode#breadth_each598,21334
96
- def children::Tree::TreeNode#children624,22272
97
- def each_leaf::Tree::TreeNode#each_leaf645,22893
98
- def first_child::Tree::TreeNode#first_child662,23315
99
- def last_child::Tree::TreeNode#last_child670,23526
100
- def first_sibling::Tree::TreeNode#first_sibling686,23973
101
- def is_first_sibling?::Tree::TreeNode#is_first_sibling?696,24247
102
- def last_sibling::Tree::TreeNode#last_sibling710,24663
103
- def is_last_sibling?::Tree::TreeNode#is_last_sibling?720,24933
104
- def siblings::Tree::TreeNode#siblings736,25486
105
- def is_only_child?::Tree::TreeNode#is_only_child?755,26038
106
- def next_sibling::Tree::TreeNode#next_sibling768,26441
107
- def previous_sibling::Tree::TreeNode#previous_sibling784,26915
108
- def <=>::Tree::TreeNode#<=>800,27426
109
- def print_tree::Tree::TreeNode#print_tree808,27655
84
+ def insertion_range::Tree::TreeNode#insertion_range375,13451
85
+ def remove!::Tree::TreeNode#remove!397,14238
86
+ def parent=::Tree::TreeNode#parent=412,14641
87
+ def remove_from_parent!::Tree::TreeNode#remove_from_parent!425,15026
88
+ def remove_all!::Tree::TreeNode#remove_all!436,15398
89
+ def set_as_root!::Tree::TreeNode#set_as_root!447,15627
90
+ def freeze_tree!::Tree::TreeNode#freeze_tree!457,15953
91
+ def []::Tree::TreeNode#[]497,17471
92
+ def each::Tree::TreeNode#each522,18438
93
+ def preordered_each::Tree::TreeNode#preordered_each550,19398
94
+ def postordered_each::Tree::TreeNode#postordered_each562,19810
95
+ def breadth_each::Tree::TreeNode#breadth_each598,21236
96
+ def children::Tree::TreeNode#children624,22174
97
+ def each_leaf::Tree::TreeNode#each_leaf645,22795
98
+ def first_child::Tree::TreeNode#first_child662,23217
99
+ def last_child::Tree::TreeNode#last_child670,23428
100
+ def first_sibling::Tree::TreeNode#first_sibling686,23875
101
+ def is_first_sibling?::Tree::TreeNode#is_first_sibling?696,24149
102
+ def last_sibling::Tree::TreeNode#last_sibling710,24565
103
+ def is_last_sibling?::Tree::TreeNode#is_last_sibling?720,24835
104
+ def siblings::Tree::TreeNode#siblings736,25388
105
+ def is_only_child?::Tree::TreeNode#is_only_child?755,25940
106
+ def next_sibling::Tree::TreeNode#next_sibling768,26343
107
+ def previous_sibling::Tree::TreeNode#previous_sibling784,26817
108
+ def <=>::Tree::TreeNode#<=>800,27328
109
+ def print_tree::Tree::TreeNode#print_tree808,27557
110
110
 
111
111
  test/run_test.rb,0
112
112
 
@@ -170,53 +170,53 @@ module TestTree::TestTree39,1725
170
170
  def test_previous_sibling::TestTree::TestTreeNode#test_previous_sibling315,13146
171
171
  def test_add::TestTree::TestTreeNode#test_add326,13675
172
172
  def test_add_duplicate::TestTree::TestTreeNode#test_add_duplicate347,14357
173
- def test_add_at_specific_position::TestTree::TestTreeNode#test_add_at_specific_position378,15292
174
- def test_remove_bang::TestTree::TestTreeNode#test_remove_bang442,18345
175
- def test_remove_all_bang::TestTree::TestTreeNode#test_remove_all_bang474,19308
176
- def test_remove_from_parent_bang::TestTree::TestTreeNode#test_remove_from_parent_bang484,19614
177
- def test_children::TestTree::TestTreeNode#test_children503,20329
178
- def test_first_child::TestTree::TestTreeNode#test_first_child539,21918
179
- def test_last_child::TestTree::TestTreeNode#test_last_child548,22246
180
- def test_find::TestTree::TestTreeNode#test_find557,22562
181
- def test_parentage::TestTree::TestTreeNode#test_parentage572,23157
182
- def test_each::TestTree::TestTreeNode#test_each581,23489
183
- def test_each_leaf::TestTree::TestTreeNode#test_each_leaf600,24173
184
- def test_parent::TestTree::TestTreeNode#test_parent627,25368
185
- def test_indexed_access::TestTree::TestTreeNode#test_indexed_access638,25787
186
- def test_print_tree::TestTree::TestTreeNode#test_print_tree649,26160
187
- def test_marshal_dump::TestTree::TestTreeNode#test_marshal_dump656,26320
188
- alias test_marshal_load::TestTree::TestTreeNode#test_marshal_load698,28442
189
- def test_collect::TestTree::TestTreeNode#test_collect701,28563
190
- def test_freeze_tree_bang::TestTree::TestTreeNode#test_freeze_tree_bang711,28829
191
- def test_content::TestTree::TestTreeNode#test_content725,29351
192
- def test_depth::TestTree::TestTreeNode#test_depth733,29742
193
- def do_deprecated_depth::TestTree::TestTreeNode#do_deprecated_depth744,30115
194
- def test_node_height::TestTree::TestTreeNode#test_node_height762,30683
195
- def test_node_depth::TestTree::TestTreeNode#test_node_depth787,31892
196
- def test_level::TestTree::TestTreeNode#test_level800,32329
197
- def test_breadth::TestTree::TestTreeNode#test_breadth815,32872
198
- def test_breadth_each::TestTree::TestTreeNode#test_breadth_each834,33519
199
- def test_preordered_each::TestTree::TestTreeNode#test_preordered_each875,34825
200
- def test_postordered_each::TestTree::TestTreeNode#test_postordered_each914,36079
201
- def test_detached_copy::TestTree::TestTreeNode#test_detached_copy953,37334
202
- def test_detached_subtree_copy::TestTree::TestTreeNode#test_detached_subtree_copy970,38062
203
- def test_has_children_eh::TestTree::TestTreeNode#test_has_children_eh1004,40314
204
- def test_is_leaf_eh::TestTree::TestTreeNode#test_is_leaf_eh1010,40476
205
- def test_is_root_eh::TestTree::TestTreeNode#test_is_root_eh1017,40682
206
- def test_content_equals::TestTree::TestTreeNode#test_content_equals1023,40845
207
- def test_size::TestTree::TestTreeNode#test_size1031,41110
208
- def test_lt2::TestTree::TestTreeNode#test_lt21040,41374
209
- def test_index::TestTree::TestTreeNode#test_index1051,41866
210
- def test_in_degree::TestTree::TestTreeNode#test_in_degree1072,42962
211
- def test_out_degree::TestTree::TestTreeNode#test_out_degree1083,43429
212
- def test_json_serialization::TestTree::TestTreeNode#test_json_serialization1094,43916
213
- def test_json_deserialization::TestTree::TestTreeNode#test_json_deserialization1118,44716
214
- def test_json_roundtrip::TestTree::TestTreeNode#test_json_roundtrip1146,45902
215
- def test_old_camelCase_method_names::TestTree::TestTreeNode#test_old_camelCase_method_names1162,46643
216
- def test_integer_node_names::TestTree::TestTreeNode#test_integer_node_names1193,47711
217
- def test_add_node_to_self_as_child::TestTree::TestTreeNode#test_add_node_to_self_as_child1224,48941
218
- def test_single_node_becomes_leaf::TestTree::TestTreeNode#test_single_node_becomes_leaf1236,49367
219
- def test_unique_node_names::TestTree::TestTreeNode#test_unique_node_names1248,49788
220
- def setup_other_test_tree::TestTree::TestTreeNode#setup_other_test_tree1262,50143
221
- def test_merge::TestTree::TestTreeNode#test_merge1290,51132
222
- def test_merge_bang::TestTree::TestTreeNode#test_merge_bang1319,52570
173
+ def test_add_at_specific_position::TestTree::TestTreeNode#test_add_at_specific_position388,15785
174
+ def test_remove_bang::TestTree::TestTreeNode#test_remove_bang452,18838
175
+ def test_remove_all_bang::TestTree::TestTreeNode#test_remove_all_bang484,19801
176
+ def test_remove_from_parent_bang::TestTree::TestTreeNode#test_remove_from_parent_bang494,20107
177
+ def test_children::TestTree::TestTreeNode#test_children513,20822
178
+ def test_first_child::TestTree::TestTreeNode#test_first_child549,22411
179
+ def test_last_child::TestTree::TestTreeNode#test_last_child558,22739
180
+ def test_find::TestTree::TestTreeNode#test_find567,23055
181
+ def test_parentage::TestTree::TestTreeNode#test_parentage582,23650
182
+ def test_each::TestTree::TestTreeNode#test_each591,23982
183
+ def test_each_leaf::TestTree::TestTreeNode#test_each_leaf610,24666
184
+ def test_parent::TestTree::TestTreeNode#test_parent637,25861
185
+ def test_indexed_access::TestTree::TestTreeNode#test_indexed_access648,26280
186
+ def test_print_tree::TestTree::TestTreeNode#test_print_tree659,26653
187
+ def test_marshal_dump::TestTree::TestTreeNode#test_marshal_dump666,26813
188
+ alias test_marshal_load::TestTree::TestTreeNode#test_marshal_load708,28935
189
+ def test_collect::TestTree::TestTreeNode#test_collect711,29056
190
+ def test_freeze_tree_bang::TestTree::TestTreeNode#test_freeze_tree_bang721,29322
191
+ def test_content::TestTree::TestTreeNode#test_content735,29844
192
+ def test_depth::TestTree::TestTreeNode#test_depth743,30235
193
+ def do_deprecated_depth::TestTree::TestTreeNode#do_deprecated_depth754,30608
194
+ def test_node_height::TestTree::TestTreeNode#test_node_height772,31176
195
+ def test_node_depth::TestTree::TestTreeNode#test_node_depth797,32385
196
+ def test_level::TestTree::TestTreeNode#test_level810,32822
197
+ def test_breadth::TestTree::TestTreeNode#test_breadth825,33365
198
+ def test_breadth_each::TestTree::TestTreeNode#test_breadth_each844,34012
199
+ def test_preordered_each::TestTree::TestTreeNode#test_preordered_each885,35318
200
+ def test_postordered_each::TestTree::TestTreeNode#test_postordered_each924,36572
201
+ def test_detached_copy::TestTree::TestTreeNode#test_detached_copy963,37827
202
+ def test_detached_subtree_copy::TestTree::TestTreeNode#test_detached_subtree_copy980,38555
203
+ def test_has_children_eh::TestTree::TestTreeNode#test_has_children_eh1014,40807
204
+ def test_is_leaf_eh::TestTree::TestTreeNode#test_is_leaf_eh1020,40969
205
+ def test_is_root_eh::TestTree::TestTreeNode#test_is_root_eh1027,41175
206
+ def test_content_equals::TestTree::TestTreeNode#test_content_equals1033,41338
207
+ def test_size::TestTree::TestTreeNode#test_size1041,41603
208
+ def test_lt2::TestTree::TestTreeNode#test_lt21050,41867
209
+ def test_index::TestTree::TestTreeNode#test_index1061,42359
210
+ def test_in_degree::TestTree::TestTreeNode#test_in_degree1082,43455
211
+ def test_out_degree::TestTree::TestTreeNode#test_out_degree1093,43922
212
+ def test_json_serialization::TestTree::TestTreeNode#test_json_serialization1104,44409
213
+ def test_json_deserialization::TestTree::TestTreeNode#test_json_deserialization1128,45209
214
+ def test_json_roundtrip::TestTree::TestTreeNode#test_json_roundtrip1156,46395
215
+ def test_old_camelCase_method_names::TestTree::TestTreeNode#test_old_camelCase_method_names1172,47136
216
+ def test_integer_node_names::TestTree::TestTreeNode#test_integer_node_names1203,48204
217
+ def test_add_node_to_self_as_child::TestTree::TestTreeNode#test_add_node_to_self_as_child1234,49434
218
+ def test_single_node_becomes_leaf::TestTree::TestTreeNode#test_single_node_becomes_leaf1250,49947
219
+ def test_unique_node_names::TestTree::TestTreeNode#test_unique_node_names1262,50368
220
+ def setup_other_test_tree::TestTree::TestTreeNode#setup_other_test_tree1276,50723
221
+ def test_merge::TestTree::TestTreeNode#test_merge1304,51712
222
+ def test_merge_bang::TestTree::TestTreeNode#test_merge_bang1333,53150
@@ -354,11 +354,11 @@ module Tree
354
354
  # @see #<<
355
355
  def add(child, at_index = -1)
356
356
  raise ArgumentError, "Attempting to add a nil node" unless child # Only handles the immediate child scenario
357
- raise ArgumentError, "Attempting add node to itself" if self == child
358
- raise ArgumentError, "Attempting to add root as a child" if self.root == child
357
+ raise ArgumentError, "Attempting add node to itself" if self.equal?(child)
358
+ raise ArgumentError, "Attempting add root as a child" if self.equal?(root) unless self.is_root?
359
+
359
360
  # Lazy mans unique test, won't test if children of child are unique in this tree too.
360
- #self.root.each { |node| raise "Child #{child.name} already added!" if node.name == child.name }
361
- self.children.each { |node| raise "Child #{child.name} already added!" if node.name == child.name }
361
+ raise "Child #{child.name} already added!" if @children_hash.include?(child.name)
362
362
 
363
363
  if insertion_range.include?(at_index)
364
364
  @children.insert(at_index, child)
@@ -37,5 +37,5 @@
37
37
  #
38
38
  module Tree
39
39
  # Rubytree Package Version
40
- VERSION = '0.9.3pre'
40
+ VERSION = '0.9.3'
41
41
  end
@@ -359,9 +359,9 @@ module TestTree
359
359
  root = Tree::TreeNode.new("root")
360
360
  one = Tree::TreeNode.new("one")
361
361
  two = Tree::TreeNode.new("two")
362
+ three= Tree::TreeNode.new("three")
362
363
  deep = Tree::TreeNode.new("deep")
363
364
 
364
-
365
365
  root << one << deep
366
366
  # The same child cannot be added under any circumstance
367
367
  assert_raise(RuntimeError) { root.add(Tree::TreeNode.new(one.name)) }
@@ -370,7 +370,17 @@ module TestTree
370
370
  begin
371
371
  root << two << deep
372
372
  rescue RuntimeError => e
373
- fail("Error! The RuntimeError should not have been thrown.")
373
+ fail("Error! The RuntimeError should not have been thrown. The same node can be added to different branches.")
374
+ end
375
+
376
+ assert_raise(ArgumentError) {root << three << three }
377
+
378
+ root.remove_all! # Because the first child 'three' whould have been added.
379
+ begin
380
+ three_dup = Tree::TreeNode.new("three")
381
+ root << three << three_dup
382
+ rescue RuntimeError => e
383
+ fail("Error! The RuntimeError should not have been thrown. The same node name can be used in the branch.")
374
384
  end
375
385
  end
376
386
 
@@ -1229,7 +1239,11 @@ module TestTree
1229
1239
 
1230
1240
  # And now a scenario where the node addition is done down the hierarchy
1231
1241
  child = Tree::TreeNode.new("child")
1232
- assert_raise(ArgumentError) { root << child << root }
1242
+ begin
1243
+ root << child << root
1244
+ rescue ArgumentError => e
1245
+ fail("The ArgumentError should not have been raised.")
1246
+ end
1233
1247
  end
1234
1248
 
1235
1249
  # Test whether the tree_leaf method works correctly
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.3pre
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anupam Sengupta
@@ -161,19 +161,9 @@ licenses:
161
161
  metadata: {}
162
162
  post_install_message: |2
163
163
  ========================================================================
164
- Thank you for installing rubytree.
164
+ Thank you for installing RubyTree.
165
165
 
166
- Note that the TreeNode#siblings method has changed in 0.8.3.
167
- It now returns an empty array for the root node.
168
-
169
- WARNING: SIGNIFICANT API CHANGE in 0.8.0 !
170
- ------------------------------------------
171
-
172
- Please note that as of 0.8.0 the CamelCase method names are DEPRECATED.
173
- The new method names follow the ruby_convention (separated by '_').
174
-
175
- The old CamelCase methods still work (a warning will be displayed),
176
- but may go away in the future.
166
+ Note:: As of 0.9.3, node names do not need to be globally unique.
177
167
 
178
168
  Details of the API changes are documented in the API-CHANGES file.
179
169
  ========================================================================
@@ -190,9 +180,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
180
  version: 1.8.7
191
181
  required_rubygems_version: !ruby/object:Gem::Requirement
192
182
  requirements:
193
- - - ">"
183
+ - - ">="
194
184
  - !ruby/object:Gem::Version
195
- version: 1.3.1
185
+ version: '0'
196
186
  requirements: []
197
187
  rubyforge_project: rubytree
198
188
  rubygems_version: 2.2.1