rubytree 0.9.2 → 0.9.3pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -4
- data/TAGS +222 -0
- data/TODO.org +4 -1
- data/lib/tree.rb +6 -10
- data/lib/tree/tree_deps.rb +7 -1
- data/lib/tree/version.rb +1 -1
- data/test/test_tree.rb +42 -7
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dd9b9757055ea2f6896146448b13996c7e099cf
|
4
|
+
data.tar.gz: 96f4a3cce558178889c67e64984778ad2192f42f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32066b906cf88e1cba0ebc79c3b824e2f074ca884d90ddbbff76ee128ecc9f13c584fa362231f58c81ffc733574a4a780700e3d7b458b95476fe81920f17a71f
|
7
|
+
data.tar.gz: 7d1eef090b839f6c8a3335d0fc5b8820aea6a614d2c7e2f6de3b784dd318f39fe99ef6bdec5d7105cb4c17c1c403bf69524b1f7411ee7f8d07aba843dc211a34
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rubytree (0.9.
|
4
|
+
rubytree (0.9.3pre)
|
5
5
|
json (~> 1.8)
|
6
6
|
structured_warnings (~> 0.1)
|
7
7
|
|
@@ -14,12 +14,13 @@ GEM
|
|
14
14
|
simplecov (>= 0.7)
|
15
15
|
term-ansicolor
|
16
16
|
thor
|
17
|
-
docile (1.1.
|
17
|
+
docile (1.1.2)
|
18
18
|
json (1.8.1)
|
19
19
|
mime-types (2.0)
|
20
|
-
multi_json (1.8.
|
20
|
+
multi_json (1.8.4)
|
21
21
|
rake (10.1.1)
|
22
|
-
rdoc (4.1.
|
22
|
+
rdoc (4.1.1)
|
23
|
+
json (~> 1.4)
|
23
24
|
rest-client (1.6.7)
|
24
25
|
mime-types (>= 1.16)
|
25
26
|
rtags (0.98)
|
data/TAGS
ADDED
@@ -0,0 +1,222 @@
|
|
1
|
+
|
2
|
+
lib/rubytree.rb,0
|
3
|
+
|
4
|
+
lib/tree/binarytree.rb,727
|
5
|
+
module Tree::Tree43,1900
|
6
|
+
class BinaryTreeNode::Tree::BinaryTreeNode52,2209
|
7
|
+
def left_child::Tree::BinaryTreeNode#left_child62,2492
|
8
|
+
def right_child::Tree::BinaryTreeNode#right_child74,2883
|
9
|
+
def is_left_child?::Tree::BinaryTreeNode#is_left_child?83,3159
|
10
|
+
def is_right_child?::Tree::BinaryTreeNode#is_right_child?93,3490
|
11
|
+
def add::Tree::BinaryTreeNode#add110,4147
|
12
|
+
def inordered_each::Tree::BinaryTreeNode#inordered_each128,4666
|
13
|
+
def set_child_at::Tree::BinaryTreeNode#set_child_at159,5602
|
14
|
+
def left_child=::Tree::BinaryTreeNode#left_child=178,6270
|
15
|
+
def right_child=::Tree::BinaryTreeNode#right_child=190,6639
|
16
|
+
def swap_children::Tree::BinaryTreeNode#swap_children195,6785
|
17
|
+
|
18
|
+
lib/tree/tree_deps.rb,0
|
19
|
+
|
20
|
+
lib/tree/utils/camel_case_method_handler.rb,324
|
21
|
+
module Tree::Tree41,1848
|
22
|
+
module CamelCaseMethodHandler::Tree::CamelCaseMethodHandler44,2004
|
23
|
+
def self.included::Tree::CamelCaseMethodHandler.included45,2038
|
24
|
+
def method_missing::Tree::CamelCaseMethodHandler#method_missing49,2186
|
25
|
+
def to_snake_case::Tree::CamelCaseMethodHandler#to_snake_case66,2798
|
26
|
+
|
27
|
+
lib/tree/utils/json_converter.rb,258
|
28
|
+
module Tree::Tree42,1899
|
29
|
+
def self.included::Tree.included44,1936
|
30
|
+
def as_json::Tree#as_json61,2387
|
31
|
+
def to_json::Tree#to_json89,3095
|
32
|
+
module ClassMethods::Tree::ClassMethods94,3245
|
33
|
+
def json_create::Tree::ClassMethods#json_create113,3960
|
34
|
+
|
35
|
+
lib/tree/utils/metrics_methods.rb,718
|
36
|
+
module Tree::Tree41,1833
|
37
|
+
module TreeMetricsHandler::Tree::TreeMetricsHandler43,1918
|
38
|
+
def self.included::Tree::TreeMetricsHandler.included44,1948
|
39
|
+
def size::Tree::TreeMetricsHandler#size56,2317
|
40
|
+
def length::Tree::TreeMetricsHandler#length67,2661
|
41
|
+
def node_height::Tree::TreeMetricsHandler#node_height80,3078
|
42
|
+
def node_depth::Tree::TreeMetricsHandler#node_depth96,3689
|
43
|
+
def level::Tree::TreeMetricsHandler#level105,3875
|
44
|
+
def depth::Tree::TreeMetricsHandler#depth124,4560
|
45
|
+
def breadth::Tree::TreeMetricsHandler#breadth140,5197
|
46
|
+
def in_degree::Tree::TreeMetricsHandler#in_degree154,5660
|
47
|
+
def out_degree::Tree::TreeMetricsHandler#out_degree165,5973
|
48
|
+
|
49
|
+
lib/tree/utils/tree_merge_handler.rb,214
|
50
|
+
module Tree::Tree40,1769
|
51
|
+
def merge::Tree#merge57,2500
|
52
|
+
def merge!::Tree#merge!72,3134
|
53
|
+
def check_merge_prerequisites::Tree#check_merge_prerequisites85,3441
|
54
|
+
def merge_trees::Tree#merge_trees102,4086
|
55
|
+
|
56
|
+
lib/tree/utils/utils.rb,27
|
57
|
+
module Tree::Tree39,1838
|
58
|
+
|
59
|
+
lib/tree/version.rb,27
|
60
|
+
module Tree::Tree38,1723
|
61
|
+
|
62
|
+
lib/tree.rb,2676
|
63
|
+
module Tree::Tree48,2158
|
64
|
+
class TreeNode::Tree::TreeNode85,3731
|
65
|
+
attr_reader :name::Tree::TreeNode#name108,4483
|
66
|
+
attr_accessor :content::Tree::TreeNode#content115,4682
|
67
|
+
attr_reader :parent::Tree::TreeNode#parent119,4798
|
68
|
+
def root::Tree::TreeNode#root126,5010
|
69
|
+
def is_root?::Tree::TreeNode#is_root?137,5316
|
70
|
+
def has_content?::Tree::TreeNode#has_content?145,5499
|
71
|
+
def is_leaf?::Tree::TreeNode#is_leaf?156,5753
|
72
|
+
def parentage::Tree::TreeNode#parentage168,6128
|
73
|
+
def has_children?::Tree::TreeNode#has_children?186,6554
|
74
|
+
def initialize::Tree::TreeNode#Tree::TreeNode.new209,7380
|
75
|
+
def detached_copy::Tree::TreeNode#detached_copy227,7997
|
76
|
+
def detached_subtree_copy::Tree::TreeNode#detached_subtree_copy237,8283
|
77
|
+
alias :dup::Tree::TreeNode#dup246,8544
|
78
|
+
def marshal_dump::Tree::TreeNode#marshal_dump251,8722
|
79
|
+
def create_dump_rep::Tree::TreeNode#create_dump_rep257,8890
|
80
|
+
def marshal_load::Tree::TreeNode#marshal_load272,9428
|
81
|
+
def to_s::Tree::TreeNode#to_s297,10212
|
82
|
+
def <<::Tree::TreeNode#<<320,10983
|
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
|
110
|
+
|
111
|
+
test/run_test.rb,0
|
112
|
+
|
113
|
+
test/test_binarytree.rb,1192
|
114
|
+
module TestTree::TestTree39,1717
|
115
|
+
class TestBinaryTreeNode::TestTree::TestBinaryTreeNode41,1776
|
116
|
+
def setup::TestTree::TestBinaryTreeNode#setup44,1868
|
117
|
+
def teardown::TestTree::TestBinaryTreeNode#teardown52,2171
|
118
|
+
def test_initialize::TestTree::TestBinaryTreeNode#test_initialize59,2330
|
119
|
+
def test_add::TestTree::TestBinaryTreeNode#test_add67,2719
|
120
|
+
def test_inordered_each::TestTree::TestBinaryTreeNode#test_inordered_each90,3633
|
121
|
+
def test_left_child::TestTree::TestBinaryTreeNode#test_left_child134,5101
|
122
|
+
def test_right_child::TestTree::TestBinaryTreeNode#test_right_child142,5414
|
123
|
+
def test_left_child_equals::TestTree::TestBinaryTreeNode#test_left_child_equals150,5727
|
124
|
+
def test_right_child_equals::TestTree::TestBinaryTreeNode#test_right_child_equals169,6717
|
125
|
+
def test_is_left_child_eh::TestTree::TestBinaryTreeNode#test_is_left_child_eh189,7834
|
126
|
+
def test_is_right_child_eh::TestTree::TestBinaryTreeNode#test_is_right_child_eh204,8373
|
127
|
+
def test_swap_children::TestTree::TestBinaryTreeNode#test_swap_children218,8919
|
128
|
+
def test_old_camelCase_method_names::TestTree::TestBinaryTreeNode#test_old_camelCase_method_names236,9802
|
129
|
+
|
130
|
+
test/test_rubytree_require.rb,203
|
131
|
+
module TestTree::TestTree38,1678
|
132
|
+
class TestRequireRubytree::TestTree::TestRequireRubytree41,1759
|
133
|
+
def test_create_a_simple_node::TestTree::TestRequireRubytree#test_create_a_simple_node44,1884
|
134
|
+
|
135
|
+
test/test_subclassed_node.rb,389
|
136
|
+
module TestTree::TestTree39,1688
|
137
|
+
class TestSubclassedTreeNode::TestTree::TestSubclassedTreeNode42,1741
|
138
|
+
class MyNode::TestTree::TestSubclassedTreeNode::MyNode45,1868
|
139
|
+
def my_dummy_method::TestTree::TestSubclassedTreeNode::MyNode#my_dummy_method47,1967
|
140
|
+
def test_subclassed_camelcase_methods::TestTree::TestSubclassedTreeNode#test_subclassed_camelcase_methods52,2026
|
141
|
+
|
142
|
+
test/test_thread_and_fiber.rb,422
|
143
|
+
module TestTree::TestTree39,1695
|
144
|
+
class TestFiberAndThreadOnNode::TestTree::TestFiberAndThreadOnNode41,1747
|
145
|
+
def create_long_depth_trees::TestTree::TestFiberAndThreadOnNode#create_long_depth_trees44,1843
|
146
|
+
def test_fiber_for_recursion::TestTree::TestFiberAndThreadOnNode#test_fiber_for_recursion59,2260
|
147
|
+
def test_thread_for_recursion::TestTree::TestFiberAndThreadOnNode#test_thread_for_recursion73,2807
|
148
|
+
|
149
|
+
test/test_tree.rb,5684
|
150
|
+
module TestTree::TestTree39,1725
|
151
|
+
class TestTreeNode::TestTree::TestTreeNode41,1777
|
152
|
+
def setup::TestTree::TestTreeNode#setup65,2610
|
153
|
+
def setup_test_tree::TestTree::TestTreeNode#setup_test_tree77,3030
|
154
|
+
def teardown::TestTree::TestTreeNode#teardown84,3180
|
155
|
+
def test_has_version_number::TestTree::TestTreeNode#test_has_version_number89,3272
|
156
|
+
def test_root_setup::TestTree::TestTreeNode#test_root_setup94,3423
|
157
|
+
def test_root::TestTree::TestTreeNode#test_root111,4473
|
158
|
+
def test_has_content_eh::TestTree::TestTreeNode#test_has_content_eh124,5023
|
159
|
+
def test_length_is_size::TestTree::TestTreeNode#test_length_is_size135,5481
|
160
|
+
def test_spaceship::TestTree::TestTreeNode#test_spaceship141,5671
|
161
|
+
def test_is_comparable::TestTree::TestTreeNode#test_is_comparable167,6454
|
162
|
+
def test_to_s::TestTree::TestTreeNode#test_to_s185,7236
|
163
|
+
def test_first_sibling::TestTree::TestTreeNode#test_first_sibling218,8954
|
164
|
+
def test_is_first_sibling_eh::TestTree::TestTreeNode#test_is_first_sibling_eh231,9682
|
165
|
+
def test_is_last_sibling_eh::TestTree::TestTreeNode#test_is_last_sibling_eh242,10165
|
166
|
+
def test_last_sibling::TestTree::TestTreeNode#test_last_sibling253,10633
|
167
|
+
def test_siblings::TestTree::TestTreeNode#test_siblings265,11287
|
168
|
+
def test_is_only_child_eh::TestTree::TestTreeNode#test_is_only_child_eh293,12210
|
169
|
+
def test_next_sibling::TestTree::TestTreeNode#test_next_sibling304,12646
|
170
|
+
def test_previous_sibling::TestTree::TestTreeNode#test_previous_sibling315,13146
|
171
|
+
def test_add::TestTree::TestTreeNode#test_add326,13675
|
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
|
data/TODO.org
CHANGED
@@ -224,7 +224,10 @@
|
|
224
224
|
|
225
225
|
* Unplanned / Not assigned to any release
|
226
226
|
*** TODO Create a cycle-detection/validation mechanism to prevent cyclic graphs of nodes.
|
227
|
-
***
|
227
|
+
*** DONE Revert the forced install of rubygem 2.1.11 from [[file:.travis.yml][.travis.yml]]
|
228
|
+
CLOSED: [2014-01-12 Sun 19:06]
|
229
|
+
The issue seems to have been resolved with the 2.2.1 release of Rubygems.
|
230
|
+
|
228
231
|
*** TODO Create a generic validation method to check for various issues in the created tree.
|
229
232
|
*** TODO Add a FAQ document to the project.
|
230
233
|
*** TODO The semantic of length is probably unclear. Should return the node_depth instead (or remove the method)
|
data/lib/tree.rb
CHANGED
@@ -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 Anupam Sengupta
|
12
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Anupam Sengupta
|
13
13
|
#
|
14
14
|
# All rights reserved.
|
15
15
|
#
|
@@ -40,11 +40,6 @@
|
|
40
40
|
#
|
41
41
|
|
42
42
|
require 'tree/tree_deps'
|
43
|
-
require 'tree/version'
|
44
|
-
require 'tree/utils/metrics_methods'
|
45
|
-
require 'tree/utils/camel_case_method_handler'
|
46
|
-
require 'tree/utils/json_converter'
|
47
|
-
require 'tree/utils/tree_merge_handler'
|
48
43
|
|
49
44
|
# This module provides a *TreeNode* class whose instances are the primary objects
|
50
45
|
# for representing nodes in the tree.
|
@@ -57,8 +52,8 @@ module Tree
|
|
57
52
|
# This class models the nodes for an *N-ary* tree data structure. The
|
58
53
|
# nodes are *named*, and have a place-holder for the node data (i.e.,
|
59
54
|
# _content_ of the node). The node names are required to be *unique*
|
60
|
-
#
|
61
|
-
# the data structure).
|
55
|
+
# amongst the sibling/peer nodes. Note that the name is implicitly
|
56
|
+
# used as an _ID_ within the data structure).
|
62
57
|
#
|
63
58
|
# The node's _content_ is *not* required to be unique across
|
64
59
|
# different nodes in the tree, and can be +nil+ as well.
|
@@ -360,9 +355,10 @@ module Tree
|
|
360
355
|
def add(child, at_index = -1)
|
361
356
|
raise ArgumentError, "Attempting to add a nil node" unless child # Only handles the immediate child scenario
|
362
357
|
raise ArgumentError, "Attempting add node to itself" if self == child
|
363
|
-
|
358
|
+
raise ArgumentError, "Attempting to add root as a child" if self.root == child
|
364
359
|
# Lazy mans unique test, won't test if children of child are unique in this tree too.
|
365
|
-
self.root.each { |node| raise "Child #{child.name} already added!" if node.name == child.name }
|
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 }
|
366
362
|
|
367
363
|
if insertion_range.include?(at_index)
|
368
364
|
@children.insert(at_index, child)
|
data/lib/tree/tree_deps.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# Author:: Anupam Sengupta (anupamsg@gmail.com)
|
8
8
|
#
|
9
9
|
|
10
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Anupam Sengupta
|
10
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014 Anupam Sengupta
|
11
11
|
#
|
12
12
|
# All rights reserved.
|
13
13
|
#
|
@@ -39,3 +39,9 @@
|
|
39
39
|
|
40
40
|
require 'structured_warnings'
|
41
41
|
require 'json'
|
42
|
+
|
43
|
+
require 'tree/version'
|
44
|
+
require 'tree/utils/metrics_methods'
|
45
|
+
require 'tree/utils/camel_case_method_handler'
|
46
|
+
require 'tree/utils/json_converter'
|
47
|
+
require 'tree/utils/tree_merge_handler'
|
data/lib/tree/version.rb
CHANGED
data/test/test_tree.rb
CHANGED
@@ -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 Anupam Sengupta
|
5
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Anupam Sengupta
|
6
6
|
#
|
7
7
|
# All rights reserved.
|
8
8
|
#
|
@@ -339,13 +339,41 @@ module TestTree
|
|
339
339
|
assert_equal(5, @root.size, "Should have five nodes")
|
340
340
|
assert_equal(2, @child3.size, "Should have two nodes")
|
341
341
|
|
342
|
-
# Test the addition of a duplicate node (duplicate being defined as a node with the same name).
|
343
|
-
assert_raise(RuntimeError) { @root.add(Tree::TreeNode.new(@child1.name)) }
|
344
|
-
|
345
342
|
# Test the addition of a nil node.
|
346
343
|
assert_raise(ArgumentError) { @root.add(nil) }
|
347
344
|
end
|
348
345
|
|
346
|
+
# Test the addition of a duplicate node (duplicate being defined as a node with the same name).
|
347
|
+
def test_add_duplicate
|
348
|
+
# We need to allow duplicate nodes which are not *siblings*.
|
349
|
+
# Example (see https://github.com/evolve75/RubyTree/issues/24):
|
350
|
+
#
|
351
|
+
# * root
|
352
|
+
# |---+ one
|
353
|
+
# | +---> deep
|
354
|
+
# +---+ two
|
355
|
+
# +---> deep
|
356
|
+
#
|
357
|
+
# In this case, the two 'deep' nodes should not be considered duplicates
|
358
|
+
|
359
|
+
root = Tree::TreeNode.new("root")
|
360
|
+
one = Tree::TreeNode.new("one")
|
361
|
+
two = Tree::TreeNode.new("two")
|
362
|
+
deep = Tree::TreeNode.new("deep")
|
363
|
+
|
364
|
+
|
365
|
+
root << one << deep
|
366
|
+
# The same child cannot be added under any circumstance
|
367
|
+
assert_raise(RuntimeError) { root.add(Tree::TreeNode.new(one.name)) }
|
368
|
+
assert_raise(RuntimeError) { root.add(one) }
|
369
|
+
|
370
|
+
begin
|
371
|
+
root << two << deep
|
372
|
+
rescue RuntimeError => e
|
373
|
+
fail("Error! The RuntimeError should not have been thrown.")
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
349
377
|
# Test Addition at a specific position
|
350
378
|
def test_add_at_specific_position
|
351
379
|
assert(!@root.has_children?, "Should not have any children")
|
@@ -1201,7 +1229,7 @@ module TestTree
|
|
1201
1229
|
|
1202
1230
|
# And now a scenario where the node addition is done down the hierarchy
|
1203
1231
|
child = Tree::TreeNode.new("child")
|
1204
|
-
assert_raise(
|
1232
|
+
assert_raise(ArgumentError) { root << child << root }
|
1205
1233
|
end
|
1206
1234
|
|
1207
1235
|
# Test whether the tree_leaf method works correctly
|
@@ -1215,12 +1243,19 @@ module TestTree
|
|
1215
1243
|
|
1216
1244
|
end
|
1217
1245
|
|
1218
|
-
# Test if node names are really unique in the
|
1246
|
+
# Test if node names are really unique in the child array.
|
1247
|
+
# Note that this does not prevent duplicates elsewhere in the tree.
|
1219
1248
|
def test_unique_node_names
|
1220
1249
|
setup_test_tree
|
1221
1250
|
|
1222
1251
|
assert_raise(RuntimeError) { @root << @child1 }
|
1223
|
-
|
1252
|
+
|
1253
|
+
begin
|
1254
|
+
@root.first_child << @child2
|
1255
|
+
rescue RuntimeError => e
|
1256
|
+
fail("No error should have been raised for adding a non-sibling duplicate.")
|
1257
|
+
end
|
1258
|
+
|
1224
1259
|
end
|
1225
1260
|
|
1226
1261
|
# Setup function to build some extra trees to play with.
|
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.
|
4
|
+
version: 0.9.3pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anupam Sengupta
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- LICENSE.md
|
137
137
|
- README.md
|
138
138
|
- Rakefile
|
139
|
+
- TAGS
|
139
140
|
- TODO.org
|
140
141
|
- examples/example_basic.rb
|
141
142
|
- lib/rubytree.rb
|
@@ -189,12 +190,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
189
190
|
version: 1.8.7
|
190
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
192
|
requirements:
|
192
|
-
- - "
|
193
|
+
- - ">"
|
193
194
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
195
|
+
version: 1.3.1
|
195
196
|
requirements: []
|
196
197
|
rubyforge_project: rubytree
|
197
|
-
rubygems_version: 2.2.
|
198
|
+
rubygems_version: 2.2.1
|
198
199
|
signing_key:
|
199
200
|
specification_version: 4
|
200
201
|
summary: A generic tree data structure.
|