class Protein::HTTPAdapter

Constants

HTTPS_SCHEME

Public Class Methods

call(request_payload) click to toggle source
# File lib/protein/http_adapter.rb, line 66
def call(request_payload)
  make_http_request(request_payload, build_headers())
end
from_hash(hash) click to toggle source
# File lib/protein/http_adapter.rb, line 33
def from_hash(hash)
  if (new_url = hash[:url])
    url(new_url)
  end

  if (new_path = hash[:path])
    path(new_path)
  end

  if (new_secret = hash[:secret])
    secret(new_secret)
  end
end
path(path = nil) click to toggle source
# File lib/protein/http_adapter.rb, line 56
def path(path = nil)
  @path = path if path
  @path || raise(DefinitionError, "path is not defined")
end
secret(secret = nil) click to toggle source
# File lib/protein/http_adapter.rb, line 61
def secret(secret = nil)
  @secret = secret if secret
  @secret || raise(DefinitionError, "secret is not defined")
end
url(url = nil) click to toggle source
# File lib/protein/http_adapter.rb, line 47
def url(url = nil)
  if url
    @url = url
    @path = URI(url).path
  end

  @url || raise(DefinitionError, "url is not defined")
end

Private Class Methods

build_headers() click to toggle source
# File lib/protein/http_adapter.rb, line 72
def build_headers
  { "X-RPC-Secret" => secret }
end
make_http_request(body, headers) click to toggle source
# File lib/protein/http_adapter.rb, line 76
def make_http_request(body, headers)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == HTTPS_SCHEME
  http_request = Net::HTTP::Post.new(uri.path, headers)
  http_request.body = body
  http_response = http.request(http_request)

  unless http_response.is_a?(Net::HTTPSuccess)
    raise(TransportError, "HTTP request failed with code #{http_response.code}")
  end

  http_response.body
rescue SystemCallError => e
  raise(TransportError, e.to_s)
end