class GraphQL::Client::Aws
Public Class Methods
new(uri, **opts, &block)
click to toggle source
Calls superclass method
# File lib/graphql/client/aws.rb, line 9 def initialize(uri, **opts, &block) if block_given? super(uri, &block) else super(uri) end appsync_signer_option = opts.merge(service: 'appsync') @signer = ::Aws::Sigv4::Signer.new(appsync_signer_option) end
Public Instance Methods
build_body(document, operation_name, variables)
click to toggle source
# File lib/graphql/client/aws.rb, line 39 def build_body(document, operation_name, variables) body = { 'query' => document.to_query_string } body['variables'] = variables if variables.any? body['operationName'] = operation_name if operation_name JSON.generate(body) end
execute(document:, operation_name: nil, variables: {}, context: {})
click to toggle source
# File lib/graphql/client/aws.rb, line 19 def execute(document:, operation_name: nil, variables: {}, context: {}) request = Net::HTTP::Post.new(uri.request_uri) request['Accept'] = 'application/json' headers(context).each { |name, value| request[name] = value } request.body = build_body(document, operation_name, variables) request = sign!(request) response = connection.request(request) case response when Net::HTTPOK, Net::HTTPBadRequest JSON.parse(response.body) else { 'errors' => [{ 'message' => "#{response.code} #{response.message}" }] } end end
sign!(request)
click to toggle source
# File lib/graphql/client/aws.rb, line 46 def sign!(request) signature = @signer.sign_request(http_method: request.method, url: uri, body: request.body) request['Host'] = signature.headers['Host'] request['X-Amz-Date'] = signature.headers['x-amz-date'] request['X-Amz-Security-Token'] = signature.headers['x-amz-security-token'] request['X-Amz-Content-Sha256']= signature.headers['x-amz-content-sha256'] request['Authorization'] = signature.headers['authorization'] request['Content-Type'] = 'application/graphql' request end