Module: Legion::Extensions::Llm::Utils
- Defined in:
- lib/legion/extensions/llm/utils.rb
Overview
Provides utility functions for data manipulation within the Legion::Extensions::Llm library
Class Method Summary collapse
- .deep_dup(value) ⇒ Object
-
.deep_merge(original, overrides) ⇒ Object
Recursive merge with the safer dup-before-merge policy (10 U7): neither input is mutated.
- .deep_stringify_keys(value) ⇒ Object
- .deep_symbolize_keys(value) ⇒ Object
-
.localhost_url?(url) ⇒ Boolean
The one host-locality detector (10 §1E): localhost/loopback by host, accepting full URLs and bare host values.
- .to_date(value) ⇒ Object
- .to_safe_array(item) ⇒ Object
- .to_time(value) ⇒ Object
Class Method Details
.deep_dup(value) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/legion/extensions/llm/utils.rb', line 65 def deep_dup(value) case value when Hash value.each_with_object({}) do |(key, val), duped| duped[deep_dup(key)] = deep_dup(val) end when Array value.map { |item| deep_dup(item) } else begin value.dup rescue TypeError value end end end |
.deep_merge(original, overrides) ⇒ Object
Recursive merge with the safer dup-before-merge policy (10 U7): neither input is mutated.
35 36 37 38 39 40 41 42 43 |
# File 'lib/legion/extensions/llm/utils.rb', line 35 def deep_merge(original, overrides) deep_dup(original || {}).merge(deep_dup(overrides || {})) do |_key, original_value, overrides_value| if original_value.is_a?(Hash) && overrides_value.is_a?(Hash) deep_merge(original_value, overrides_value) else overrides_value end end end |
.deep_stringify_keys(value) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/legion/extensions/llm/utils.rb', line 82 def deep_stringify_keys(value) case value when Hash value.each_with_object({}) do |(key, val), result| result[key.to_s] = deep_stringify_keys(val) end when Array value.map { |item| deep_stringify_keys(item) } when Symbol value.to_s else value end end |
.deep_symbolize_keys(value) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/legion/extensions/llm/utils.rb', line 97 def deep_symbolize_keys(value) case value when Hash value.each_with_object({}) do |(key, val), result| symbolized_key = key.respond_to?(:to_sym) ? key.to_sym : key result[symbolized_key] = deep_symbolize_keys(val) end when Array value.map { |item| deep_symbolize_keys(item) } else value end end |
.localhost_url?(url) ⇒ Boolean
The one host-locality detector (10 §1E): localhost/loopback by host, accepting full URLs and bare host values.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/legion/extensions/llm/utils.rb', line 47 def localhost_url?(url) require 'uri' text = url.to_s.strip return false if text.empty? host = begin parsed = text.match?(%r{\A[a-z][a-z0-9+.-]*://}) ? URI.parse(text) : URI.parse("http://#{text}") parsed.host rescue URI::InvalidURIError text.split(%r{[:/\s]}, 2).first end return false if host.nil? || host.empty? normalized = host.delete_prefix('[').delete_suffix(']').downcase %w[localhost 127.0.0.1 ::1].include?(normalized) end |
.to_date(value) ⇒ Object
27 28 29 30 31 |
# File 'lib/legion/extensions/llm/utils.rb', line 27 def to_date(value) return unless value value.is_a?(Date) ? value : Date.parse(value.to_s) end |
.to_safe_array(item) ⇒ Object
10 11 12 13 14 15 16 17 18 19 |
# File 'lib/legion/extensions/llm/utils.rb', line 10 def to_safe_array(item) case item when Array item when Hash [item] else Array(item) end end |
.to_time(value) ⇒ Object
21 22 23 24 25 |
# File 'lib/legion/extensions/llm/utils.rb', line 21 def to_time(value) return unless value value.is_a?(Time) ? value : Time.parse(value.to_s) end |