Class: Declutter

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

Overview

Declutter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDeclutter


initialize



14
15
16
17
18
19
20
# File 'lib/declutter.rb', line 14

def initialize
  @delete_empty_hashes = true
  @delete_empty_arrays = true
  @delete_redundancies = false
  @delete_nils = false
  @delete_falses = false
end

Instance Attribute Details

#delete_empty_arraysObject

Returns the value of attribute delete_empty_arrays.



6
7
8
# File 'lib/declutter.rb', line 6

def delete_empty_arrays
  @delete_empty_arrays
end

#delete_empty_hashesObject

Returns the value of attribute delete_empty_hashes.



5
6
7
# File 'lib/declutter.rb', line 5

def delete_empty_hashes
  @delete_empty_hashes
end

#delete_falsesObject

Returns the value of attribute delete_falses.



9
10
11
# File 'lib/declutter.rb', line 9

def delete_falses
  @delete_falses
end

#delete_nilsObject

Returns the value of attribute delete_nils.



8
9
10
# File 'lib/declutter.rb', line 8

def delete_nils
  @delete_nils
end

#delete_redundanciesObject

Returns the value of attribute delete_redundancies.



7
8
9
# File 'lib/declutter.rb', line 7

def delete_redundancies
  @delete_redundancies
end

Class Method Details

.process(obj) ⇒ Object


self.process



45
46
47
# File 'lib/declutter.rb', line 45

def self.process(obj)
  self.new.process obj
end

Instance Method Details

#keep_element?(v) ⇒ Boolean


keep_element

Returns:



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/declutter.rb', line 101

def keep_element?(v)
  # hash
  if v.is_a?(Hash)
    if @delete_empty_hashes and v.empty?
      return false
    end
    
  # array
  elsif v.is_a?(Array)
    if @delete_empty_arrays and v.empty?
      return false
    end
    
  # nil
  elsif v.nil?
    return !@delete_nils
    
  # false
  elsif not v
    return !@delete_falses
  end
  
  # if we get this far then we're keeping the element
  return true
end

#process(obj) ⇒ Object


process Process hash or array. Anything else is left as is.



30
31
32
33
34
35
36
# File 'lib/declutter.rb', line 30

def process(obj)
  if obj.is_a?(Hash)
    process_hash obj
  elsif obj.is_a?(Array)
    process_array obj
  end
end

#process_array(arr) ⇒ Object


process_array



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/declutter.rb', line 75

def process_array(arr)
  hold = arr.clone
  arr.clear
  
  # add back elements that are acceptable
  hold.each do |child|
    process child
    
    if keep_element?(child)
      arr.push child
    end
  end
  
  # uniq array if necessary
  if @delete_redundancies
    arr.uniq!
  end
end

#process_hash(hsh) ⇒ Object


process_hash



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/declutter.rb', line 56

def process_hash(hsh)
  hsh.keys.each do |k|
    v = hsh[k]
    process v
    
    # delete or process element
    if not keep_element?(v)
      hsh.delete k
    end
  end
end