rubytree 0.9.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -38,7 +38,7 @@
38
38
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
39
  #
40
40
 
41
- require 'tree'
41
+ require_relative '../tree'
42
42
 
43
43
  module Tree
44
44
 
@@ -114,7 +114,7 @@ module Tree
114
114
  # @raise [ArgumentError] This exception is raised if two children are
115
115
  # already present.
116
116
  def add(child)
117
- raise ArgumentError, "Already has two child nodes" if @children.size == 2
117
+ raise ArgumentError, 'Already has two child nodes' if @children.size == 2
118
118
 
119
119
  super(child)
120
120
  end
@@ -150,12 +150,12 @@ module Tree
150
150
  # @raise [ArgumentError] This exception is raised if a non-hash is passed.
151
151
  # @return [Array] Array of child nodes added
152
152
  def add_from_hash(hashed_subtree)
153
- raise ArgumentError, "Too many children"\
153
+ raise ArgumentError, 'Too many children'\
154
154
  if hashed_subtree.size + @children.size > 2
155
155
  super(hashed_subtree)
156
156
  end
157
157
 
158
- # Performs inorder traversal (including this node).
158
+ # Performs in-order traversal (including this node).
159
159
  #
160
160
  # @yieldparam node [Tree::BinaryTreeNode] Each node (in-order).
161
161
  #
@@ -164,9 +164,12 @@ module Tree
164
164
  #
165
165
  # @since 0.9.0
166
166
  #
167
+ # @param [Object] block
168
+ #
167
169
  # @see #each
168
170
  # @see #preordered_each
169
171
  # @see #postordered_each
172
+ # noinspection RubyUnusedLocalVariable
170
173
  def inordered_each(&block)
171
174
 
172
175
  return self.to_enum unless block_given?
@@ -179,13 +182,13 @@ module Tree
179
182
  node_stack.push(current_node)
180
183
  current_node = current_node.left_child
181
184
  else
182
- current_node = node_stack.pop()
185
+ current_node = node_stack.pop
183
186
  yield current_node
184
187
  current_node = current_node.right_child
185
188
  end
186
189
  end
187
190
 
188
- return self if block_given?
191
+ self if block_given?
189
192
 
190
193
  end
191
194
 
@@ -201,7 +204,7 @@ module Tree
201
204
  #
202
205
  # @raise [ArgumentError] If the index is out of limits.
203
206
  def set_child_at(child, at_index)
204
- raise ArgumentError "A binary tree cannot have more than two children."\
207
+ raise ArgumentError 'A binary tree cannot have more than two children.'\
205
208
  unless (0..1).include? at_index
206
209
 
207
210
  @children[at_index] = child
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # = rubytree_deps.rb - Dependencies for RubyTree
4
4
  #
5
- # Centralizes and lists the dependencies forthe RubyTree gem.
5
+ # Centralizes and lists the dependencies for the RubyTree gem.
6
6
  #
7
7
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
8
8
  #
@@ -40,10 +40,10 @@
40
40
  require 'structured_warnings'
41
41
  require 'json'
42
42
 
43
- require 'tree/version'
44
- require 'tree/utils/metrics_methods'
45
- require 'tree/utils/path_methods'
46
- require 'tree/utils/camel_case_method_handler'
47
- require 'tree/utils/json_converter'
48
- require 'tree/utils/tree_merge_handler'
49
- require 'tree/utils/hash_converter'
43
+ require_relative '../tree/version'
44
+ require_relative '../tree/utils/metrics_methods'
45
+ require_relative '../tree/utils/path_methods'
46
+ require_relative '../tree/utils/camel_case_method_handler'
47
+ require_relative '../tree/utils/json_converter'
48
+ require_relative '../tree/utils/tree_merge_handler'
49
+ require_relative '../tree/utils/hash_converter'
@@ -4,9 +4,9 @@
4
4
  #
5
5
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
6
6
  #
7
- # Time-stamp: <2015-05-30 14:14:09 anupam>
7
+ # Time-stamp: <2017-12-21 13:42:15 anupam>
8
8
  #
9
- # Copyright (C) 2012, 2013, 2015 Anupam Sengupta <anupamsg@gmail.com>
9
+ # Copyright (C) 2012, 2013, 2015, 2017 Anupam Sengupta <anupamsg@gmail.com>
10
10
  #
11
11
  # All rights reserved.
12
12
  #
@@ -36,6 +36,7 @@
36
36
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
37
  #
38
38
 
39
+ require_relative '../../../lib/tree'
39
40
  require 'structured_warnings'
40
41
 
41
42
  module Tree::Utils
@@ -47,17 +48,17 @@ module Tree::Utils
47
48
  # Allow the deprecated CamelCase method names. Display a warning.
