Class: GraphQL::Client::Definition

Inherits:
Module
  • Object
show all
Defined in:
lib/graphql/client.rb

Overview

Definitions are constructed by Client.parse and wrap a parsed AST of the query string as well as hold references to any external query definition dependencies.

Definitions MUST be assigned to a constant.

Direct Known Subclasses

FragmentDefinition, OperationDefinition

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node:, document:, schema:, document_types:, source_location:, enforce_collocated_callers:) ⇒ Definition



108
109
110
111
112
113
114
115
# File 'lib/graphql/client.rb', line 108

def initialize(node:, document:, schema:, document_types:, source_location:, enforce_collocated_callers:)
  @definition_node = node
  @document = document
  @schema = schema
  @document_types = document_types
  @source_location = source_location
  @enforce_collocated_callers = enforce_collocated_callers
end

Instance Attribute Details

#definition_nodeObject (readonly)

Internal: Get underlying operation or fragment defintion AST node for definition.

Returns OperationDefinition or FragmentDefinition object.



121
122
123
# File 'lib/graphql/client.rb', line 121

def definition_node
  @definition_node
end

#documentObject (readonly)

Public: Get document with only the definitions needed to perform this operation.

Returns GraphQL::Language::Nodes::Document with one OperationDefinition and any FragmentDefinition dependencies.



145
146
147
# File 'lib/graphql/client.rb', line 145

def document
  @document
end

#document_typesObject (readonly)

Internal: Mapping of document nodes to schema types.



148
149
150
# File 'lib/graphql/client.rb', line 148

def document_types
  @document_types
end

#enforce_collocated_callersObject (readonly)

Returns the value of attribute enforce_collocated_callers.



158
159
160
# File 'lib/graphql/client.rb', line 158

def enforce_collocated_callers
  @enforce_collocated_callers
end

#schemaObject (readonly)

Returns the value of attribute schema.



150
151
152
# File 'lib/graphql/client.rb', line 150

def schema
  @schema
end

#source_locationObject (readonly)

Public: Returns the Ruby source filename and line number containing this definition was not defined in Ruby.

Returns Array pair of [String, Fixnum].



156
157
158
# File 'lib/graphql/client.rb', line 156

def source_location
  @source_location
end

Class Method Details

.for(node:, **kargs) ⇒ Object



97
98
99
100
101
102
103
104
105
106
# File 'lib/graphql/client.rb', line 97

def self.for(node:, **kargs)
  case node
  when Language::Nodes::OperationDefinition
    OperationDefinition.new(node: node, **kargs)
  when Language::Nodes::FragmentDefinition
    FragmentDefinition.new(node: node, **kargs)
  else
    raise TypeError, "expected node to be a definition type, but was #{node.class}"
  end
end

Instance Method Details

#definition_nameObject

Public: Global name of definition in client document.

Returns a GraphQL safe name of the Ruby constant String.

"Users::UserQuery" #=> "Users__UserQuery"

Returns String.



130
131
132
133
134
135
136
137
138
# File 'lib/graphql/client.rb', line 130

def definition_name
  return @definition_name if defined?(@definition_name)

  if name
    @definition_name = name.gsub("::", "__").freeze
  else
    "#{self.class.name}_#{object_id}".gsub("::", "__").freeze
  end
end

#new(*args) ⇒ Object



160
161
162
# File 'lib/graphql/client.rb', line 160

def new(*args)
  type.new(*args)
end

#typeObject



164
165
166
167
# File 'lib/graphql/client.rb', line 164

def type
  # TODO: Fix type indirection
  @type ||= GraphQL::Client::QueryResult.wrap(self, definition_node, name: "#{name}.type")
end