class BulutfonSDK::REST::BaseRequest

Constants

HTTP_HEADERS

Public Class Methods

new(*args) click to toggle source
# File lib/bulutfon_sdk/rest/base_request.rb, line 11
def initialize(*args)
  options = args.last.is_a?(Hash) ? args.pop : {}
  args.select! {|arg| !arg.nil?}
  @config = BulutfonSDK::Util::ClientConfig.new options
  if args.count > 1
    @email = args[0] || nil
    @password = args[1] || nil
    @auth_type = 'credentials'
  else
    @token = args[0] || nil
    @auth_type = 'token'
  end
  raise ArgumentError, 'Auth token or user credentials are required' if (@token.nil? && (@email.nil? || @password.nil?))
  set_up_connection
end

Protected Instance Methods

connect_and_send(request, is_file = false ) click to toggle source

Send an HTTP request using the cached @http object and return the JSON response body parsed into a hash. Also save the raw Net::HTTP::Request and Net::HTTP::Response objects as @last_request and @last_response to allow for inspection later.

# File lib/bulutfon_sdk/rest/base_request.rb, line 108
def connect_and_send(request, is_file = false ) # :doc:
  @last_request = request
  retries_left = @config.retry_limit
  begin
    response = @http.request request
    @last_response = response
    if response.kind_of? Net::HTTPServerError
      raise BulutfonSDK::REST::ServerError
    end
  rescue
    raise if request.class == Net::HTTP::Post
    if retries_left > 0 then retries_left -= 1; retry else raise end
  end
  if response.body and !response.body.empty?
    if is_file
      object = response.body
    else
      object = MultiJson.load response.body
    end
  elsif response.kind_of? Net::HTTPBadRequest
    object = { message: 'Bad request', code: 400 }
  end

  if response.kind_of? Net::HTTPClientError
    raise BulutfonSDK::REST::RequestError.new object['error'], object['code']
  end
  object
end
prepare_request(method, path, params = {}) click to toggle source

Prepare http request

# File lib/bulutfon_sdk/rest/base_request.rb, line 38
def prepare_request(method, path, params = {})
  uri                   = uri_parse(params, path)
  uri.query             = URI.encode_www_form(params) if ['get', 'delete'].include?(method)
  method_class          = Net::HTTP.const_get method.to_s.capitalize
  request               = method_class.new(uri.to_s, HTTP_HEADERS)
  request.form_data     = params if ['post', 'put'].include?(method)
  connect_and_send(request)
end
prepare_uri(path, params = {}) click to toggle source

Prepare URI object for file path

# File lib/bulutfon_sdk/rest/base_request.rb, line 30
def prepare_uri(path, params = {})
  uri       = uri_parse(params, path)
  uri.query = URI.encode_www_form(params)
  uri
end
save_file(method, path, save_path, params = {}) click to toggle source

Prepare http request for file saving

# File lib/bulutfon_sdk/rest/base_request.rb, line 69
def save_file(method, path, save_path, params = {})
  uri          = prepare_uri(path, params)
  method_class = Net::HTTP.const_get method.to_s.capitalize
  request      = method_class.new(uri.to_s, HTTP_HEADERS)
  response     = connect_and_send(request, is_file: true )
  begin
    file = File.open(save_path, 'w')
    file.write(response)
  rescue => error
    raise BulutfonSDK::REST::SDKError.new error
  ensure
    file.close unless file.nil?
  end
  { file: file, save_path: save_path }
end
set_up_connection() click to toggle source

Set up and cache a Net::HTTP object to use when making requests.

# File lib/bulutfon_sdk/rest/base_request.rb, line 87
def set_up_connection # :doc:
  uri                = URI.parse(@config.host)
  @http              = Net::HTTP.new(uri.host, uri.port, p_user = @config.proxy_user, p_pass =  @config.proxy_pass)
  @http.verify_mode  = OpenSSL::SSL::VERIFY_NONE
  @http.use_ssl      = @config.use_ssl
  if @config.ssl_verify_peer
    @http.verify_mode = OpenSSL::SSL::VERIFY_PEER
    @http.ca_file     = @config.ssl_ca_file
  else
    @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  @http.open_timeout = @config.timeout
  @http.read_timeout = @config.timeout
end
uri_parse(params, path) click to toggle source

URI parse for params

# File lib/bulutfon_sdk/rest/base_request.rb, line 49
def uri_parse(params, path)
  request_path = "#{@config.host}/#{path}"
  uri = URI.parse(request_path)
  encrypt_token = params.delete(:encrypt_token)
  id = params.delete(:id)
  if @auth_type == 'credentials'
    params[:email] = @email
    params[:password] = @password
  else
    if encrypt_token && id.present?
      params[:access_token] = Digest::SHA1.hexdigest(@token.to_s + id.to_s)
    else
      params[:access_token] = @token
    end
  end
  uri
end