rubytree 0.9.5pre6 → 0.9.5pre7

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