class ShopifyGraphql::Client
Public Class Methods
new(api_version = ShopifyAPI::Base.api_version)
click to toggle source
# File lib/shopify_graphql/client.rb, line 3 def initialize(api_version = ShopifyAPI::Base.api_version) @api_version = api_version end
Public Instance Methods
api_url()
click to toggle source
# File lib/shopify_graphql/client.rb, line 20 def api_url [ShopifyAPI::Base.site, @api_version.construct_graphql_path].join end
connection()
click to toggle source
# File lib/shopify_graphql/client.rb, line 28 def connection @connection ||= Faraday.new(url: api_url, headers: request_headers) do |conn| conn.request :json conn.response :json, parser_options: { object_class: OpenStruct } end end
execute(query, **variables)
click to toggle source
# File lib/shopify_graphql/client.rb, line 7 def execute(query, **variables) operation_name = variables.delete(:operation_name) response = connection.post do |req| req.body = { query: query, operationName: operation_name, variables: variables, }.to_json end response = handle_response(response) ShopifyGraphql::Response.new(response) end
handle_graphql_errors(response)
click to toggle source
# File lib/shopify_graphql/client.rb, line 70 def handle_graphql_errors(response) return response if response.errors.blank? error = response.errors.first error_message = error.message error_code = error.extensions&.code error_doc = error.extensions&.documentation case error_code when "THROTTLED" raise TooManyRequests.new(response, error_message, code: error_code, doc: error_doc) else raise ConnectionError.new(response, error_message, code: error_code, doc: error_doc) end end
handle_response(response)
click to toggle source
# File lib/shopify_graphql/client.rb, line 35 def handle_response(response) case response.status when 200..400 handle_graphql_errors(response.body) when 400 raise BadRequest.new(response.body, code: response.status) when 401 raise UnauthorizedAccess.new(response.body, code: response.status) when 402 raise PaymentRequired.new(response.body, code: response.status) when 403 raise ForbiddenAccess.new(response.body, code: response.status) when 404 raise ResourceNotFound.new(response.body, code: response.status) when 405 raise MethodNotAllowed.new(response.body, code: response.status) when 409 raise ResourceConflict.new(response.body, code: response.status) when 410 raise ResourceGone.new(response.body, code: response.status) when 412 raise PreconditionFailed.new(response.body, code: response.status) when 422 raise ResourceInvalid.new(response.body, code: response.status) when 429 raise TooManyRequests.new(response.body, code: response.status) when 401...500 raise ClientError.new(response.body, code: response.status) when 500...600 raise ServerError.new(response.body, code: response.status) else raise ConnectionError.new(response.body, "Unknown response code: #{response.status}") end end
handle_user_errors(response)
click to toggle source
# File lib/shopify_graphql/client.rb, line 86 def handle_user_errors(response) return response if response.userErrors.blank? error = response.userErrors.first error_message = error.message error_fields = error.field error_code = error.code raise UserError.new(response, error_message, fields: error_fields, code: error_code) end
request_headers()
click to toggle source
# File lib/shopify_graphql/client.rb, line 24 def request_headers ShopifyAPI::Base.headers end