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