Class: Hash

Inherits:
Object
  • Object
show all
Defined in:
lib/tengine/support/core_ext/hash/keys.rb,
lib/tengine/support/core_ext/hash/compact.rb,
lib/tengine/support/core_ext/hash/deep_dup.rb

Instance Method Summary collapse

Instance Method Details

#compactObject

Intuitive, see the source.



12
13
14
# File 'lib/tengine/support/core_ext/hash/compact.rb', line 12

def compact
  dup.tap {|i| i.compact! }
end

#compact!Object

Destructive elimination of nil, like Array#compact!



5
6
7
8
9
# File 'lib/tengine/support/core_ext/hash/compact.rb', line 5

def compact!
  reject! do |k, v|
    v.nil?
  end
end

#deep_dupObject

Returns a deep copy of hash.



16
17
18
19
20
21
22
23
# File 'lib/tengine/support/core_ext/hash/deep_dup.rb', line 16

def deep_dup
  duplicate = self.dup
  duplicate.each_pair do |k,v|
    tv = duplicate[k]
    duplicate[k] = tv.respond_to?(:deep_dup) && v.respond_to?(:deep_dup) ? tv.deep_dup : v
  end
  duplicate
end

#deep_stringify_keysObject

Return a new hash with all keys converted to strings recursively.



8
9
10
# File 'lib/tengine/support/core_ext/hash/keys.rb', line 8

def deep_stringify_keys
  deep_dup.deep_stringify_keys!
end

#deep_stringify_keys!Object

Destructively convert all keys to strings recursively.



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/tengine/support/core_ext/hash/keys.rb', line 13

def deep_stringify_keys!
  stringify_keys! # active_support/core_ext/hash/keysのメソッドをそのまま使う
  values.each do |value|
    if value.respond_to?(:deep_stringify_keys!)
      value.deep_stringify_keys!
    elsif value.respond_to?(:each)
      value.each{|v| v.deep_stringify_keys! if v.respond_to?(:deep_stringify_keys!)}
    end
  end
  self
end

#deep_symbolize_keysObject

Return a new hash with all keys converted to symbols recursively, as long as they respond to to_sym.



27
28
29
# File 'lib/tengine/support/core_ext/hash/keys.rb', line 27

def deep_symbolize_keys
  deep_dup.deep_symbolize_keys!
end

#deep_symbolize_keys!Object

Destructively convert all keys to symbols recursively, as long as they respond to to_sym.



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/tengine/support/core_ext/hash/keys.rb', line 33

def deep_symbolize_keys!
  symbolize_keys! # active_support/core_ext/hash/keysのメソッドをそのまま使う
  values.each do |value|
    if value.respond_to?(:deep_symbolize_keys!)
      value.deep_symbolize_keys!
    elsif value.respond_to?(:each)
      value.each{|v| v.deep_symbolize_keys! if v.respond_to?(:deep_symbolize_keys!)}
    end
  end
  self
end