Class: GraphQL::ResponseValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/response_validator.rb,
lib/graphql/response_validator/version.rb

Defined Under Namespace

Classes: ValidationError

Constant Summary collapse

SYSTEM_TYPENAME =
"__typename__"
SCALAR_VALIDATORS =
{
  "Boolean" => -> (data) { data.is_a?(TrueClass) || data.is_a?(FalseClass) },
  "Float" => -> (data) { data.is_a?(Numeric) },
  "ID" => -> (data) { data.is_a?(String) || data.is_a?(Integer) },
  "Int" => -> (data) { data.is_a?(Integer) },
  "JSON" => -> (data) { data.is_a?(Hash) },
  "String" => -> (data) { data.is_a?(String) },
}.freeze
VERSION =
"0.0.2"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query, data, scalar_validators: SCALAR_VALIDATORS, system_typename: SYSTEM_TYPENAME) ⇒ ResponseValidator

Returns a new instance of ResponseValidator.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/graphql/response_validator.rb', line 21

def initialize(
  query,
  data,
  scalar_validators: SCALAR_VALIDATORS,
  system_typename: SYSTEM_TYPENAME
)
  @query = query
  @data = data
  @errors = []
  @valid = nil
  @scalar_validators = scalar_validators
  @system_typename = system_typename
  @system_typenames = Set.new
end

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



19
20
21
# File 'lib/graphql/response_validator.rb', line 19

def errors
  @errors
end

Instance Method Details

#prune!Object



45
46
47
48
49
# File 'lib/graphql/response_validator.rb', line 45

def prune!
  valid?
  @system_typenames.each { _1.delete(@system_typename) }
  self
end

#to_hObject



51
52
53
# File 'lib/graphql/response_validator.rb', line 51

def to_h
  @data
end

#valid?Boolean

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
# File 'lib/graphql/response_validator.rb', line 36

def valid?
  return @valid unless @valid.nil?

  op = @query.selected_operation
  parent_type = @query.root_type_for_operation(op.operation_type)
  validate_selections(parent_type, op, @data["data"])
  @valid = @errors.none?
end