diff --git a/lib/mindee/parsing/v2/field/object_field.rb b/lib/mindee/parsing/v2/field/object_field.rb index a21cff16..0394a9c5 100644 --- a/lib/mindee/parsing/v2/field/object_field.rb +++ b/lib/mindee/parsing/v2/field/object_field.rb @@ -85,6 +85,17 @@ def multi_str def get_simple_field(key) @fields.get_simple_field(key) end + + # Get a field by key and ensure it is a ListField. + # @param key [String] Field key to retrieve. + # @return [ListField] The ListField. + # @raise [TypeError] If the field is not a ListField. + def get_list_field(key) + field = @fields.get_list_field(key) + raise TypeError, "Field #{key} is not a ListField" unless field.is_a?(ListField) + + field + end end end end diff --git a/sig/mindee/parsing/v2/field/object_field.rbs b/sig/mindee/parsing/v2/field/object_field.rbs index 7b66b986..c2f4d05f 100644 --- a/sig/mindee/parsing/v2/field/object_field.rbs +++ b/sig/mindee/parsing/v2/field/object_field.rbs @@ -8,6 +8,9 @@ module Mindee class ObjectField < BaseField attr_reader fields: InferenceFields def initialize: (Hash[String | Symbol, untyped], ?Integer) -> void + + def get_list_field: (String) -> ListField + def get_simple_field: (String) -> SimpleField def multi_str: -> String def single_str: -> String diff --git a/spec/data b/spec/data index 0c51e1d3..67ccc1d9 160000 --- a/spec/data +++ b/spec/data @@ -1 +1 @@ -Subproject commit 0c51e1d3e2258404c44280f25f4951ba6fe27324 +Subproject commit 67ccc1d9cf8b6263860f79eafbaa2e8b8dd7ac3f diff --git a/spec/v2/input/local_response_v2_spec.rb b/spec/v2/input/local_response_v2_spec.rb index ccdf8d88..b39a8fb2 100644 --- a/spec/v2/input/local_response_v2_spec.rb +++ b/spec/v2/input/local_response_v2_spec.rb @@ -5,7 +5,7 @@ def assert_local_response(local_response) dummy_secret_key = 'ogNjY44MhvKPGTtVsI8zG82JqWQa68woYQH' - signature = '1df388c992d87897fe61dfc56c444c58fc3c7369c31e2b5fd20d867695e93e85' + signature = 'f390d9f7f57ac04f47b6309d8a40236b0182610804fc20e91b1f6028aaca07a7' expect(local_response.file).to_not be(nil) expect(local_response.valid_hmac_signature?( dummy_secret_key, 'invalid signature' diff --git a/spec/v2/parsing/inference_spec.rb b/spec/v2/parsing/inference_spec.rb index 78fd5f4e..b46b3731 100644 --- a/spec/v2/parsing/inference_spec.rb +++ b/spec/v2/parsing/inference_spec.rb @@ -149,9 +149,11 @@ def load_v2_inference(resource_path) expect(fields['field_object']).to be_a(object_field) field_object = fields.get_object_field('field_object') + expect(field_object.get_list_field('sub_object_list')).to be_a(list_field) lvl1 = field_object.fields - expect(lvl1['sub_object_list']).to be_a(list_field) + expect(lvl1['sub_object_list'].items).not_to be_empty + expect(lvl1['sub_object_list'].items[0]).to be_a(object_field) expect(lvl1['sub_object_object']).to be_a(object_field) sub_object_object = lvl1.get_object_field('sub_object_object')