Skip to content

Commit c4baaa4

Browse files
✨ add complementary accessors for ObjectField (#226)
1 parent c8f8c30 commit c4baaa4

3 files changed

Lines changed: 44 additions & 3 deletions

File tree

lib/mindee/parsing/v2/field/object_field.rb

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,38 @@ def get_list_field(key)
9696

9797
field
9898
end
99+
100+
# Get a field by key and ensure it is an ObjectField.
101+
# @param key [String] Field key to retrieve.
102+
# @return [ObjectField] The ObjectField.
103+
# @raise [TypeError] If the field is not an ObjectField.
104+
def get_object_field(key)
105+
field = @fields.get_object_field(key)
106+
raise TypeError, "Field #{key} is not an ObjectField" unless field.is_a?(ObjectField)
107+
108+
field
109+
end
110+
111+
# Get all simple fields.
112+
# @return [Hash<String, SimpleField>] Simple fields contained in the object.
113+
def simple_fields
114+
# @type var fields: Hash<String, SimpleField>
115+
@fields.select { |_, value| value.is_a?(SimpleField) }
116+
end
117+
118+
# Get all list fields.
119+
# @return [Hash<String, ListField>] List fields contained in the object.
120+
def list_fields
121+
# @type var fields: Hash<String, ListField>
122+
@fields.select { |_, value| value.is_a?(ListField) }
123+
end
124+
125+
# Get all object fields.
126+
# @return [Hash<String, ObjectField>] Object fields contained in the object.
127+
def object_fields
128+
# @type var fields: Hash<String, ObjectField>
129+
@fields.select { |_, value| value.is_a?(ObjectField) }
130+
end
99131
end
100132
end
101133
end

sig/mindee/parsing/v2/field/object_field.rbs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# TypeProf 0.30.1
2-
1+
# lib/mindee/parsing/v2/field/object_field.rb
32
module Mindee
43
module Parsing
54
module V2
@@ -9,9 +8,14 @@ module Mindee
98
attr_reader fields: InferenceFields
109
def initialize: (Hash[String | Symbol, untyped], ?Integer) -> void
1110

11+
def get_simple_field: (String) -> SimpleField
1212
def get_list_field: (String) -> ListField
13+
def get_object_field: (String) -> ObjectField
14+
15+
def simple_fields: () -> Hash[String, SimpleField]
16+
def list_fields: () -> Hash[String, ListField]
17+
def object_fields: () -> Hash[String, ObjectField]
1318

14-
def get_simple_field: (String) -> SimpleField
1519
def multi_str: -> String
1620
def single_str: -> String
1721
def to_s: -> String

spec/v2/parsing/inference_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,12 @@ def load_v2_inference(resource_path)
149149
expect(fields['field_object']).to be_a(object_field)
150150

151151
field_object = fields.get_object_field('field_object')
152+
expect(field_object.get_simple_field('sub_object_simple')).to be_a(simple_field)
152153
expect(field_object.get_list_field('sub_object_list')).to be_a(list_field)
154+
expect(field_object.get_object_field('sub_object_object')).to be_a(object_field)
155+
expect(field_object.simple_fields.length).to eq(1)
156+
expect(field_object.list_fields.length).to eq(1)
157+
expect(field_object.object_fields.length).to eq(1)
153158
lvl1 = field_object.fields
154159
expect(lvl1['sub_object_list']).to be_a(list_field)
155160
expect(lvl1['sub_object_list'].items).not_to be_empty

0 commit comments

Comments
 (0)