class WADL::HTTPRequest

Constants

DEFAULT_CONTENT_TYPE
DEFAULT_METHOD
DEFAULT_USER_AGENT
OAUTH_HEADER
OAUTH_PREFIX

Attributes

http[RW]
uri[RW]

Public Class Methods

execute(uri, *args) click to toggle source
# File lib/wadl/http_request.rb, line 48
def execute(uri, *args)
  new(uri).execute(*args)
end
new(uri) click to toggle source
# File lib/wadl/http_request.rb, line 63
def initialize(uri)
  self.uri = URI(uri)
end
oauth_header(args) click to toggle source
# File lib/wadl/http_request.rb, line 52
def oauth_header(args)
  return unless valid_oauth_args?(args)
  [OAUTH_HEADER, "#{OAUTH_PREFIX}#{args.to_yaml}"]
end
valid_oauth_args?(args) click to toggle source
# File lib/wadl/http_request.rb, line 57
def valid_oauth_args?(args)
  args.is_a?(Array) && args.size == 4
end

Public Instance Methods

execute(*args) click to toggle source
# File lib/wadl/http_request.rb, line 85
def execute(*args)
  start unless started?

  req = prepare_request(*args)
  res = http.request(req)

  HTTPResponse.new(res)
end
finish() click to toggle source
# File lib/wadl/http_request.rb, line 76
def finish
  http.finish if started?
  self
end
start() click to toggle source
# File lib/wadl/http_request.rb, line 67
def start
  self.http = Net::HTTP.start(
    uri.hostname, uri.port,
    use_ssl: uri.scheme == 'https'
  )

  self
end
started?() click to toggle source
# File lib/wadl/http_request.rb, line 81
def started?
  http && http.started?
end

Private Instance Methods

make_request(method) click to toggle source
# File lib/wadl/http_request.rb, line 107
def make_request(method)
  Net::HTTP.const_get(method.to_s.capitalize).new(uri)
rescue NameError
  raise ArgumentError, "method not supported: #{method}"
end
prepare_request(method, body, headers) click to toggle source
# File lib/wadl/http_request.rb, line 98
def prepare_request(method, body, headers)
  req = make_request(method || DEFAULT_METHOD)
  req.body = body if req.request_body_permitted?

  set_headers(req, headers)

  req
end
set_headers(req, headers) click to toggle source
# File lib/wadl/http_request.rb, line 113
def set_headers(req, headers)
  set_oauth_header(req, headers)

  headers['User-Agent']   ||= DEFAULT_USER_AGENT
  headers['Content-Type'] ||= DEFAULT_CONTENT_TYPE

  headers.each { |key, value|
    Array(value).each { |val| req.add_field(key, val) }
  }
end
set_oauth_header(req, headers) click to toggle source
# File lib/wadl/http_request.rb, line 124
def set_oauth_header(req, headers)
  args = SafeYAML.load($') if headers[OAUTH_HEADER] =~ /\A#{OAUTH_PREFIX}/
  return unless self.class.valid_oauth_args?(args)

  headers[OAUTH_HEADER] = OAuth::Client::Helper.new(req,
    request_uri:      req.request_uri,
    consumer:         consumer = OAuth::Consumer.new(*args[0, 2]),
    token:            OAuth::AccessToken.new(consumer, *args[2, 2]),
    scheme:           'header',
    signature_method: 'HMAC-SHA1'
  ).header
end