Module: Aireview::Utils

Defined in:
lib/aireview/utils.rb

Class Method Summary collapse

Class Method Details

.blank?(value) ⇒ Boolean

Returns:

  • (Boolean)


6
7
8
# File 'lib/aireview/utils.rb', line 6

def blank?(value)
  value.nil? || value.to_s.strip.empty?
end

.deep_merge(left, right) ⇒ Object

Merges settings by key: nested hashes merge, everything else (arrays included) is replaced by the right side as a whole.



20
21
22
23
24
25
26
27
28
# File 'lib/aireview/utils.rb', line 20

def deep_merge(left, right)
  left.merge(right) do |_, old_value, new_value|
    if old_value.is_a?(Hash) && new_value.is_a?(Hash)
      deep_merge(old_value, new_value)
    else
      new_value
    end
  end
end

.dig(data, *keys) ⇒ Object



43
44
45
# File 'lib/aireview/utils.rb', line 43

def dig(data, *keys)
  keys.reduce(data) { |accumulator, key| accumulator.is_a?(Hash) ? accumulator[key] : nil }
end

.normalize_hash(value) ⇒ Object

Hash keys are strings at any depth: YAML, env and LLM answers arrive in different shapes, everything downstream works with one.



32
33
34
35
36
37
38
39
40
41
# File 'lib/aireview/utils.rb', line 32

def normalize_hash(value)
  case value
  when Hash
    value.each_with_object({}) { |(key, inner), result| result[key.to_s] = normalize_hash(inner) }
  when Array
    value.map { |item| normalize_hash(item) }
  else
    value
  end
end

.presence(value) ⇒ Object



14
15
16
# File 'lib/aireview/utils.rb', line 14

def presence(value)
  present?(value) ? value.to_s.strip : nil
end

.present?(value) ⇒ Boolean

Returns:

  • (Boolean)


10
11
12
# File 'lib/aireview/utils.rb', line 10

def present?(value)
  !blank?(value)
end