/
require_gql_error_helpers.rb
37 lines (33 loc) · 1.27 KB
/
require_gql_error_helpers.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# frozen_string_literal: true
module RuboCop
module Cop
module Ezcater
# Enforce use of GQLErrors helpers instead of throwing
# GraphQL::ExecutionErrors directly
#
# @example
#
# # good
# GQLErrors.summary_error("An error occurred")
# GQLErrors.request_error("You can't access this", 401)
# GQLErrors.field_error("is invalid", :first_name, "First Name")
# GQLErrors.field_errors_for(my_model, context)
# GQLErrors.field_errors_for(my_model, context, summary_error: "An error occurred")
# GQLErrors.field_errors_for(my_model, context, field_mapping: { first: :first_name })
#
# # bad
# GraphQL::ExecutionError.new("An error occurred")
# GraphQL::ExecutionError.new("You can't access this", options: { status_code: 401 })
class RequireGqlErrorHelpers < Cop
MSG = "Use the helpers provided by `GQLErrors` instead of raising `GraphQL::ExecutionError` directly."
def_node_matcher :graphql_const?, <<~PATTERN
(const (const _ :GraphQL) :ExecutionError)
PATTERN
def on_const(node)
return unless graphql_const?(node)
add_offense(node, location: :expression, message: MSG)
end
end
end
end
end