Class: DeeperHash::Meta

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

Class Method Summary collapse

Class Method Details

.each(hash, &block) ⇒ Object



6
7
8
# File 'lib/deeper_hash/meta.rb', line 6

def each(hash, &block)
  traverse(hash, [], &block)
end

.include?(hash, other_hash) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/deeper_hash/meta.rb', line 46

def include?(hash, other_hash)
  return true if hash == other_hash

  other_hash.each do |k, v|
    if hash[k].is_a?(Hash) && v.is_a?(Hash)
      return false unless include?(hash[k], v)
    else
      return false unless hash[k] == v
    end
  end
  true
end

.merge(hash, other_hash) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/deeper_hash/meta.rb', line 34

def merge(hash, other_hash)
  hash.dup.tap do |h|
    other_hash.each do |k, v|
      if h[k].is_a?(Hash) && v.is_a?(Hash)
        h[k] = merge(h[k], v)
      else
        h[k] = v
      end
    end
  end
end

.reject(hash, &block) ⇒ Object



28
29
30
31
32
# File 'lib/deeper_hash/meta.rb', line 28

def reject(hash, &block)
  transform(hash) do |k, v, h|
    h[k] = v unless block.call(k,v)
  end
end

.select(hash, &block) ⇒ Object



22
23
24
25
26
# File 'lib/deeper_hash/meta.rb', line 22

def select(hash, &block)
  transform(hash) do |k, v, h|
    h[k] = v if block.call(k,v)
  end
end

.set(hash, value, keys) ⇒ Object



59
60
61
62
63
# File 'lib/deeper_hash/meta.rb', line 59

def set(hash, value, keys)
  keys[0..-2].inject(hash) do |acc, e|
    acc[e] ||= {}
  end[keys.last] = value
end

.transform_keys(hash, &block) ⇒ Object



10
11
12
13
14
# File 'lib/deeper_hash/meta.rb', line 10

def transform_keys(hash, &block)
  transform(hash, include_hash_values: true) do |k, v, h|
    h[block.call(k)] = v
  end
end

.transform_values(hash, &block) ⇒ Object



16
17
18
19
20
# File 'lib/deeper_hash/meta.rb', line 16

def transform_values(hash, &block)
  transform(hash) do |k, v, h|
    h[k] = block.call(v) unless v.is_a?(Hash)
  end
end