class GraphQL::Schema::IntrospectionSystem
Attributes
schema_type[R]
type_type[R]
typename_field[R]
Public Class Methods
new(schema)
click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 7 def initialize(schema) @schema = schema @built_in_namespace = GraphQL::Introspection @custom_namespace = schema.introspection_namespace || @built_in_namespace # Use to-graphql to avoid sharing with any previous instantiations @schema_type = load_constant(:SchemaType).to_graphql @type_type = load_constant(:TypeType).to_graphql @field_type = load_constant(:FieldType).to_graphql @directive_type = load_constant(:DirectiveType).to_graphql @enum_value_type = load_constant(:EnumValueType).to_graphql @input_value_type = load_constant(:InputValueType).to_graphql @type_kind_enum = load_constant(:TypeKindEnum).to_graphql @directive_location_enum = load_constant(:DirectiveLocationEnum).to_graphql @entry_point_fields = get_fields_from_class(class_sym: :EntryPoints) @dynamic_fields = get_fields_from_class(class_sym: :DynamicFields) end
Public Instance Methods
dynamic_field(name:)
click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 50 def dynamic_field(name:) @dynamic_fields[name] end
dynamic_fields()
click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 46 def dynamic_fields @dynamic_fields.values end
entry_point(name:)
click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 42 def entry_point(name:) @entry_point_fields[name] end
entry_points()
click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 38 def entry_points @entry_point_fields.values end
object_types()
click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 25 def object_types [ @schema_type, @type_type, @field_type, @directive_type, @enum_value_type, @input_value_type, @type_kind_enum, @directive_location_enum, ] end
Private Instance Methods
get_fields_from_class(class_sym:)
click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 63 def get_fields_from_class(class_sym:) object_class = load_constant(class_sym) object_type_defn = object_class.to_graphql extracted_field_defns = {} object_type_defn.all_fields.each do |field_defn| inner_resolve = field_defn.resolve_proc resolve_with_instantiate = PerFieldProxyResolve.new(object_class: object_class, inner_resolve: inner_resolve) extracted_field_defns[field_defn.name] = field_defn.redefine(resolve: resolve_with_instantiate) end extracted_field_defns end
load_constant(class_name)
click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 56 def load_constant(class_name) @custom_namespace.const_get(class_name) rescue NameError # Dup the built-in so that the cached fields aren't shared @built_in_namespace.const_get(class_name) end