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 6
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 49
def dynamic_field(name))
  @dynamic_fields[name]
end
dynamic_fields() click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 45
def dynamic_fields
  @dynamic_fields.values
end
entry_point(name:) click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 41
def entry_point(name))
  @entry_point_fields[name]
end
entry_points() click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 37
def entry_points
  @entry_point_fields.values
end
object_types() click to toggle source
# File lib/graphql/schema/introspection_system.rb, line 24
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 62
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 55
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