Sha256: 13755f161725e5104b3403a73fb6de8353a4ff6102a1dbc95c08f7a7270ff77e

Contents?: true

Size: 768 Bytes

Versions: 3

Compression:

Stored size: 768 Bytes

Contents

class GraphQL::StaticValidation::ComplexityValidator
  include GraphQL::StaticValidation::Message::MessageHelper

  def initialize(max_fields:, list_multiplier:)
    @max_fields = max_fields
    @list_multiplier = list_multiplier
  end

  def validate(context)
    visitor = context.visitor
    complexity = 0
    visitor[GraphQL::Language::Nodes::Field] << -> (node, parent) {
      field_type = field_definition.type
      if field_type.kind.list?
        complexity += list_multiplier
      else
        complexity += 1
      end
    }

    visitor[GraphQL::Language::Nodes::Document].exit << -> (node, parent) {
      if complexity > @max_fields
        context.errors << message("This query is too complex. Request fewer fields.", node)
      end
    }
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
graphql-0.12.0 lib/graphql/static_validation/complexity_validator.rb
graphql-0.11.1 lib/graphql/static_validation/complexity_validator.rb
graphql-0.11.0 lib/graphql/static_validation/complexity_validator.rb