class Flipper::Adapters::Http::Client

Constants

DEFAULT_HEADERS
HTTPS_SCHEME

Public Class Methods

new(options = {}) click to toggle source
# File lib/flipper/adapters/http/client.rb, line 17
def initialize(options = {})
  @uri = URI(options.fetch(:url))
  @headers = DEFAULT_HEADERS.merge(options[:headers] || {})
  @basic_auth_username = options[:basic_auth_username]
  @basic_auth_password = options[:basic_auth_password]
  @read_timeout = options[:read_timeout]
  @open_timeout = options[:open_timeout]
  @debug_output = options[:debug_output]
end

Public Instance Methods

delete(path, body = nil) click to toggle source
# File lib/flipper/adapters/http/client.rb, line 35
def delete(path, body = nil)
  perform Net::HTTP::Delete, path, @headers, body: body
end
get(path) click to toggle source
# File lib/flipper/adapters/http/client.rb, line 27
def get(path)
  perform Net::HTTP::Get, path, @headers
end
post(path, body = nil) click to toggle source
# File lib/flipper/adapters/http/client.rb, line 31
def post(path, body = nil)
  perform Net::HTTP::Post, path, @headers, body: body
end

Private Instance Methods

build_http(uri) click to toggle source
# File lib/flipper/adapters/http/client.rb, line 56
def build_http(uri)
  http = Net::HTTP.new(uri.host, uri.port)
  http.read_timeout = @read_timeout if @read_timeout
  http.open_timeout = @open_timeout if @open_timeout
  http.set_debug_output(@debug_output) if @debug_output

  if uri.scheme == HTTPS_SCHEME
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  end

  http
end
build_request(http_method, uri, headers, options) click to toggle source
# File lib/flipper/adapters/http/client.rb, line 70
def build_request(http_method, uri, headers, options)
  body = options[:body]
  request = http_method.new(uri.request_uri)
  request.initialize_http_header(headers) if headers
  request.body = body if body

  if @basic_auth_username && @basic_auth_password
    request.basic_auth(@basic_auth_username, @basic_auth_password)
  end

  request
end
perform(http_method, path, headers = {}, options = {}) click to toggle source
# File lib/flipper/adapters/http/client.rb, line 41
def perform(http_method, path, headers = {}, options = {})
  uri = uri_for_path(path)
  http = build_http(uri)
  request = build_request(http_method, uri, headers, options)
  http.request(request)
end
uri_for_path(path) click to toggle source
# File lib/flipper/adapters/http/client.rb, line 48
def uri_for_path(path)
  uri = @uri.dup
  path_uri = URI(path)
  uri.path += path_uri.path
  uri.query = "#{uri.query}&#{path_uri.query}" if path_uri.query
  uri
end