rubytree 0.9.5pre6 → 0.9.5pre7

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.
@@ -4,21 +4,21 @@
4
4
  #
5
5
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
6
6
  #
7
- # Time-stamp: <2013-12-31 21:45:35 anupam>
7
+ # Time-stamp: <2015-05-30 14:23:23 anupam>
8
8
  #
9
- # Copyright (C) 2013 Anupam Sengupta <anupamsg@gmail.com>
9
+ # Copyright (C) 2013, 2015 Anupam Sengupta <anupamsg@gmail.com>
10
10
  #
11
11
  # All rights reserved.
12
12
  #
13
- # Redistribution and use in source and binary forms, with or without modification,
14
- # are permitted provided that the following conditions are met:
13
+ # Redistribution and use in source and binary forms, with or without
14
+ # modification, are permitted provided that the following conditions are met:
15
15
  #
16
16
  # - Redistributions of source code must retain the above copyright notice, this
17
17
  # list of conditions and the following disclaimer.
18
18
  #
19
- # - Redistributions in binary form must reproduce the above copyright notice, this
20
- # list of conditions and the following disclaimer in the documentation and/or
21
- # other materials provided with the distribution.
19
+ # - Redistributions in binary form must reproduce the above copyright notice,
20
+ # this list of conditions and the following disclaimer in the documentation
21
+ # and/or other materials provided with the distribution.
22
22
  #
23
23
  # - Neither the name of the organization nor the names of its contributors may
24
24
  # be used to endorse or promote products derived from this software without
@@ -27,13 +27,13 @@
27
27
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
28
28
  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29
29
  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
30
- # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
31
- # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
32
- # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
33
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
34
- # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
- # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
31
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
33
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
34
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
35
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
37
  #
38
38
 
39
39
  require 'structured_warnings'
@@ -60,7 +60,8 @@ module Tree::Utils
60
60
  # @!attribute [r] length
61
61
  # Convenience synonym for {#size}.
62
62
  #
63
- # @deprecated This method name is ambiguous and may be removed. Use {#size} instead.
63
+ # @deprecated This method name is ambiguous and may be removed. Use
64
+ # {#size} instead.
64
65
  #
65
66
  # @return [Integer] The total number of nodes in this (sub)tree.
66
67
  # @see #size
@@ -85,16 +86,19 @@ module Tree::Utils
85
86
  # @!attribute [r] node_depth
86
87
  # Depth of this node in its tree. Depth of a node is defined as:
87
88
  #
88
- # Depth:: Length of the node's path to its root. Depth of a root node is zero.
89
+ # Depth:: Length of the node's path to its root. Depth of a root node is
90
+ # zero.
89
91
  #
90
- # *Note* that the deprecated method {#depth} was incorrectly computing this value.
91
- # Please replace all calls to the old method with {#node_depth} instead.
92
+ # *Note* that the deprecated method {#depth} was incorrectly computing
93
+ # this value. Please replace all calls to the old method with
94
+ # {#node_depth} instead.
92
95
  #
93
96
  # {#level} is an alias for this method.
94
97
  #
95
98
  # @return [Integer] Depth of this node.
96
99
  def node_depth
97
- @node_depth ||= is_root? ? 0 : (1 + parent.node_depth)
100
+ return 0 if is_root?
101
+ 1 + parent.node_depth
98
102
  end
99
103
 
100
104
  # @!attribute [r] level
@@ -108,8 +112,8 @@ module Tree::Utils
108
112
  # @!attribute [r] depth
109
113
  # Depth of the tree from this node. A single leaf node has a depth of 1.
110
114
  #
111
- # This method is *DEPRECATED* and may be removed in the subsequent releases.
112
- # Note that the value returned by this method is actually the:
115
+ # This method is *DEPRECATED* and may be removed in the subsequent
116
+ # releases. Note that the value returned by this method is actually the:
113
117
  #
114
118
  # _height_ + 1 of the node, *NOT* the _depth_.
115
119
  #
@@ -117,11 +121,15 @@ module Tree::Utils
117
121
  # {#node_height} methods instead.
118
122
  #
119
123
  # @return [Integer] depth of the node.
