c443133e77
This allows us to report JSON parse exceptions to clients and ignore them in sentry.
37 lines
815 B
Ruby
37 lines
815 B
Ruby
module Gitlab
|
|
module Graphql
|
|
class Variables
|
|
Invalid = Class.new(Gitlab::Graphql::StandardGraphqlError)
|
|
|
|
def initialize(param)
|
|
@param = param
|
|
end
|
|
|
|
def to_h
|
|
ensure_hash(@param)
|
|
end
|
|
|
|
private
|
|
|
|
# Handle form data, JSON body, or a blank value
|
|
def ensure_hash(ambiguous_param)
|
|
case ambiguous_param
|
|
when String
|
|
if ambiguous_param.present?
|
|
ensure_hash(JSON.parse(ambiguous_param))
|
|
else
|
|
{}
|
|
end
|
|
when Hash, ActionController::Parameters
|
|
ambiguous_param
|
|
when nil
|
|
{}
|
|
else
|
|
raise Invalid, "Unexpected parameter: #{ambiguous_param}"
|
|
end
|
|
rescue JSON::ParserError => e
|
|
raise Invalid.new(e)
|
|
end
|
|
end
|
|
end
|
|
end
|