48
49
  # :nodoc:
49
50
  def method_missing(meth, *args, &blk)
50
- if self.respond_to?(new_method_name = to_snake_case(meth))
51
- warn DeprecatedMethodWarning,
52
- "The camelCased methods are deprecated. "\
51
+ if self.respond_to?((new_method_name = to_snake_case(meth)))
52
+ warn StructuredWarnings::DeprecatedMethodWarning,
53
+ 'The camelCased methods are deprecated. ' +
53
54
  "Please use #{new_method_name} instead of #{meth}"
54
- return send(new_method_name, *args, &blk)
55
+ send(new_method_name, *args, &blk)
55
56
  else
56
57
  super
57
58
  end
58
59
  end
59
60
 
60
- private
61
+ protected
61
62
 
62
63
  # @!visibility private
63
64
  # Convert a CamelCasedWord to a underscore separated camel_cased_word.
@@ -65,11 +66,11 @@ module Tree::Utils
65
66
  # @param [String] camel_cased_word The word to be converted to snake_case.
66
67
  # @return [String] the snake_cased_word.
67
68
  def to_snake_case(camel_cased_word)
68
- word = camel_cased_word.to_s.dup
69
+ word = camel_cased_word.to_s
69
70
  word.gsub!(/::/, '/')
70
71
  word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
71
72
  word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
72
- word.tr!("-", "_")
73
+ word.tr!('-', '_')
73
74
  word.downcase!
74
75
  word
75
76
  end
@@ -37,6 +37,8 @@
37
37
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38
38
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
39
 
40
+ require_relative '../../../lib/tree/utils/utils'
41
+
40
42
  module Tree::Utils::HashConverter
41
43
 
42
44
  def self.included(base)
@@ -92,16 +94,16 @@ module Tree::Utils::HashConverter
92
94
  # values that are not hashes or nils.
93
95
 
94
96
  def from_hash(hash)
95
- raise ArgumentError, "Argument must be a type of hash"\
97
+ raise ArgumentError, 'Argument must be a type of hash'\
96
98
  unless hash.is_a?(Hash)
97
99
 
98
- raise ArgumentError, "Hash must have one top-level element"\
100
+ raise ArgumentError, 'Hash must have one top-level element'\
99
101
  if hash.size != 1
100
102
 
101
103
  root, children = hash.first
102
104
 
103
105
  unless [Hash, NilClass].include?(children.class)
104
- raise ArgumentError, "Invalid child. Must be nil or hash."
106
+ raise ArgumentError, 'Invalid child. Must be nil or hash.'
105
107
  end
106
108
 
107
109
  node = self.new(*root)
@@ -138,7 +140,7 @@ module Tree::Utils::HashConverter
138
140
  # @return [Array] Array of child nodes added
139
141
  # @see ClassMethods#from_hash
140
142
  def add_from_hash(children)
141
- raise ArgumentError, "Argument must be a type of hash"\
143
+ raise ArgumentError, 'Argument must be a type of hash'\
142
144
  unless children.is_a?(Hash)
143
145
 
144
146
  child_nodes = []
@@ -35,6 +35,7 @@
35
35
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36
36
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
37
 
38
+ require_relative '../utils/utils'
38
39
  require 'json'
39
40
 
40
41
  # Provides utility methods to convert a {Tree::TreeNode} to and from
@@ -57,21 +58,24 @@ module Tree::Utils::JSONConverter
57
58
  # Rails uses JSON in ActiveSupport, and all Rails JSON encoding goes through
58
59
  # +as_json+.
59
60
  #
61
+ # @param [Object] options
62
+ #
60
63
  # @see #to_json
61
64
  # @see http://stackoverflow.com/a/6880638/273808
65
+ # noinspection RubyUnusedLocalVariable
62
66
  def as_json(options = {})
63
67
 
64
68
  json_hash = {
65
- "name" => name,
66
- "content" => content,
67
- JSON.create_id => self.class.name
69
+ name: name,
70
+ content: content,
71
+ JSON.create_id => self.class.name
68
72
  }
69
73
 
70
74
  if has_children?
71
- json_hash["children"] = children
75
+ json_hash['children'] = children
72
76
  end
73
77
 
74
- return json_hash
78
+ json_hash
75
79
 
76
80
  end
77
81
 
@@ -114,13 +118,13 @@ module Tree::Utils::JSONConverter
114
118
  # @see http://flori.github.com/json
115
119
  def json_create(json_hash)
116
120
 
117
- node = new(json_hash["name"], json_hash["content"])
121
+ node = new(json_hash['name'], json_hash['content'])
118
122
 
119
- json_hash["children"].each do |child|
123
+ json_hash['children'].each do |child|
120
124
  node << child
