Module: CoreExtensions::Hash

Defined in:
lib/core_ext.rb

Overview

HASH ############################################################################################

Instance Method Summary collapse

Instance Method Details

#deep_each(&blk) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/core_ext.rb', line 133

def deep_each(&blk)
  keys.each do |key|
    val = self[key]
    if blk.arity == 3
      blk.call(key, val, self)
      val = self[key]
    else
      blk.call(key, val)
    end
    val.deep_each(&blk)  if val.respond_to?(:deep_each)
  end
  self
end

#deep_map(&blk) ⇒ Object



147
148
149
150
151
152
153
154
# File 'lib/core_ext.rb', line 147

def deep_map(&blk)
  keys.each do |key|
    val = self[key]
    (blk.arity == 3) ? blk.call(key, val, self) : blk.call(key, val)
    val.deep_each(&blk)  if val.respond_to?(:deep_each)
  end
  self
end

#deep_reject(&blk) ⇒ Object



121
122
123
# File 'lib/core_ext.rb', line 121

def deep_reject(&blk)
  dup.deep_reject!(&blk)
end

#deep_reject!(&blk) ⇒ Object



125
126
127
128
129
130
131
# File 'lib/core_ext.rb', line 125

def deep_reject!(&blk)
  each do |key, val|
    val.deep_reject!(&blk)  if val.respond_to?(:deep_reject!)
    delete(key)  if blk.call(key, val)
  end
  self
end

#force_utf8Object



156
157
158
159
160
161
162
163
# File 'lib/core_ext.rb', line 156

def force_utf8
  map do |key, val|
    [
      key.respond_to?(:force_utf8) ? key.force_utf8 : key,
      val.respond_to?(:force_utf8) ? val.force_utf8 : val,
    ]
  end.to_h
end

#safe_dig(*path) ⇒ Object



165
166
167
168
169
170
# File 'lib/core_ext.rb', line 165

def safe_dig(*path)
  dig(*path)
rescue TypeError => ex
  return nil  if ex.message.include?('does not have #dig method')
  raise
end