Class: Hash

Inherits:
Object
  • Object
show all
Defined in:
lib/nested_hash_helper.rb

Instance Method Summary collapse

Instance Method Details

#_find_depth(maxx_depth, current_depth) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/nested_hash_helper.rb', line 37

def _find_depth(maxx_depth , current_depth)
	current_class = self.class
	self.each do |current_keys , current_value |
		if current_value.is_a?(current_class)
			maxx_depth  = current_value._find_depth(maxx_depth , current_depth + 1)
		end
	end
	maxx_depth = (maxx_depth > current_depth)? maxx_depth : current_depth
end

#deep_delete(key) ⇒ Object



111
112
113
114
115
116
117
118
119
120
# File 'lib/nested_hash_helper.rb', line 111

def deep_delete(key)
  current_class = self.class
  self.each do |current_keys , current_value|
    if current_keys == key
      self.delete(current_keys)
    elsif current_value.is_a?(current_class)
      current_value.deep_delete(key)
    end
  end
end

#deep_delete_emptyObject



18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/nested_hash_helper.rb', line 18

def deep_delete_empty
	current_class = self.class
	self.each do |current_keys , current_value|
       if current_value.nil? || current_value.empty?
       	  self.delete(current_keys)
       	  next
       end	
       if current_value.is_a?(current_class)
       	    current_value.deep_delete_empty
       end	
	end
end

#deep_except(*excluded_keys) ⇒ Object

Your code goes here…



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/nested_hash_helper.rb', line 5

def deep_except(*excluded_keys)
  current_class = self.class
  self.each do |current_keys , current_value|
if excluded_keys.include?(current_keys)
	 self.delete(current_keys)
	 next
	end
	if current_value.is_a?(current_class)
		current_value.deep_except(*excluded_keys)
    end
end
end

#find_all_values(key) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/nested_hash_helper.rb', line 98

def find_all_values(key)
   current_class = self.class
   values = []
   self.each do |current_keys , current_value|
      if current_value.is_a?(current_class)
         values += current_value.find_all_values(key)
        elsif current_keys == key
         values.push(current_value)
      end
   end
 values
end

#find_deep_intersection(compare_hash) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/nested_hash_helper.rb', line 47

def find_deep_intersection(compare_hash)
	current_class = self.class
	final_hash = current_class.new
    self.each do |current_keys , current_value |
    	if compare_hash.has_key?(current_keys)
    		if current_value.is_a?(current_class) && compare_hash.fetch(current_keys).is_a?(current_class)
               final_hash[current_keys] = current_value.find_deep_intersection(compare_hash.fetch(current_keys))
    	elsif !current_value.is_a?(current_class) && !compare_hash.fetch(current_keys).is_a?(current_class) && (current_value == compare_hash.fetch(current_keys) )
              final_hash[current_keys] = current_value
    	end
    	end
    end
    final_hash
end

#find_deep_keys(value) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/nested_hash_helper.rb', line 62

def find_deep_keys(value)
  current_class = self.class
  deep_keys = []
    self.each do |current_keys , current_value|
       if !current_value.is_a?(current_class) && current_value == value 
             deep_keys = deep_keys.push(current_keys)
        elsif current_value.is_a?(current_class)
          future_deep_keys = current_value.find_deep_keys(value)
          if future_deep_keys.size >= 1
             deep_keys.push(current_keys)
             deep_keys += future_deep_keys
             return deep_keys
          end
       end
    end
    deep_keys
end

#find_depthObject



31
32
33
34
35
# File 'lib/nested_hash_helper.rb', line 31

def find_depth
	  maxx_depth = 1
	  current_depth = 1
	  self._find_depth(maxx_depth , current_depth)
end

#hash_to_arrayObject



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/nested_hash_helper.rb', line 80

def hash_to_array
  current_class = self.class
  final_array = []
    self.each do | current_keys , current_value | 
      temp_array = []
      if current_value.is_a?(current_class)
        temp_array.push(current_keys)
        temp_array += current_value.hash_to_array
        final_array.push(temp_array)
      else
        temp_array.push(current_keys)
        temp_array.push(current_value)
        final_array.push(temp_array)
      end
    end
    final_array
end