Class: GraphWeaver::HttpExecutor

Inherits:
Object
  • Object
show all
Defined in:
lib/graph_weaver/http_executor.rb

Overview

Minimal HTTP transport satisfying the generated modules' executor interface: execute(query, variables:) => => ..., "errors" => ...

Instance Method Summary collapse

Constructor Details

#initialize(url, headers: {}) ⇒ HttpExecutor

Returns a new instance of HttpExecutor.



12
13
14
15
# File 'lib/graph_weaver/http_executor.rb', line 12

def initialize(url, headers: {})
  @uri = URI(url)
  @headers = headers
end

Instance Method Details

#execute(query, variables: {}) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/graph_weaver/http_executor.rb', line 17

def execute(query, variables: {})
  request = Net::HTTP::Post.new(@uri, { "Content-Type" => "application/json" }.merge(@headers))
  request.body = JSON.generate(query:, variables:)

  response = Net::HTTP.start(@uri.hostname, @uri.port, use_ssl: @uri.scheme == "https") do |http|
    http.request(request)
  end

  unless response.is_a?(Net::HTTPSuccess)
    raise "HTTP #{response.code}: #{response.body}"
  end

  JSON.parse(T.must(response.body))
end