kv109/Callapi

View on GitHub
lib/callapi/call/request/http.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'net/http'
require 'addressable/uri'
require 'addressabler'

class Callapi::Call::Request::Http < Callapi::Call::Request::Base
  require_relative 'http/log_helper'

  include Callapi::Call::Request::Http::LogHelper

  HTTP_METHOD_TO_REQUEST_CLASS = {
    get:     Net::HTTP::Get,
    post:    Net::HTTP::Post,
    put:     Net::HTTP::Put,
    delete:  Net::HTTP::Delete,
    patch:   Net::HTTP::Patch
  }

  def response
    with_logging do
      http.request(request)
    end
  end

  private

  def host
    raise NotImplementedError
  end

  def http
    #TODO: Use HTTParty
    Net::HTTP.new(uri.host, uri.port)
  end

  def request
    request_class.new(uri.request_uri, headers).tap do |request|
      request.set_form_data params if put_params_in_request_body?
    end
  end

  def request_class
    HTTP_METHOD_TO_REQUEST_CLASS[request_method] || raise(Callapi::UnknownHttpMethodError)
  end

  def uri
    @uri ||= Addressable::URI.parse(host).tap do |uri|
      uri.path = request_path
      uri.query_hash = params unless put_params_in_request_body?
    end
  end

  def put_params_in_request_body?
    [:post, :patch, :put].include? request_method
  end
end