Class: GraphQL::Analysis::QueryComplexity::ScopedTypeComplexity

Inherits:
Hash
  • Object
show all
Defined in:
lib/graphql/analysis/query_complexity.rb

Overview

ScopedTypeComplexity models a tree of GraphQL types mapped to inner selections, ie: Hash<GraphQL::BaseType, Hash<String, ScopedTypeComplexity»

Constant Summary collapse

DEFAULT_PROC =

A proc for defaulting empty namespace requests as a new scope hash.

->(h, k) { h[k] = {} }

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent_type, field_definition, query, response_path) ⇒ Hash<GraphQL::BaseType, Hash<String, ScopedTypeComplexity>>

Parameters:

  • parent_type (Class)

    The owner of field_definition

  • field_definition (GraphQL::Field, GraphQL::Schema::Field)

    Used for getting the .complexity configuration

  • query (GraphQL::Query)

    Used for query.possible_types

  • response_path (Array<String>)

    The path to the response key for the field



32
33
34
35
36
37
38
39
# File 'lib/graphql/analysis/query_complexity.rb', line 32

def initialize(parent_type, field_definition, query, response_path)
  super(&DEFAULT_PROC)
  @parent_type = parent_type
  @field_definition = field_definition
  @query = query
  @response_path = response_path
  @nodes = []
end

Instance Attribute Details

#field_definitionObject (readonly)

Returns the value of attribute field_definition.



25
26
27
# File 'lib/graphql/analysis/query_complexity.rb', line 25

def field_definition
  @field_definition
end

#nodesArray<GraphQL::Language::Nodes::Field> (readonly)



42
43
44
# File 'lib/graphql/analysis/query_complexity.rb', line 42

def nodes
  @nodes
end

#queryObject (readonly)

Returns the value of attribute query.



25
26
27
# File 'lib/graphql/analysis/query_complexity.rb', line 25

def query
  @query
end

#response_pathObject (readonly)

Returns the value of attribute response_path.



25
26
27
# File 'lib/graphql/analysis/query_complexity.rb', line 25

def response_path
  @response_path
end

Instance Method Details

#own_complexity(child_complexity) ⇒ Object



44
45
46
# File 'lib/graphql/analysis/query_complexity.rb', line 44

def own_complexity(child_complexity)
  @field_definition.calculate_complexity(query: @query, nodes: @nodes, child_complexity: child_complexity)
end