From ff4f81375d06d46af454467990057517312dae3a Mon Sep 17 00:00:00 2001 From: sebastianMindee <130448732+sebastianMindee@users.noreply.github.com> Date: Mon, 9 Feb 2026 17:53:10 +0100 Subject: [PATCH] :sparkles: add complementary accessors for ObjectField --- lib/mindee/parsing/v2/field/object_field.rb | 32 ++++++++++++++++++++ sig/mindee/parsing/v2/field/object_field.rbs | 10 ++++-- spec/v2/parsing/inference_spec.rb | 5 +++ 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/lib/mindee/parsing/v2/field/object_field.rb b/lib/mindee/parsing/v2/field/object_field.rb index 0394a9c5..39a1f548 100644 --- a/lib/mindee/parsing/v2/field/object_field.rb +++ b/lib/mindee/parsing/v2/field/object_field.rb @@ -96,6 +96,38 @@ def get_list_field(key) field end + + # Get a field by key and ensure it is an ObjectField. + # @param key [String] Field key to retrieve. + # @return [ObjectField] The ObjectField. + # @raise [TypeError] If the field is not an ObjectField. + def get_object_field(key) + field = @fields.get_object_field(key) + raise TypeError, "Field #{key} is not an ObjectField" unless field.is_a?(ObjectField) + + field + end + + # Get all simple fields. + # @return [Hash] Simple fields contained in the object. + def simple_fields + # @type var fields: Hash + @fields.select { |_, value| value.is_a?(SimpleField) } + end + + # Get all list fields. + # @return [Hash] List fields contained in the object. + def list_fields + # @type var fields: Hash + @fields.select { |_, value| value.is_a?(ListField) } + end + + # Get all object fields. + # @return [Hash] Object fields contained in the object. + def object_fields + # @type var fields: Hash + @fields.select { |_, value| value.is_a?(ObjectField) } + 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 c2f4d05f..149dd23c 100644 --- a/sig/mindee/parsing/v2/field/object_field.rbs +++ b/sig/mindee/parsing/v2/field/object_field.rbs @@ -1,5 +1,4 @@ -# TypeProf 0.30.1 - +# lib/mindee/parsing/v2/field/object_field.rb module Mindee module Parsing module V2 @@ -9,9 +8,14 @@ module Mindee attr_reader fields: InferenceFields def initialize: (Hash[String | Symbol, untyped], ?Integer) -> void + def get_simple_field: (String) -> SimpleField def get_list_field: (String) -> ListField + def get_object_field: (String) -> ObjectField + + def simple_fields: () -> Hash[String, SimpleField] + def list_fields: () -> Hash[String, ListField] + def object_fields: () -> Hash[String, ObjectField] - def get_simple_field: (String) -> SimpleField def multi_str: -> String def single_str: -> String def to_s: -> String diff --git a/spec/v2/parsing/inference_spec.rb b/spec/v2/parsing/inference_spec.rb index b46b3731..1be2dd39 100644 --- a/spec/v2/parsing/inference_spec.rb +++ b/spec/v2/parsing/inference_spec.rb @@ -149,7 +149,12 @@ 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_simple_field('sub_object_simple')).to be_a(simple_field) expect(field_object.get_list_field('sub_object_list')).to be_a(list_field) + expect(field_object.get_object_field('sub_object_object')).to be_a(object_field) + expect(field_object.simple_fields.length).to eq(1) + expect(field_object.list_fields.length).to eq(1) + expect(field_object.object_fields.length).to eq(1) lvl1 = field_object.fields expect(lvl1['sub_object_list']).to be_a(list_field) expect(lvl1['sub_object_list'].items).not_to be_empty