class MessageBird::HttpClient

Constants

ALLOWED_METHODS
ENDPOINT
SUBMIT_METHODS
VALID_RESPONSE_CODES

Attributes

access_key[R]

Public Class Methods

new(access_key) click to toggle source
# File lib/messagebird/http_client.rb, line 19
def initialize(access_key)
  @access_key = access_key
end

Public Instance Methods

assert_json_response_type(content_type) click to toggle source

Throw an exception if the response's content type is not JSON. This only checks the header: it doesn't inspect the actual body.

# File lib/messagebird/http_client.rb, line 89
def assert_json_response_type(content_type)
  # Check whether the header starts with application/json and don't check
  # for equality: some API's may append the charset to this header.
  raise InvalidResponseException, 'Response is not JSON' unless content_type.start_with? 'application/json'
end
assert_valid_response_code(code) click to toggle source

Throw an exception if the response code is not one we expect from the MessageBird API.

# File lib/messagebird/http_client.rb, line 83
def assert_valid_response_code(code)
  raise ServerException, 'Unknown response from server' unless VALID_RESPONSE_CODES.include? code
end
build_http_client(uri) click to toggle source
# File lib/messagebird/http_client.rb, line 27
def build_http_client(uri)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  http.set_debug_output($stdout) unless ENV['DEBUG_MB_HTTP_CLIENT'].nil?

  http
end
build_request(method, uri, params = {}) click to toggle source
# File lib/messagebird/http_client.rb, line 64
def build_request(method, uri, params = {})
  # Construct the HTTP request.
  raise MethodNotAllowedException unless ALLOWED_METHODS.include?(method)

  request = Class.const_get("Net::HTTP::#{method.to_s.capitalize}").new(uri.request_uri)

  request['Accept']        = 'application/json'
  request['Authorization'] = "AccessKey #{@access_key}"
  request['User-Agent']    = "MessageBird/ApiClient/#{Version::STRING} Ruby/#{RUBY_VERSION}"

  if SUBMIT_METHODS.include?(method) && !params.empty?
    prepare_request(request, params)
  end

  request
end
endpoint() click to toggle source
# File lib/messagebird/http_client.rb, line 23
def endpoint
  ENDPOINT
end
prepare_request(request, params = {}) click to toggle source
# File lib/messagebird/http_client.rb, line 58
def prepare_request(request, params = {})
  request.set_form_data(params)

  request
end
request(method, path, params = {}, check_json = true) click to toggle source
# File lib/messagebird/http_client.rb, line 36
def request(method, path, params = {}, check_json = true)
  uri     = URI.join(endpoint, path)
  http    = build_http_client(uri)
  request = build_request(method, uri, params)

  # Execute the request and fetch the response.
  response = http.request(request)

  assert_valid_response_code(response.code.to_i)
  assert_json_response_type(response['Content-Type']) unless check_json

  response.body
end
request_block(method, path, params = {}, &block) click to toggle source
# File lib/messagebird/http_client.rb, line 50
def request_block(method, path, params = {}, &block)
  uri     = URI.join(endpoint, path)
  http    = build_http_client(uri)
  request = build_request(method, uri, params)

  http.request(request, block)
end