@@ -94,7 +94,9 @@ def fields
9494 end
9595 rescue StandardError
9696 cls = self . class . name . split ( "::" ) . last
97+ # rubocop:disable Layout/LineLength
9798 message = "Failed to parse #{ cls } .#{ __method__ } from #{ value . class } to #{ target . inspect } . To get the unparsed API response, use #{ cls } [:#{ __method__ } ]."
99+ # rubocop:enable Layout/LineLength
98100 raise OpenAI ::ConversionError . new ( message )
99101 end
100102 end
@@ -205,14 +207,13 @@ def coerce(value, state:)
205207 instance = new
206208 data = instance . to_h
207209
210+ # rubocop:disable Metrics/BlockLength
208211 fields . each do |name , field |
209212 mode , required , target = field . fetch_values ( :mode , :required , :type )
210213 api_name , nilable , const = field . fetch_values ( :api_name , :nilable , :const )
211214
212215 unless val . key? ( api_name )
213- if const != OpenAI ::Util ::OMIT
214- exactness [ :yes ] += 1
215- elsif required && mode != :dump
216+ if required && mode != :dump && const == OpenAI ::Util ::OMIT
216217 exactness [ nilable ? :maybe : :no ] += 1
217218 else
218219 exactness [ :yes ] += 1
@@ -238,6 +239,7 @@ def coerce(value, state:)
238239 end
239240 data . store ( name , converted )
240241 end
242+ # rubocop:enable Metrics/BlockLength
241243
242244 keys . each { data . store ( _1 , val . fetch ( _1 ) ) }
243245 instance
0 commit comments