hash.rb
992 Bytes
1
2
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
50
51
52
53
54
55
56
57
58
59
60
61
module CoreExt
module Hash
def pick(*picks)
picks = picks.flatten
picks.inject({}) {|result, key| self.key?(key) ? result.merge(key => self[key]) : result}
end
def pick!(*picks)
picks = picks.flatten
keys.each {|key| self.delete(key) unless picks.member?(key) }
end
def except(*picks)
result = self.dup
result.except!(*picks)
result
end
def except!(*picks)
picks = picks.flatten
keys.each {|key| self.delete(key) if picks.member?(key) }
end
def inspect!(depth=0)
s = ""
self.each do |k,v|
s << (" " * depth)
s << k
s << ": "
if v.is_a?(Hash)
s << "{\n"
s << v.inspect!(depth + 2)
s << (" " * depth)
s << "}"
elsif v.is_a?(Array)
s << v.inspect
else
s << v.to_s
end
s << "\n"
end
s
end
end
end
Hash.send :include, CoreExt::Hash