121
- end if json_hash["children"]
125
+ end if json_hash['children']
122
126
 
123
- return node
127
+ node
124
128
 
125
129
  end
126
130
  end
@@ -4,9 +4,9 @@
4
4
  #
5
5
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
6
6
  #
7
- # Time-stamp: <2015-05-30 14:23:23 anupam>
7
+ # Time-stamp: <2017-12-21 12:49:25 anupam>
8
8
  #
9
- # Copyright (C) 2013, 2015 Anupam Sengupta <anupamsg@gmail.com>
9
+ # Copyright (C) 2013, 2015, 2017 Anupam Sengupta <anupamsg@gmail.com>
10
10
  #
11
11
  # All rights reserved.
12
12
  #
@@ -36,11 +36,13 @@
36
36
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
37
  #
38
38
 
39
+ require_relative '../../../lib/tree'
39
40
  require 'structured_warnings'
40
41
 
41
42
  module Tree::Utils
42
43
  # Provides utility functions to measure various tree metrics.
43
44
  module TreeMetricsHandler
45
+ # noinspection RubyUnusedLocalVariable
44
46
  def self.included(base)
45
47
 
46
48
  # @!group Metrics and Measures
@@ -66,7 +68,7 @@ module Tree::Utils
66
68
  # @return [Integer] The total number of nodes in this (sub)tree.
67
69
  # @see #size
68
70
  def length
69
- size()
71
+ self.size
70
72
  end
71
73
 
72
74
  # @!attribute [r] node_height
@@ -127,9 +129,9 @@ module Tree::Utils
127
129
  #
128
130
  # @see #node_depth
129
131
  def depth
130
- warn DeprecatedMethodWarning,
131
- "This method is deprecated. "\
132
- "Please use node_depth() or node_height() instead (bug # 22535)"
132
+ warn StructuredWarnings::DeprecatedMethodWarning,
133
+ 'This method is deprecated. '\
134
+ 'Please use node_depth() or node_height() instead (bug # 22535)'
133
135
 
134
136
  return 1 if is_leaf?
135
137
  1 + @children.collect { |child| child.depth }.max
@@ -36,9 +36,12 @@
36
36
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
37
  #
38
38
 
39
+ require_relative '../../../lib/tree'
40
+
39
41
  module Tree::Utils
40
42
  # Provides utility methods for path extraction
41
43
  module TreePathHandler
44
+ # noinspection RubyUnusedLocalVariable
42
45
  def self.included(base)
43
46
 
44
47
  # @!group Node Path
@@ -53,7 +56,7 @@ module Tree::Utils
53
56
  # @return [String] The node path with names separated using the specified
54
57
  # separator.
55
58
  def path_as_string(separator = '=>')
56
- path_as_array().join(separator)
59
+ path_as_array.join(separator)
57
60
  end
58
61
 
59
62
  # Returns the node-names from this node to the root as an array. The first
@@ -61,8 +64,8 @@ module Tree::Utils
61
64
  #
62
65
  # @return [Array] The array containing the node names for the path to this
63
66
  # node
64
- def path_as_array()
65
- get_path_name_array().reverse
67
+ def path_as_array
68
+ get_path_name_array.reverse
66
69
  end
67
70
 
68
71
  # @!visibility private
@@ -76,10 +79,9 @@ module Tree::Utils
76
79
  path_array = current_array_path + [name]
77
80
 
78
81
  if !parent # If detached node or root node.
79
- return path_array
82
+ path_array
80
83
  else # Else recurse to parent node.
81
84
  path_array = parent.get_path_name_array(path_array)
82
- return path_array
83
85
  end
84
86
  end
85
87
 
@@ -35,6 +35,8 @@
35
35
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
36
  #
37
37
 
38
+ require_relative '../../../lib/tree/utils/utils'
39
+
38
40
  # Provides utility methods to merge two {Tree::TreeNode} based trees.
39
41
  # @since 0.9.0
40
42
  module Tree::Utils::TreeMergeHandler
@@ -60,8 +62,7 @@ module Tree::Utils::TreeMergeHandler
60
62
  # have the same root node as self.
61
63
  def merge(other_tree)
62
64
  check_merge_prerequisites(other_tree)
63
- new_tree = merge_trees(self.root.dup, other_tree.root)
64
- return new_tree
65
+ merge_trees(self.root.dup, other_tree.root)
65
66
  end
66
67
 
67
68
  # Merge in another tree (that shares the same root node) into +this+ tree.
@@ -102,7 +103,7 @@ module Tree::Utils::TreeMergeHandler
102
103
  end
103
104
  end
104
105
 
