Class: GraphQL::Client::Aws
- Inherits:
-
HTTP
- Object
- HTTP
- GraphQL::Client::Aws
- Defined in:
- lib/graphql/client/aws.rb
Instance Method Summary collapse
- #build_body(document, operation_name, variables) ⇒ Object
- #execute(document:, operation_name: nil, variables: {}, context: {}) ⇒ Object
-
#initialize(uri, **opts, &block) ⇒ Aws
constructor
A new instance of Aws.
- #sign!(request) ⇒ Object
Constructor Details
#initialize(uri, **opts, &block) ⇒ Aws
Returns a new instance of Aws.
9 10 11 12 13 14 15 16 17 |
# 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 |
Instance Method Details
#build_body(document, operation_name, variables) ⇒ Object
39 40 41 42 43 44 |
# 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: {}) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# 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.}" }] } end end |
#sign!(request) ⇒ Object
46 47 48 49 50 51 52 53 54 55 |
# 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 |