Class: GraphQL::Schema::IntrospectionSystem
- Inherits:
-
Object
- Object
- GraphQL::Schema::IntrospectionSystem
- Defined in:
- lib/graphql/schema/introspection_system.rb
Defined Under Namespace
Classes: PerFieldProxyResolve
Instance Attribute Summary collapse
-
#possible_types ⇒ Object
readonly
Returns the value of attribute possible_types.
-
#types ⇒ Object
readonly
Returns the value of attribute types.
Instance Method Summary collapse
-
#dynamic_field(name:) ⇒ Object
-
#dynamic_fields ⇒ Object
-
#entry_point(name:) ⇒ Object
-
#entry_points ⇒ Object
-
#initialize(schema) ⇒ IntrospectionSystem
constructor
A new instance of IntrospectionSystem.
-
#resolve_late_bindings ⇒ Object
private
The introspection system is prepared with a bunch of LateBoundTypes.
Constructor Details
#initialize(schema) ⇒ IntrospectionSystem
Returns a new instance of IntrospectionSystem.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/graphql/schema/introspection_system.rb', line 7 def initialize(schema) @schema = schema @class_based = !!@schema.is_a?(Class) @built_in_namespace = GraphQL::Introspection @custom_namespace = if @class_based schema.introspection || @built_in_namespace else schema.introspection_namespace || @built_in_namespace end type_defns = [ load_constant(:SchemaType), load_constant(:TypeType), load_constant(:FieldType), load_constant(:DirectiveType), load_constant(:EnumValueType), load_constant(:InputValueType), load_constant(:TypeKindEnum), load_constant(:DirectiveLocationEnum) ] @types = {} @possible_types = {} type_defns.each do |t| @types[t.graphql_name] = t @possible_types[t.graphql_name] = [t] end @entry_point_fields = if schema.disable_introspection_entry_points? {} else entry_point_fields = get_fields_from_class(class_sym: :EntryPoints) entry_point_fields.delete('__schema') if schema.disable_schema_introspection_entry_point? entry_point_fields.delete('__type') if schema.disable_type_introspection_entry_point? entry_point_fields end @dynamic_fields = get_fields_from_class(class_sym: :DynamicFields) end |
Instance Attribute Details
#possible_types ⇒ Object (readonly)
Returns the value of attribute possible_types.
5 6 7 |
# File 'lib/graphql/schema/introspection_system.rb', line 5 def possible_types @possible_types end |
#types ⇒ Object (readonly)
Returns the value of attribute types.
5 6 7 |
# File 'lib/graphql/schema/introspection_system.rb', line 5 def types @types end |
Instance Method Details
#dynamic_field(name:) ⇒ Object
57 58 59 |
# File 'lib/graphql/schema/introspection_system.rb', line 57 def dynamic_field(name:) @dynamic_fields[name] end |
#dynamic_fields ⇒ Object
53 54 55 |
# File 'lib/graphql/schema/introspection_system.rb', line 53 def dynamic_fields @dynamic_fields.values end |
#entry_point(name:) ⇒ Object
49 50 51 |
# File 'lib/graphql/schema/introspection_system.rb', line 49 def entry_point(name:) @entry_point_fields[name] end |
#entry_points ⇒ Object
45 46 47 |
# File 'lib/graphql/schema/introspection_system.rb', line 45 def entry_points @entry_point_fields.values end |
#resolve_late_bindings ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
The introspection system is prepared with a bunch of LateBoundTypes. Replace those with the objects that they refer to, since LateBoundTypes aren’t handled at runtime.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/graphql/schema/introspection_system.rb', line 67 def resolve_late_bindings @types.each do |name, t| if t.kind.fields? t.fields.each do |_name, field_defn| field_defn.type = resolve_late_binding(field_defn.type) end end end @entry_point_fields.each do |name, f| f.type = resolve_late_binding(f.type) end @dynamic_fields.each do |name, f| f.type = resolve_late_binding(f.type) end nil end |