class Duracloud::Request

Attributes

body[R]
headers[R]
http_method[R]
query[R]
url[R]

Public Class Methods

execute(http_method, url, **options, &block) click to toggle source
# File lib/duracloud/request.rb, line 9
def self.execute(http_method, url, **options, &block)
  request = new(http_method, url, **options)
  request.execute(&block)
end
new(http_method, url, **options) click to toggle source

@param http_method [Symbol] the lower-case symbol corresponding to HTTP method @param url [String] relative or absolute URL @param body [String] the body of the request @param headers [Hash] HTTP headers @param query [Hash] Query string parameters def initialize(client, http_method, url, body: nil, headers: nil, query: nil)

# File lib/duracloud/request.rb, line 20
def initialize(http_method, url, **options)
  @http_method = http_method
  @url         = Addressable::URI.parse(url).normalize.to_s
  set_options(options.dup)
end

Public Instance Methods

execute(&block) click to toggle source
# File lib/duracloud/request.rb, line 26
def execute(&block)
  Response.new(original_response(&block)).tap do |response|
    log_request(response)
  end
end

Private Instance Methods

connection() click to toggle source

@return [HTTPClient] An HTTP connection to DuraCloud. @note We are using HTTPClient because Net::HTTP capitalizes request header names which is incompatible with DuraCloud's custom case-sensitive content property headers (x-dura-meta-*).

# File lib/duracloud/request.rb, line 66
def connection
  HTTPClient.new(base_url: Duracloud.base_url, force_basic_auth: Duracloud.auth?).tap do |conn|
    conn.set_auth(Duracloud.base_url, Duracloud.user, Duracloud.password) if Duracloud.auth?
  end
end
log_request(response) click to toggle source
# File lib/duracloud/request.rb, line 34
def log_request(response)
  message = [ self.class.to_s,
              response.request_method,
              response.request_uri,
              response.request_query,
              response.status,
              response.reason
            ].join(' ')
  Duracloud.logger.debug(message)
end
original_response(&block) click to toggle source
# File lib/duracloud/request.rb, line 45
def original_response(&block)
  connection.send(http_method,
                  url,
                  body: body,
                  query: query,
                  header: headers,
                  &block)
end
set_options(options) click to toggle source
# File lib/duracloud/request.rb, line 54
def set_options(options)
  @body    = options.delete(:body)
  @headers = options.delete(:headers)
  query    = options.delete(:query) || {}
  # Treat other keywords args as query params and ignore empty params
  @query = query.merge(options).reject { |k, v| v.to_s.empty? }
end