Class: Hash

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

Instance Method Summary collapse

Instance Method Details

#optimizeObject

TODO: Refactoring



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/object_extention.rb', line 3

def optimize
  routes = []
  singleton_hash = {}
  first_keys = self.keys
  second_keys = []
  third_keys = []

  first_keys.each do |key|
    unless self[key].is_a?(Hash)
      routes << [key]
      next
    end
    second_keys << [key, self[key].keys]
  end

  second_keys.each do |second_key|
    second_key.last.each do |key|
      unless self[second_key.first][key].is_a?(Hash)
        routes << [second_key.first, key]
        next
      end
      third_keys << [second_key.first, key, self[second_key.first][key].keys]
    end
  end

  third_keys.each do |third_key|
    third_key.last.each do |key|
      unless self[third_key.first][third_key[1]][key].is_a?(Hash)
        routes << [third_key.first, third_key[1], key]
        next
      end
      force_keys << [third_key.first, third_key[1], key, self[third_key.first][third_key[1]][key].keys]
    end
  end

  routes.each do |route|
    val = self.dup
    route.each do |key|
      val = val[key]
    end
    base = route.shift.to_s
    key_name = route.inject(base) {|key, map| key.to_s + "[" + map.to_s + "]" }
    singleton_hash.update({key_name=>val.to_s})
  end

  singleton_hash
end