class Graphlient::Errors::GraphQLError

Attributes

response[R]

Public Class Methods

new(response) click to toggle source
Calls superclass method Graphlient::Errors::Error::new
# File lib/graphlient/errors/graphql_error.rb, line 5
def initialize(response)
  super('the server responded with a GraphQL error')
  @response = response
end

Public Instance Methods

errors() click to toggle source
# File lib/graphlient/errors/graphql_error.rb, line 10
def errors
  @response.errors
end
to_s() click to toggle source
# File lib/graphlient/errors/graphql_error.rb, line 14
def to_s
  errors.details.map do |key, details|
    details = create_details(details).join("\n")
    [key == 'data' ? nil : key, details].compact.join(': ')
  end.join("\n")
end

Private Instance Methods

create_detail(detail) click to toggle source

Generates human readable error explanation from a GraphQL error message It first tries `problem` attribute of the error response then checks for error root level `path` and tries to generate error from that and if none exist, it fallbacks to just return error message

# File lib/graphlient/errors/graphql_error.rb, line 32
def create_detail(detail)
  if detail.key?('problems')
    [detail['message'], create_problems(detail['problems']).compact.join("\n  ")].join("\n  ")
  elsif detail.key?('path')
    [detail['path'].compact.join(' '), detail['message']].join(': ')
  else
    detail['message']
  end
end
create_details(details) click to toggle source
# File lib/graphlient/errors/graphql_error.rb, line 23
def create_details(details)
  details.map { |detail| create_detail(detail) }
end
create_problem(problem) click to toggle source
# File lib/graphlient/errors/graphql_error.rb, line 46
def create_problem(problem)
  paths = problem.key?('path') && !problem['path'].empty? ? "#{problem['path'].join(', ')}: " : ''
  [paths, problem['explanation']].compact.join
end
create_problems(problems) click to toggle source
# File lib/graphlient/errors/graphql_error.rb, line 42
def create_problems(problems)
  problems.map { |problem| create_problem(problem) }
end