Skip to content

Commit 3642ba3

Browse files
chore: refine #inspect and #to_s for model classes
1 parent f861346 commit 3642ba3

File tree

3 files changed

+46
-15
lines changed

3 files changed

+46
-15
lines changed

lib/openai/internal/type/base_model.rb

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,27 @@ def deconstruct_keys(keys)
338338
.to_h
339339
end
340340

341+
class << self
342+
# @param model [OpenAI::Internal::Type::BaseModel]
343+
#
344+
# @return [Hash{Symbol=>Object}]
345+
def walk(model)
346+
walk = ->(x) do
347+
case x
348+
in OpenAI::Internal::Type::BaseModel
349+
walk.call(x.to_h)
350+
in Hash
351+
x.transform_values(&walk)
352+
in Array
353+
x.map(&walk)
354+
else
355+
x
356+
end
357+
end
358+
walk.call(model)
359+
end
360+
end
361+
341362
# @param a [Object]
342363
#
343364
# @return [String]
@@ -373,13 +394,11 @@ def inspect(depth: 0)
373394
depth = depth.succ
374395
deferred = fields.transform_values do |field|
375396
type, required, nilable = field.fetch_values(:type, :required, :nilable)
376-
-> do
377-
[
378-
OpenAI::Internal::Type::Converter.inspect(type, depth: depth),
379-
!required || nilable ? "nil" : nil
380-
].compact.join(" | ")
381-
end
382-
.tap { _1.define_singleton_method(:inspect) { call } }
397+
inspected = [
398+
OpenAI::Internal::Type::Converter.inspect(type, depth: depth),
399+
!required || nilable ? "nil" : nil
400+
].compact.join(" | ")
401+
-> { inspected }.tap { _1.define_singleton_method(:inspect) { call } }
383402
end
384403

385404
"#{name}[#{deferred.inspect}]"
@@ -389,15 +408,12 @@ def inspect(depth: 0)
389408
# @api private
390409
#
391410
# @return [String]
392-
def inspect
393-
rows = @data.map do
394-
"#{_1}=#{self.class.known_fields.key?(_1) ? public_send(_1).inspect : ''}"
395-
rescue OpenAI::Errors::ConversionError
396-
"#{_1}=#{_2.inspect}"
397-
end
411+
def to_s = self.class.walk(@data).to_s
398412

399-
"#<#{self.class}:0x#{object_id.to_s(16)} #{rows.join(' ')}>"
400-
end
413+
# @api private
414+
#
415+
# @return [String]
416+
def inspect = "#<#{self.class}:0x#{object_id.to_s(16)} #{self}>"
401417
end
402418
end
403419
end

rbi/lib/openai/internal/type/base_model.rbi

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,11 @@ module OpenAI
175175
sig { params(keys: T.nilable(T::Array[Symbol])).returns(OpenAI::Internal::AnyHash) }
176176
def deconstruct_keys(keys); end
177177

178+
class << self
179+
sig { params(model: OpenAI::Internal::Type::BaseModel).returns(OpenAI::Internal::AnyHash) }
180+
def walk(model); end
181+
end
182+
178183
sig { params(a: T.anything).returns(String) }
179184
def to_json(*a); end
180185

@@ -191,6 +196,10 @@ module OpenAI
191196
def inspect(depth: 0); end
192197
end
193198

199+
# @api private
200+
sig { returns(String) }
201+
def to_s; end
202+
194203
# @api private
195204
sig { returns(String) }
196205
def inspect; end

sig/openai/internal/type/base_model.rbs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ module OpenAI
6969

7070
def deconstruct_keys: (::Array[Symbol]? keys) -> ::Hash[Symbol, top]
7171

72+
def self.walk: (
73+
OpenAI::Internal::Type::BaseModel model
74+
) -> ::Hash[Symbol, top]
75+
7276
def to_json: (*top a) -> String
7377

7478
def to_yaml: (*top a) -> String
@@ -77,6 +81,8 @@ module OpenAI
7781

7882
def self.inspect: (?depth: Integer) -> String
7983

84+
def to_s: -> String
85+
8086
def inspect: -> String
8187
end
8288
end

0 commit comments

Comments
 (0)