Class: LLM::Object
- Inherits:
-
BasicObject
- Includes:
- Enumerable
- Defined in:
- lib/llm/object.rb,
lib/llm/object/kernel.rb,
lib/llm/object/builder.rb
Overview
The LLM::Object class encapsulates a Hash object. It is
similar in spirit to OpenStruct, and it was introduced after OpenStruct
became a bundled gem rather than a default gem in Ruby 3.5.
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
50
51
52
|
# File 'lib/llm/object.rb', line 50
def initialize(h = {})
@h = h || {}
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &b) ⇒ Object
189
190
191
192
193
194
195
196
197
|
# File 'lib/llm/object.rb', line 189
def method_missing(m, *args, &b)
if m.to_s.end_with?("=")
self[m[0..-2]] = args.first
elsif k = SINGLETON.key(@h, m)
@h[k]
else
nil
end
end
|
Class Method Details
.get(h, k) ⇒ Object?
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
37
38
39
40
|
# File 'lib/llm/object.rb', line 37
def self.get(h, k)
name = key(h, k)
h[name] if name
end
|
.key(h, k) ⇒ String, ...
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/llm/object.rb', line 21
def self.key(h, k)
return nil if k.nil?
if h.key?(k.to_s)
k.to_s
elsif h.key?(k.to_sym)
k.to_sym
else
nil
end
end
|
Instance Method Details
#slice(*args) ⇒ Hash
182
183
184
185
|
# File 'lib/llm/object.rb', line 182
def slice(*args)
return SINGLETON.get(@h, :slice) if args.empty?
@h.slice(*args)
end
|
#each {|k, v| ... } ⇒ void
This method returns an undefined value.
Yields a key|value pair to a block.
59
60
61
|
# File 'lib/llm/object.rb', line 59
def each(&)
@h.each(&)
end
|
In-place transform of values with a block.
67
68
69
|
# File 'lib/llm/object.rb', line 67
def transform_values!(&)
@h.transform_values!(&)
end
|
74
75
76
|
# File 'lib/llm/object.rb', line 74
def [](k)
@h[SINGLETON.key(@h, k)]
end
|
#[]=(k, v) ⇒ void
This method returns an undefined value.
82
83
84
|
# File 'lib/llm/object.rb', line 82
def []=(k, v)
@h[k.to_s] = v
end
|
#to_json ⇒ String
88
89
90
|
# File 'lib/llm/object.rb', line 88
def to_json(...)
LLM.json.dump(to_h, ...)
end
|
#empty? ⇒ Boolean
94
95
96
|
# File 'lib/llm/object.rb', line 94
def empty?
@h.empty?
end
|
#to_h ⇒ Hash
100
101
102
|
# File 'lib/llm/object.rb', line 100
def to_h
@h.dup
end
|
#to_hash ⇒ Hash
106
107
108
|
# File 'lib/llm/object.rb', line 106
def to_hash
@h.transform_keys(&:to_sym)
end
|
#keys ⇒ Array<String>
112
113
114
|
# File 'lib/llm/object.rb', line 112
def keys
@h.keys
end
|
#values ⇒ Array
118
119
120
|
# File 'lib/llm/object.rb', line 118
def values
@h.values
end
|
#key?(k = UNDEFINED) ⇒ Boolean
Also known as:
has_key?
125
126
127
128
|
# File 'lib/llm/object.rb', line 125
def key?(k = UNDEFINED)
return SINGLETON.get(@h, :key?) if k.equal?(UNDEFINED)
@h.key?(SINGLETON.key(@h, k))
end
|
#fetch(k = UNDEFINED, *args, &b) ⇒ Object
134
135
136
137
|
# File 'lib/llm/object.rb', line 134
def fetch(k = UNDEFINED, *args, &b)
return SINGLETON.get(@h, :fetch) if k.equal?(UNDEFINED)
@h.fetch(SINGLETON.key(@h, k), *args, &b)
end
|
#merge(other = UNDEFINED) ⇒ LLM::Object
Returns a new LLM::Object
144
145
146
147
148
149
|
# File 'lib/llm/object.rb', line 144
def merge(other = UNDEFINED)
return SINGLETON.get(@h, :merge) if other.equal?(UNDEFINED)
other = ::Hash.try_convert(other)
raise TypeError, "#{other} cannot be coerced into a Hash" unless other
SINGLETON.from @h.merge(other)
end
|
#delete(k = UNDEFINED) ⇒ void
This method returns an undefined value.
155
156
157
158
|
# File 'lib/llm/object.rb', line 155
def delete(k = UNDEFINED)
return SINGLETON.get(@h, :delete) if k.equal?(UNDEFINED)
@h.delete(SINGLETON.key(@h, k))
end
|
#size ⇒ Integer
Also known as:
length
162
163
164
|
# File 'lib/llm/object.rb', line 162
def size
@h.size
end
|
#each_pair {|| ... } ⇒ Object
169
170
171
|
# File 'lib/llm/object.rb', line 169
def each_pair(&)
@h.each(&)
end
|
#dig(*args) ⇒ Object?
175
176
177
178
|
# File 'lib/llm/object.rb', line 175
def dig(*args)
return SINGLETON.get(@h, :dig) if args.empty?
@h.dig(*args)
end
|