120
- # @deprecated This method returns an incorrect value. Use the {#node_depth} method instead.
124
+ #
125
+ # @deprecated This method returns an incorrect value. Use the
126
+ # {#node_depth} method instead.
121
127
  #
122
128
  # @see #node_depth
123
129
  def depth
124
- warn DeprecatedMethodWarning, 'This method is deprecated. Please use node_depth() or node_height() instead (bug # 22535)'
130
+ warn DeprecatedMethodWarning,
131
+ "This method is deprecated. "\
132
+ "Please use node_depth() or node_height() instead (bug # 22535)"
125
133
 
126
134
  return 1 if is_leaf?
127
135
  1 + @children.collect { |child| child.depth }.max
@@ -144,7 +152,8 @@ module Tree::Utils
144
152
  # The incoming edge-count of this node.
145
153
  #
146
154
  # In-degree is defined as:
147
- # In-degree:: Number of edges arriving at the node (0 for root, 1 for all other nodes)
155
+ # In-degree:: Number of edges arriving at the node (0 for root, 1 for
156
+ # all other nodes)
148
157
  #
149
158
  # - In-degree = 0 for a root or orphaned node
150
159
  # - In-degree = 1 for a node which has a parent
@@ -0,0 +1,92 @@
1
+ # path_methods.rb - This file is part of the RubyTree package.
2
+ #
3
+ # = path_methods.rb - Provides methods for extracting the node path.
4
+ #
5
+ # Author:: Marco Ziccardi and Anupam Sengupta (anupamsg@gmail.com)
6
+ #
7
+ # Time-stamp: <2015-05-30 16:04:00 anupam>
8
+ #
9
+ # Copyright (C) 2015 Anupam Sengupta <anupamsg@gmail.com>
10
+ #
11
+ # All rights reserved.
12
+ #
13
+ # Redistribution and use in source and binary forms, with or without
14
+ # modification, are permitted provided that the following conditions are met:
15
+ #
16
+ # - Redistributions of source code must retain the above copyright notice, this
17
+ # list of conditions and the following disclaimer.
18
+ #
19
+ # - Redistributions in binary form must reproduce the above copyright notice,
20
+ # this list of conditions and the following disclaimer in the documentation
21
+ # and/or other materials provided with the distribution.
22
+ #
23
+ # - Neither the name of the organization nor the names of its contributors may
24
+ # be used to endorse or promote products derived from this software without
25
+ # specific prior written permission.
26
+ #
27
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
28
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
30
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
31
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
33
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
34
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
35
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
+ #
38
+
39
+ module Tree::Utils
40
+ # Provides utility methods for path extraction
41
+ module TreePathHandler
42
+ def self.included(base)
43
+
44
+ # @!group Node Path
45
+
46
+ # Returns the path of this node from the root as a string, with the node
47
+ # names separated using the specified separator. The path is listed left
48
+ # to right from the root node.
49
+ #
50
+ # @param separator The optional separator to use. The default separator is
51
+ # '+=>+'.
52
+ #
53
+ # @return [String] The node path with names separated using the specified
54
+ # separator.
55
+ def path_as_string(separator = '=>')
56
+ path_as_array().join(separator)
57
+ end
58
+
59
+ # Returns the node-names from this node to the root as an array. The first
60
+ # element is the root node name, and the last element is this node's name.
61
+ #
62
+ # @return [Array] The array containing the node names for the path to this
63
+ # node
64
+ def path_as_array()
65
+ get_path_name_array().reverse
66
+ end
67
+
68
+ # @!visibility private
69
+ #
70
+ # Returns the path names in an array. The first element is the name of
71
+ # this node, and the last element is the root node name.
72
+ #
73
+ # @return [Array] An array of the node names for the path from this node
74
+ # to its root.
75
+ def get_path_name_array(current_array_path = [])
76
+ path_array = current_array_path + [name]
77
+
78
+ if !parent # If detached node or root node.
79
+ return path_array
80
+ else # Else recurse to parent node.
81
+ path_array = parent.get_path_name_array(path_array)
82
+ return path_array
83
+ end
84
+ end
85
+
86
+ protected :get_path_name_array
87
+
88
+ # @!endgroup
89
+ end # self.included
90
+ end
91
+
92
+ end
@@ -3,21 +3,21 @@
3
3
  # tree_merge_handler.rb
4
4
  #
