Class: ElasticGraph::SchemaDefinition::Indexing::JSONSchemaWithMetadata::Merger

Inherits:
Object
  • Object
show all
Defined in:
lib/elastic_graph/schema_definition/indexing/json_schema_with_metadata.rb

Overview

Responsible for building ‘JSONSchemaWithMetadata` instances.

Defined Under Namespace

Classes: JSONSchemaResolver

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(schema_def_results) ⇒ Merger

Returns a new instance of Merger.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/elastic_graph/schema_definition/indexing/json_schema_with_metadata.rb', line 42

def initialize(schema_def_results)
  @field_metadata_by_type_and_field_name = schema_def_results.
  @renamed_types_by_old_name = schema_def_results.state.renamed_types_by_old_name
  @deleted_types_by_old_name = schema_def_results.state.deleted_types_by_old_name
  @renamed_fields_by_type_name_and_old_field_name = schema_def_results.state.renamed_fields_by_type_name_and_old_field_name
  @deleted_fields_by_type_name_and_old_field_name = schema_def_results.state.deleted_fields_by_type_name_and_old_field_name
  @state = schema_def_results.state
  @derived_indexing_type_names = schema_def_results.derived_indexing_type_names

  @unused_deprecated_elements = (
    @renamed_types_by_old_name.values +
    @deleted_types_by_old_name.values +
    @renamed_fields_by_type_name_and_old_field_name.values.flat_map(&:values) +
    @deleted_fields_by_type_name_and_old_field_name.values.flat_map(&:values)
  ).to_set
end

Instance Attribute Details

#unused_deprecated_elementsObject (readonly)

Returns the value of attribute unused_deprecated_elements.



40
41
42
# File 'lib/elastic_graph/schema_definition/indexing/json_schema_with_metadata.rb', line 40

def unused_deprecated_elements
  @unused_deprecated_elements
end

Instance Method Details

#merge_metadata_into(json_schema) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/elastic_graph/schema_definition/indexing/json_schema_with_metadata.rb', line 59

def (json_schema)
  missing_fields = ::Set.new
  missing_types = ::Set.new
  definition_conflicts = ::Set.new
  old_type_name_by_current_name = {} # : ::Hash[String, String]

  defs = json_schema.fetch("$defs").to_h do |type_name, type_def|
    if type_name != EVENT_ENVELOPE_JSON_SCHEMA_NAME && (properties = type_def["properties"])
      current_type_name = determine_current_type_name(
        type_name,
        missing_types: missing_types,
        definition_conflicts: definition_conflicts
      )

      if current_type_name
        old_type_name_by_current_name[current_type_name] = type_name
      end

      properties = properties.to_h do |field_name, prop|
        unless field_name == "__typename"
           = current_type_name&.then do |name|
            (
              name,
              field_name,
              missing_fields: missing_fields,
              definition_conflicts: definition_conflicts
            )
          end

          prop = prop.merge({"ElasticGraph" => &.to_dumpable_hash})
        end

        [field_name, prop]
      end

      type_def = type_def.merge({"properties" => properties})
    end

    [type_name, type_def]
  end

  json_schema = json_schema.merge("$defs" => defs)

  JSONSchemaWithMetadata.new(
    json_schema: json_schema,
    missing_fields: missing_fields,
    missing_types: missing_types,
    definition_conflicts: definition_conflicts,
    missing_necessary_fields: identify_missing_necessary_fields(json_schema, old_type_name_by_current_name)
  )
end