Module: Aireview::Utils
- Defined in:
- lib/aireview/utils.rb
Class Method Summary collapse
- .blank?(value) ⇒ Boolean
-
.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.
- .dig(data, *keys) ⇒ Object
-
.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.
- .presence(value) ⇒ Object
- .present?(value) ⇒ Boolean
Class Method Details
.blank?(value) ⇒ 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
10 11 12 |
# File 'lib/aireview/utils.rb', line 10 def present?(value) !blank?(value) end |