Sha256: 545e407aa33a01ef0ba696e14e6a298f9cac167d1e3aae71ea41ff714c2379c0
Contents?: true
Size: 1.59 KB
Versions: 1
Compression:
Stored size: 1.59 KB
Contents
require 'uri' module Http # Clients make requests and receive responses class Client include Chainable attr_reader :default_options def initialize(default_options = {}) @default_options = Options.new(default_options) end # Make an HTTP request def request(method, uri, options = {}) opts = @default_options.merge(options) headers = opts.headers if opts.form body = URI.encode_www_form(opts.form) headers['Content-Type'] ||= 'application/x-www-form-urlencoded' end request = Request.new method, uri, headers, body opts.callbacks[:request].each { |c| c.call(request) } response = perform request opts.callbacks[:response].each { |c| c.call(response) } format_response method, response, opts.response end def perform(request) uri = request.uri http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.is_a? URI::HTTPS response = http.request request.to_net_http_request Http::Response.new.tap do |res| response.each_header do |header, value| res[header] = value end res.status = Integer(response.code) res.body = response.body end end def format_response(method, response, option) case option when :auto, NilClass method == :head ? response : response.parse_body when :object response when :parsed_body response.parse_body when :body response.body else raise ArgumentError, "invalid response type: #{option}" end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
http-0.2.0 | lib/http/client.rb |