Class: Text::Gen::Meta

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

Class Method Summary collapse

Class Method Details

.append_kv(hsh, key, val) ⇒ Object



18
19
20
21
22
23
# File 'lib/text/gen/meta.rb', line 18

def append_kv(hsh, key, val)
  key = key.to_s.downcase
  arr = val.is_a?(Array) ? val : Array(val)
  hsh[key] = hsh.key?(key) ? (hsh[key] + arr).uniq : arr.dup
  hsh
end

.clear_kv(hsh, key, val) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/text/gen/meta.rb', line 25

def clear_kv(hsh, key, val)
  return {} if key == "*" && val == "*"

  new_hsh = {}
  if key == "*"
    hsh.each_key { |k| new_hsh[k] = hsh[k].dup.reject { |v| v == val } }
  elsif val == "*"
    hsh.each_key { |k| new_hsh[k] = hsh[k].dup unless k == key }
  else
    hsh.each_key do |k|
      if hsh.key?(k)
        new_hsh[k] = k == key ? hsh[k].select { |v| v != val } : hsh[k].dup
      end
    end
  end

  new_hsh
end

.merge_meta(lhs, rhs) ⇒ Object



7
8
9
10
11
12
13
14
15
16
# File 'lib/text/gen/meta.rb', line 7

def merge_meta(lhs, rhs)
  return {} unless lhs && rhs
  return lhs.dup if rhs.empty?
  return rhs.dup if lhs.empty?

  hsh = {}
  lhs.each { |k, v| append_kv(hsh, k, v) }
  rhs.each { |k, v| append_kv(hsh, k, v) }
  hsh
end