Class: GraphQL::Schema::PossibleTypes
- Inherits:
-
Object
- Object
- GraphQL::Schema::PossibleTypes
- Defined in:
- lib/graphql/schema/possible_types.rb
Overview
Find the members of a union or interface within a given schema.
(Although its members never change, unions are handled this way to simplify execution code.)
Internally, the calculation is cached. It’s assumed that schema members don’t change after creating the schema!
Instance Method Summary collapse
-
#initialize(schema) ⇒ PossibleTypes
constructor
A new instance of PossibleTypes.
-
#interface_implementers(ctx, type_defn) ⇒ Object
-
#possible_types(type_defn, ctx) ⇒ Object
Constructor Details
#initialize(schema) ⇒ PossibleTypes
Returns a new instance of PossibleTypes.
15 16 17 18 19 20 21 22 |
# File 'lib/graphql/schema/possible_types.rb', line 15 def initialize(schema) @object_types = schema.types.values.select { |type| type.kind.object? } @interface_implementers = Hash.new do |h1, ctx| h1[ctx] = Hash.new do |h2, int_type| h2[int_type] = @object_types.select { |type| type.interfaces(ctx).include?(int_type) }.sort_by(&:name) end end end |
Instance Method Details
#interface_implementers(ctx, type_defn) ⇒ Object
[View source]
39 40 41 |
# File 'lib/graphql/schema/possible_types.rb', line 39 def interface_implementers(ctx, type_defn) @interface_implementers[ctx][type_defn] end |
#possible_types(type_defn, ctx) ⇒ Object
[View source]
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/graphql/schema/possible_types.rb', line 24 def possible_types(type_defn, ctx) case type_defn when Module possible_types(type_defn.graphql_definition, ctx) when GraphQL::UnionType type_defn.possible_types(ctx) when GraphQL::InterfaceType interface_implementers(ctx, type_defn) when GraphQL::BaseType [type_defn] else raise "Unexpected possible_types object: #{type_defn.inspect}" end end |