Class: Mindee::Parsing::V2::Field::ObjectField

Inherits:
BaseField
  • Object
show all
Defined in:
lib/mindee/parsing/v2/field/object_field.rb

Overview

A field containing a nested set of inference fields.

Instance Attribute Summary collapse

Attributes inherited from BaseField

#confidence, #indent_level, #locations

Instance Method Summary collapse

Methods inherited from BaseField

create_field

Constructor Details

#initialize(raw_prediction, indent_level = 0) ⇒ ObjectField

Returns a new instance of ObjectField.

Parameters:

  • Raw server response hash.

  • (defaults to: 0)

    Level of indentation for rst display.



17
18
19
20
21
22
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 17

def initialize(raw_prediction, indent_level = 0)
  super

  inner_fields = raw_prediction.fetch('fields', raw_prediction)
  @fields = InferenceFields.new(inner_fields, @indent_level + 1)
end

Instance Attribute Details

#fieldsInferenceFields (readonly)

Returns Fields contained in the object.

Returns:

  • Fields contained in the object.



13
14
15
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 13

def fields
  @fields
end

Instance Method Details

#get_list_field(key) ⇒ ListField

Get a field by key and ensure it is a ListField.

Raises:

  • If the field is not a ListField.

Parameters:

  • Field key to retrieve.

Returns:

  • The ListField.



93
94
95
96
97
98
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 93

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

#get_object_field(key) ⇒ ObjectField

Get a field by key and ensure it is an ObjectField.

Raises:

  • If the field is not an ObjectField.

Parameters:

  • Field key to retrieve.

Returns:

  • The ObjectField.



104
105
106
107
108
109
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 104

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_simple_field(key) ⇒ SimpleField

Get a field by key and ensure it is a SimpleField.

Raises:

  • If the field is not a SimpleField.

Parameters:

  • Field key to retrieve.

Returns:

  • The SimpleField.



85
86
87
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 85

def get_simple_field(key)
  @fields.get_simple_field(key)
end

#list_fieldsHash<String, ListField>

Get all list fields.

Returns:

  • List fields contained in the object.



120
121
122
123
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 120

def list_fields
  # @type var fields: Hash<String, ListField>
  @fields.select { |_, value| value.is_a?(ListField) }
end

#multi_strString

String representation for multi-object display

Returns:

  • Formatted string for list context.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 60

def multi_str
  return '' unless @fields && !@fields.empty?

  out_str = ''
  indent = ' ' * @indent_level
  first = true

  @fields.each do |field_key, field_value|
    value_str = field_value ? field_value.to_s : ''

    if first
      out_str += "#{indent}:#{field_key}: #{value_str}"
      first = false
    else
      out_str += "\n#{indent}    :#{field_key}: #{value_str}"
    end
  end

  out_str
end

#object_fieldsHash<String, ObjectField>

Get all object fields.

Returns:

  • Object fields contained in the object.



127
128
129
130
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 127

def object_fields
  # @type var fields: Hash<String, ObjectField>
  @fields.select { |_, value| value.is_a?(ObjectField) }
end

#simple_fieldsHash<String, SimpleField>

Get all simple fields.

Returns:

  • Simple fields contained in the object.



113
114
115
116
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 113

def simple_fields
  # @type var fields: Hash<String, SimpleField>
  @fields.select { |_, value| value.is_a?(SimpleField) }
end

#single_strString

String representation of a single object field

Returns:

  • Multi-line string with proper indentation.



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 44

def single_str
  return '' unless @fields && !@fields.empty?

  out_str = ''
  indent = ' ' * @indent_level

  @fields.each do |field_key, field_value|
    value_str = field_value && !field_value.to_s.empty? ? field_value.to_s : ''
    out_str += "\n#{indent}  :#{field_key}: #{value_str}"
  end

  out_str
end

#to_sString

String representation of the object field.

Returns:

  • String representation with newline prefix.



26
27
28
29
30
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 26

def to_s
  return "\n" unless @fields && !@fields.empty?

  "\n#{@fields.to_s(1)}"
end

#to_s_from_listString

String representation suitable for list display.

Returns:

  • String representation without leading spaces.



34
35
36
37
38
39
40
# File 'lib/mindee/parsing/v2/field/object_field.rb', line 34

def to_s_from_list
  return '' if @fields.nil?
  return '' unless @fields && !@fields.empty?

  field_str = @fields.to_s(2)
  field_str.length > 4 ? (field_str[4..] || '') : ''
end