Skip to content

Instantly share code, notes, and snippets.

@amkisko
Last active April 6, 2020 20:21
Show Gist options
  • Save amkisko/ac2a63596390223c523d3373c0be047b to your computer and use it in GitHub Desktop.
Save amkisko/ac2a63596390223c523d3373c0be047b to your computer and use it in GitHub Desktop.
Basic schema for graphql-ruby
class BasicSchema < GraphQL::Schema
default_max_page_size 25
use(GraphQL::Execution::Interpreter)
use(GraphQL::Analysis::AST)
query_analyzer(QueryAnalyzer)
use(GraphQL::Execution::Errors)
use(BatchLoader::GraphQL)
instrument(:query, SentryInstrumentation)
rescue_from(Error::CustomError) do |err, _obj, _args, ctx, _field|
e = err.render
ctx.add_error(
GraphQL::ExecutionError.new(e.message, extensions: {
status: e.status, code: e.code, vars: e.vars
})
)
nil
end
rescue_from(ActiveRecord::ActiveRecordError) do |err, _obj, _args, _ctx, _field|
message =
if Rails.env.development?
err.message
else
"Record query error"
end
ctx.add_error(
GraphQL::ExecutionError.new(
message,
extensions: { code: "RECORD_QUERY_ERROR" }
)
)
nil
end
rescue_from(ActiveRecord::RecordNotFound) do |err, _obj, _args, ctx, _field|
ctx.add_error(
GraphQL::ExecutionError.new(
err.message,
extensions: { code: "RECORD_NOT_FOUND" }
)
)
nil
end
rescue_from(ActiveRecord::RecordInvalid) do |err, _obj, _args, ctx, _field|
# errors.map do |attr, message|
ctx.add_error(
GraphQL::ExecutionError.new(
err.record.errors.full_messages.join("\n"),
extensions: { code: "RECORD_INVALID" }
)
)
nil
end
rescue_from(GraphQL::ExecutionError) do |err, _obj, _args, ctx, _field|
ctx.add_error(err)
nil
end
rescue_from(StandardError) do |err, _obj, args, ctx, _field|
ServerError.log!(
err,
extra: { arguments: args },
request: ctx[:request]
)
ctx.add_error(
GraphQL::ExecutionError.new(
"Please try executing the query for this field later",
extensions: { code: "STANDARD_ERROR" }
)
)
nil
end
def self.context_error(context, message: nil, code: nil, extra: {})
message ||= I18n.t("errors.codes.#{code}", default: code.tr("_", " ").capitalize)
context.add_error(
GraphQL::ExecutionError.new(
message,
extensions: { code: code }.merge(extra)
)
)
nil
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment