Class: GraphQL::Schema::TypeReducer

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/schema/type_reducer.rb

Overview

Starting from a given type, discover other types in the system by traversing that type’s fields, possible_types, etc

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, existing_type_hash) ⇒ TypeReducer

Returns a new instance of TypeReducer.



6
7
8
9
10
11
12
13
14
15
# File 'lib/graphql/schema/type_reducer.rb', line 6

def initialize(type, existing_type_hash)
  type = type.nil? ? nil : type.unwrap
  validate_type(type)
  if type.respond_to?(:name) && existing_type_hash.fetch(type.name, nil).equal?(type)
    @result = existing_type_hash
  else
    @type = type
  end
  @existing_type_hash = existing_type_hash
end

Instance Attribute Details

#existing_type_hashObject (readonly)

Returns the value of attribute existing_type_hash.



4
5
6
# File 'lib/graphql/schema/type_reducer.rb', line 4

def existing_type_hash
  @existing_type_hash
end

#typeObject (readonly)

Returns the value of attribute type.



4
5
6
# File 'lib/graphql/schema/type_reducer.rb', line 4

def type
  @type
end

Class Method Details

.find_all(types) ⇒ Object

Reduce all of ‘types` and return the combined result



22
23
24
25
26
27
# File 'lib/graphql/schema/type_reducer.rb', line 22

def self.find_all(types)
  type_map = GraphQL::Schema::TypeMap.new
  types.reduce(type_map) do |memo, type|
    self.new(type, memo).result
  end
end

Instance Method Details

#resultObject



17
18
19
# File 'lib/graphql/schema/type_reducer.rb', line 17

def result
  @result ||= find_types(type, existing_type_hash)
end