Class: Hash

Inherits:
Object show all
Defined in:
lib/widget_list/md5.rb,
lib/widget_list/hash.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.from_array(array = []) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/widget_list/hash.rb', line 31

def self.from_array(array = [])
  h = Hash.new
  array.size.times do |t|
    h[t] = array[t]
  end
  h
end

Instance Method Details

#deep_merge(hash) ⇒ Object

Merges self with another hash, recursively.

This code was lovingly stolen from some random gem: gemjack.com/gems/tartan-0.1.1/classes/Hash.html

Thanks to whoever made it.



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

def deep_merge(hash)
  target = dup

  hash.keys.each do |key|
    if hash[key].is_a? Hash and self[key].is_a? Hash
      target[key] = target[key].deep_merge(hash[key])
      next
    end

    target[key] = hash[key]
  end

  target
end

#deep_merge!(second) ⇒ Object

From: www.gemtacular.com/gemdocs/cerberus-0.2.2/doc/classes/Hash.html File lib/cerberus/utils.rb, line 42



65
66
67
68
69
70
71
72
73
# File 'lib/widget_list/hash.rb', line 65

def deep_merge!(second)
  second.each_pair do |k,v|
    if self[k].is_a?(Hash) and second[k].is_a?(Hash)
      self[k].deep_merge!(second[k])
    else
      self[k] = second[k]
    end
  end
end

#deep_merge2(other) ⇒ Object



79
80
81
82
83
84
85
86
87
# File 'lib/widget_list/hash.rb', line 79

def deep_merge2(other)
  deep_proc = Proc.new { |k, s, o|
    if s.kind_of?(Hash) && o.kind_of?(Hash)
      next s.merge(o, &deep_proc)
    end
    next o
  }
  merge(other, &deep_proc)
end

#deep_merge3(second) ⇒ Object



90
91
92
93
94
95
96
97
98
# File 'lib/widget_list/hash.rb', line 90

def deep_merge3(second)

  # From: http://www.ruby-forum.com/topic/142809
  # Author: Stefan Rusterholz

  merger = proc { |key,v1,v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
  self.merge(second, &merger)

end

#keep_merge(hash) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/widget_list/hash.rb', line 101

def keep_merge(hash)
  target = dup
  hash.keys.each do |key|
    if hash[key].is_a? Hash and self[key].is_a? Hash
      target[key] = target[key].keep_merge(hash[key])
      next
    end
    #target[key] = hash[key]
    target.update(hash) { |key, *values| values.flatten.uniq }
  end
  target
end

#md5keyObject



16
17
18
# File 'lib/widget_list/md5.rb', line 16

def md5key
  sort.map(&:md5key).join
end

#to_paramsObject



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
# File 'lib/widget_list/hash.rb', line 3

def to_params
  params = ''
  stack = []

  each do |k, v|
    if v.is_a?(Hash)
      stack << [k,v]
    elsif v.is_a?(Array)
      stack << [k,Hash.from_array(v)]
    else
      params << "#{k}=#{v}&"
    end
  end

  stack.each do |parent, hash|
    hash.each do |k, v|
      if v.is_a?(Hash)
        stack << ["#{parent}[#{k}]", v]
      else
        params << "#{parent}[#{k}]=#{v}&"
      end
    end
  end

  params.chop!
  params
end