5
5
  # Author: Anupam Sengupta
6
- # Time-stamp: <2013-12-31 21:52:59 anupam>
6
+ # Time-stamp: <2015-05-30 16:06:18 anupam>
7
7
  #
8
- # Copyright (C) 2013 Anupam Sengupta (anupamsg@gmail.com)
8
+ # Copyright (C) 2013, 2015 Anupam Sengupta (anupamsg@gmail.com)
9
9
  #
10
10
  # All rights reserved.
11
11
  #
12
- # Redistribution and use in source and binary forms, with or without modification,
13
- # are permitted provided that the following conditions are met:
12
+ # Redistribution and use in source and binary forms, with or without
13
+ # modification, are permitted provided that the following conditions are met:
14
14
  #
15
15
  # - Redistributions of source code must retain the above copyright notice, this
16
16
  # list of conditions and the following disclaimer.
17
17
  #
18
- # - Redistributions in binary form must reproduce the above copyright notice, this
19
- # list of conditions and the following disclaimer in the documentation and/or
20
- # other materials provided with the distribution.
18
+ # - Redistributions in binary form must reproduce the above copyright notice,
19
+ # this list of conditions and the following disclaimer in the documentation
20
+ # and/or other materials provided with the distribution.
21
21
  #
22
22
  # - Neither the name of the organization nor the names of its contributors may
23
23
  # be used to endorse or promote products derived from this software without
@@ -26,13 +26,13 @@
26
26
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27
27
  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
28
  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29
- # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
30
- # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
31
- # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
33
- # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
- # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
30
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
34
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
36
  #
37
37
 
38
38
  # Provides utility methods to merge two {Tree::TreeNode} based trees.
@@ -41,7 +41,8 @@ module Tree::Utils::TreeMergeHandler
41
41
 
42
42
  # @!group Merging Trees
43
43
 
44
- # Merge two trees that share the same root node and returns <em>a new tree</em>.
44
+ # Merge two trees that share the same root node and returns <em>a new
45
+ # tree</em>.
45
46
  #
46
47
  # The new tree contains the contents of the merge between _other_tree_ and
47
48
  # self. Duplicate nodes (coming from _other_tree_) will *NOT* be overwritten
@@ -52,11 +53,15 @@ module Tree::Utils::TreeMergeHandler
52
53
  # @param [Tree::TreeNode] other_tree The other tree to merge with.
53
54
  # @return [Tree::TreeNode] the resulting tree following the merge.
54
55
  #
55
- # @raise [TypeError] This exception is raised if _other_tree_ is not a {Tree::TreeNode}.
56
- # @raise [ArgumentError] This exception is raised if _other_tree_ does not have the same root node as self.
56
+ # @raise [TypeError] This exception is raised if _other_tree_ is not a
57
+ # {Tree::TreeNode}.
58
+ #
59
+ # @raise [ArgumentError] This exception is raised if _other_tree_ does not
60
+ # have the same root node as self.
57
61
  def merge(other_tree)
58
62
  check_merge_prerequisites(other_tree)
59
- new_tree = merge_trees( self.root.dup, other_tree.root )
63
+ new_tree = merge_trees(self.root.dup, other_tree.root)
64
+ return new_tree
60
65
  end
61
66
 
62
67
  # Merge in another tree (that shares the same root node) into +this+ tree.
@@ -67,8 +72,11 @@ module Tree::Utils::TreeMergeHandler
67
72
  #
68
73
  # @param [Tree::TreeNode] other_tree The other tree to merge with.
69
74
  #
70
- # @raise [TypeError] This exception is raised if _other_tree_ is not a {Tree::TreeNode}.
71
- # @raise [ArgumentError] This exception is raised if _other_tree_ does not have the same root node as self.
75
+ # @raise [TypeError] This exception is raised if _other_tree_ is not a
76
+ # {Tree::TreeNode}.
77
+ #
78
+ # @raise [ArgumentError] This exception is raised if _other_tree_ does not
79
+ # have the same root node as self.
72
80
  def merge!(other_tree)
73
81
  check_merge_prerequisites( other_tree )
74
82
  merge_trees( self.root, other_tree.root )
@@ -84,11 +92,13 @@ module Tree::Utils::TreeMergeHandler
84
92
  # @see #merge!
