Class: Notion::Transport::NetHTTPAdapter

Inherits:
Adapter
  • Object
show all
Defined in:
lib/notion/transport/net_http_adapter.rb

Constant Summary collapse

REQUEST_CLASSES =
{
  delete: Net::HTTP::Delete,
  get: Net::HTTP::Get,
  head: Net::HTTP::Head,
  patch: Net::HTTP::Patch,
  post: Net::HTTP::Post,
  put: Net::HTTP::Put
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(config, base_url: "https://api.notion.com", pool_size: 5, clock: Process.method(:clock_gettime)) ⇒ NetHTTPAdapter

Returns a new instance of NetHTTPAdapter.



18
19
20
21
22
23
24
25
# File 'lib/notion/transport/net_http_adapter.rb', line 18

def initialize(config, base_url: "https://api.notion.com", pool_size: 5, clock: Process.method(:clock_gettime))
  super()
  @config = config
  @base_uri = URI(base_url)
  @clock = clock
  @pool = SizedQueue.new(pool_size)
  pool_size.times { @pool << build_connection }
end

Instance Method Details

#call(request) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/notion/transport/net_http_adapter.rb', line 27

def call(request)
  http = @pool.pop
  broken = false
  started = monotonic
  http.start unless http.started?
  response = http.request(build_request(request))
  headers = response.each_header.to_h
  Response.new(
    status: response.code.to_i,
    headers: headers,
    body: response.body,
    request_id: headers["x-request-id"],
    elapsed: monotonic - started
  )
rescue Timeout::Error => e
  broken = true
  raise TimeoutError.new(e.message, cause: e)
rescue IOError, SocketError, SystemCallError => e
  broken = true
  raise TransportError.new(e.message, cause: e)
ensure
  release(http, broken) if http
end