105
- # Utility function to recursivley merge two subtrees.
106
+ # Utility function to recursively merge two subtrees.
106
107
  #
107
108
  # @author Darren Oakley (https://github.com/dazoakley)
108
109
  #
@@ -123,7 +124,7 @@ module Tree::Utils::TreeMergeHandler
123
124
  merge_trees( child, tree2[child.name] ) unless tree2[child.name].nil?
124
125
  end
125
126
 
126
- return tree1
127
+ tree1
127
128
  end
128
129
 
129
130
  end
@@ -36,6 +36,9 @@
36
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
+
40
+ require_relative '../../../lib/tree'
41
+
39
42
  module Tree::Utils
40
43
  # Empty module. Being used as a namespace.
41
44
  end
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # Author:: Anupam Sengupta (anupamsg@gmail.com)
6
6
  #
7
- # Copyright (c) 2012, 2013, 2014, 2015 Anupam Sengupta
7
+ # Copyright (c) 2012, 2013, 2014, 2015, 2017 Anupam Sengupta
8
8
  #
9
9
  # All rights reserved.
10
10
  #
@@ -37,5 +37,5 @@
37
37
  #
38
38
  module Tree
39
39
  # Rubytree Package Version
40
- VERSION = '0.9.7'
40
+ VERSION = '1.0.0'
41
41
  end
@@ -7,4 +7,4 @@
7
7
  # Copyright (C) 2015 Anupam Sengupta <anupamsg@gmail.com>
8
8
  #
9
9
 
10
- require "tree"
10
+ require 'tree'
@@ -7,12 +7,12 @@
7
7
  # Copyright (C) 2015 Anupam Sengupta <anupamsg@gmail.com>
8
8
  #
9
9
 
10
- require "rspec"
11
- require "spec_helper"
10
+ require 'rspec'
11
+ require 'spec_helper'
12
12
 
13
13
  describe Tree do
14
14
 
15
- shared_examples_for "any detached node" do
15
+ shared_examples_for 'any detached node' do
16
16
  it 'should not equal "Object.new"' do
17
17
  expect(@tree).not_to eq(Object.new)
18
18
  end
@@ -22,53 +22,53 @@ describe Tree do
22
22
  it 'identifies itself as a root node' do
23
23
  expect(@tree.is_root?).to eq(true)
24
24
  end
25
- it "does not have a parent node" do
25
+ it 'does not have a parent node' do
26
26
  expect(@tree.parent).to eq(nil)
27
27
  end
28
28
 
29
29
  end
30
- context "#initialize", "with empty name and nil content" do
30
+ context '#initialize', 'with empty name and nil content' do
31
31
  before(:each) do
32
- @tree = Tree::TreeNode.new("")
32
+ @tree = Tree::TreeNode.new('')
33
33
  end
34
34
  it 'creates the tree node with name as ""' do
35
- expect(@tree.name).to eq("")
35
+ expect(@tree.name).to eq('')
36
36
  end
37
37
  it "has 'nil' content" do
38
38
  expect(@tree.content).to eq(nil)
39
39
  end
40
40
 
41
- it_behaves_like "any detached node"
41
+ it_behaves_like 'any detached node'
42
42
  end
43
43
 
44
- context "#initialize", "with name 'A' and nil content" do
44
+ context '#initialize', "with name 'A' and nil content" do
45
45
  before(:each) do
46
- @tree = Tree::TreeNode.new("A")
46
+ @tree = Tree::TreeNode.new('A')
47
47
  end
48
48
 
49
49
  it 'creates the tree node with name as "A"' do
50
- expect(@tree.name).to eq("A")
50
+ expect(@tree.name).to eq('A')
51
51
  end
52
52
  it "has 'nil' content" do
53
53
  expect(@tree.content).to eq(nil)
54
54
  end
55
55
 
56
- it_behaves_like "any detached node"
56
+ it_behaves_like 'any detached node'
57
57
  end
58
58
 
59
- context "#initialize", "with node name 'A' and some content" do
59
+ context '#initialize', "with node name 'A' and some content" do
60
60
  before(:each) do
61
- @sample = "sample"
62
- @tree = Tree::TreeNode.new("A", @sample)
61
+ @sample = 'sample'
62
+ @tree = Tree::TreeNode.new('A', @sample)
63
63
  end
64
64
 
65
65
  it 'creates the tree node with name as "A"' do
66
- expect(@tree.name).to eq("A")
66
+ expect(@tree.name).to eq('A')
67
67
  end
68
68
  it "has some content #{@sample}" do
69
69
  expect(@tree.content).to eq(@sample)
70
70
  end
71
71
 
72
- it_behaves_like "any detached node"
72
+ it_behaves_like 'any detached node'
73
73
  end
74
74
  end