Class: ElasticGraph::SchemaDefinition::SchemaElements::EnumValueNamer

Inherits:
Object
  • Object
show all
Defined in:
lib/elastic_graph/schema_definition/schema_elements/enum_value_namer.rb

Overview

Abstraction for generating names for GraphQL enum values. This allows users to customize the naming of our built-in enum values.

Instance Method Summary collapse

Constructor Details

#initialize(overrides_by_type_name = {}) ⇒ EnumValueNamer

Returns a new instance of EnumValueNamer.



21
22
23
24
25
26
27
28
# File 'lib/elastic_graph/schema_definition/schema_elements/enum_value_namer.rb', line 21

def initialize(overrides_by_type_name = {})
  overrides_by_type_name = Support::HashUtil
    .stringify_keys(overrides_by_type_name) # : ::Hash[::String, ::Hash[::String, ::String]]

  @used_value_names_by_type_name = ::Hash.new { |h, k| h[k] = [] }
  validate_overrides(overrides_by_type_name)
  super(overrides_by_type_name: overrides_by_type_name)
end

Instance Method Details

#name_for(type_name, value_name) ⇒ Object

Returns the name that should be used for the given ‘type_name` and `value_name`.



31
32
33
34
# File 'lib/elastic_graph/schema_definition/schema_elements/enum_value_namer.rb', line 31

def name_for(type_name, value_name)
  @used_value_names_by_type_name[type_name] << value_name
  overrides_by_type_name.dig(type_name, value_name) || value_name
end

#unused_overridesObject

Returns the overrides that did not wind up being used. Unused overrides usually happen because of a typo, and can be safely removed.



38
39
40
41
42
43
44
45
46
47
# File 'lib/elastic_graph/schema_definition/schema_elements/enum_value_namer.rb', line 38

def unused_overrides
  overrides_by_type_name.filter_map do |type_name, overrides|
    if @used_value_names_by_type_name.key?(type_name)
      unused_overrides = overrides.except(*@used_value_names_by_type_name.fetch(type_name))
      [type_name, unused_overrides] unless unused_overrides.empty?
    else
      [type_name, overrides]
    end
  end.to_h
end

#used_value_names_by_type_nameObject

Full set of enum type and value names that were used. Can be used to provide suggestions for when there are ‘unused_overrides`.



51
52
53
# File 'lib/elastic_graph/schema_definition/schema_elements/enum_value_namer.rb', line 51

def used_value_names_by_type_name
  @used_value_names_by_type_name.dup
end