85
93
  def check_merge_prerequisites(other_tree)
86
94
  unless other_tree.is_a?(Tree::TreeNode)
87
- raise TypeError, 'You can only merge in another instance of Tree::TreeNode'
95
+ raise TypeError,
96
+ 'You can only merge in another instance of Tree::TreeNode'
88
97
  end
89
98
 
90
99
  unless self.root.name == other_tree.root.name
91
- raise ArgumentError, 'Unable to merge trees as they do not share the same root'
100
+ raise ArgumentError,
101
+ 'Unable to merge trees as they do not share the same root'
92
102
  end
93
103
  end
94
104
 
@@ -97,7 +107,8 @@ module Tree::Utils::TreeMergeHandler
97
107
  # @author Darren Oakley (https://github.com/dazoakley)
98
108
  #
99
109
  # @param [Tree::TreeNode] tree1 The target tree to merge into.
100
- # @param [Tree::TreeNode] tree2 The donor tree (that will be merged into target).
110
+ # @param [Tree::TreeNode] tree2 The donor tree (that will be merged
111
+ # into target).
101
112
  # @raise [Tree::TreeNode] The merged tree.
102
113
  def merge_trees(tree1, tree2)
103
114
  names1 = tree1.has_children? ? tree1.children.map { |child| child.name } : []
@@ -4,21 +4,21 @@
4
4
  #
5
5
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
6
6
  #
7
- # Time-stamp: <2012-08-25 22:01:17 anupam>
7
+ # Time-stamp: <2015-05-30 14:25:57 anupam>
8
8
  #
9
- # Copyright (C) 2012 Anupam Sengupta <anupamsg@gmail.com>
9
+ # Copyright (C) 2012, 2015 Anupam Sengupta <anupamsg@gmail.com>
10
10
  #
11
11
  # All rights reserved.
12
12
  #
13
- # Redistribution and use in source and binary forms, with or without modification,
14
- # are permitted provided that the following conditions are met:
13
+ # Redistribution and use in source and binary forms, with or without
14
+ # modification, are permitted provided that the following conditions are met:
15
15
  #
16
16
  # - Redistributions of source code must retain the above copyright notice, this
17
17
  # list of conditions and the following disclaimer.
18
18
  #
19
- # - Redistributions in binary form must reproduce the above copyright notice, this
20
- # list of conditions and the following disclaimer in the documentation and/or
21
- # other materials provided with the distribution.
19
+ # - Redistributions in binary form must reproduce the above copyright notice,
20
+ # this list of conditions and the following disclaimer in the documentation
21
+ # and/or other materials provided with the distribution.
22
22
  #
23
23
  # - Neither the name of the organization nor the names of its contributors may
24
24
  # be used to endorse or promote products derived from this software without
@@ -27,13 +27,13 @@
27
27
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
28
28
  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29
29
  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
30
- # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
31
- # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
32
- # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
33
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
34
- # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
- # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
31
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
33
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
34
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
35
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
37
 
38
38
  # Provides utilities and mixin modules for RubyTree.
39
39
  module Tree::Utils
data/lib/tree/version.rb CHANGED
@@ -8,15 +8,15 @@
8
8
  #
9
9
  # All rights reserved.
10
10
  #
11
- # Redistribution and use in source and binary forms, with or without modification,
12
- # are permitted provided that the following conditions are met:
11
+ # Redistribution and use in source and binary forms, with or without
12
+ # modification, are permitted provided that the following conditions are met:
13
13
  #
14
14
  # - Redistributions of source code must retain the above copyright notice, this
15
15
  # list of conditions and the following disclaimer.
16
16
  #
17
- # - Redistributions in binary form must reproduce the above copyright notice, this
18
- # list of conditions and the following disclaimer in the documentation and/or
19
- # other materials provided with the distribution.
17
+ # - Redistributions in binary form must reproduce the above copyright notice,
18
+ # this list of conditions and the following disclaimer in the documentation
19
+ # and/or other materials provided with the distribution.
20
20
  #
21
21
  # - Neither the name of the organization nor the names of its contributors may
22
22
  # be used to endorse or promote products derived from this software without
@@ -25,17 +25,17 @@
25
25
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26
26
  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
27
  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28
- # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
29
- # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30
- # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
32
- # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34
- # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
29
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
33
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
35
  #
36
36
 
37
37
  #
38
38
  module Tree
39
39
  # Rubytree Package Version
40
- VERSION = '0.9.5pre6'
40
+ VERSION = '0.9.5pre7'
41
41
  end
data/rubytree.gemspec ADDED
@@ -0,0 +1,88 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # gemspec for the rubytree gem.
4
+ #
5
+ # Author:: Anupam Sengupta (anupamsg@gmail.com)
6
+ #
7
+ # Copyright (c) 2012, 2013, 2014, 2015 Anupam Sengupta
8
+ # All rights reserved.
9
+
10
+ $:.unshift File.expand_path("../lib", __FILE__)
11
+ require "tree/version"
12
+
13
+ Gem::Specification.new do |s|
14
+ s.name = 'rubytree'
15
+ s.date = '2015-01-04'
16
+ s.version = Tree::VERSION
17
+ s.license = 'BSD'
18
+
19
+ s.platform = Gem::Platform::RUBY
20
+ s.author = 'Anupam Sengupta'
21
+ s.email = 'anupamsg@gmail.com'
22
+ s.homepage = 'http://rubytree.anupamsg.me'
23
+
24
+ s.required_ruby_version = '>=1.8.7'
25
+
26
+ s.summary = %q{A generic tree data structure.}
27
+ s.description = <<-EOF
28
+
29
+ RubyTree is a pure Ruby implementation of the generic tree data structure. It
30
+ provides a node-based model to store named nodes in the tree, and provides
31
+ simple APIs to access, modify and traverse the structure.
32
+
33
+ The implementation is node-centric, where individual nodes in the tree are the
34
+ primary structural elements. All common tree-traversal methods (pre-order,
35
+ post-order, and breadth-first) are supported.
36
+
37
+ The library mixes in the Enumerable and Comparable modules to allow access to
38
+ the tree as a standard collection (iteration, comparison, etc.).
39
+
40
+ A Binary tree is also provided, which provides the in-order traversal in
41
+ addition to the other methods.
42
+
43
+ RubyTree supports importing from, and exporting to JSON, and also supports the
44
+ Ruby's standard object marshaling.
45
+
46
+ This is a BSD licensed open source project, and is hosted at
47
+ http://github.com/evolve75/RubyTree, and is available as a standard gem from
48
+ http://rubygems.org/gems/rubytree.
49
+
50
+ The home page for RubyTree is at http://rubytree.anupamsg.me.
51
+
52
+ EOF
53
+
54
+ s.files = Dir['lib/**/*.rb'] # The actual code
55
+ s.files += Dir['[A-Z]*'] # Various documentation files
56
+ s.files += Dir['test/**/*.rb'] # Test cases
57
+ s.files += Dir['examples/**/*.rb'] # Examples
58
+
59
+ s.files += ['.gemtest'] # Support for gem-test
60
+
61
+ s.require_paths = ['lib']
62
+
63
+ s.test_files = Dir.glob('test/**/test_*.rb')
64
+
65
+ s.extra_rdoc_files = ['README.md', 'LICENSE.md',
66
+ 'API-CHANGES.rdoc', 'History.rdoc']
67
+ s.rdoc_options = ["--title", "Rubytree Documentation", "--quiet"]
68
+
69
+ s.add_runtime_dependency 'structured_warnings' , '~> 0.2'
70
+ s.add_runtime_dependency 'json' , '~> 1.8'
71
+
72
+ # Note: Rake is added as a development and test dependency in the Gemfile.
73
+ s.add_development_dependency 'bundler' , '~> 1.7'
74
+ s.add_development_dependency 'rdoc' , '~> 4.2'
75
+ s.add_development_dependency 'yard' , '~> 0.8'
76
+ s.add_development_dependency 'rtagstask' , '~> 0.0'
77
+
78
+ s.post_install_message = <<-EOF
79
+ ========================================================================
80
+ Thank you for installing RubyTree.
81
+
82
+ Note:: As of 0.9.5, the Tree::TreeNode#add method has 'move' semantics.
83
+
84
+ Details of the API changes are documented in the API-CHANGES file.
85
+ ========================================================================
86
+ EOF
87
+
88
+ end