class RestClient::EmHttpRequest
Public Class Methods
new(args)
click to toggle source
Calls superclass method
# File lib/rest-client-adapters/em_http_request.rb, line 7 def initialize(args) raise ArgumentError, ':block_response option is not supported' if args[:block_response] super(args) end
Public Instance Methods
execute(&block)
click to toggle source
# File lib/rest-client-adapters/em_http_request.rb, line 12 def execute(&block) uri = parse_url_with_auth!(url) connection = build_connection(uri) client = transmit(connection, &block) raise client.error if client.error net_http_response = build_net_http_response(client) process_result(net_http_response, &block) ensure payload.close if payload end
Private Instance Methods
build_client(connection)
click to toggle source
# File lib/rest-client-adapters/em_http_request.rb, line 59 def build_client(connection) connection.setup_request(method, build_request_options) end
build_connection(uri)
click to toggle source
# File lib/rest-client-adapters/em_http_request.rb, line 52 def build_connection(uri) uri = uri.dup uri.user = nil uri.password = nil EM::HttpRequest.new(uri, build_connection_options) end
build_connection_options()
click to toggle source
# File lib/rest-client-adapters/em_http_request.rb, line 63 def build_connection_options options = {} if connect_timeout = open_timeout options[:connect_timeout] = connect_timeout end if inactivity_timeout = read_timeout options[:inactivity_timeout] = inactivity_timeout end if proxy_uri options[:proxy] = { host: proxy_uri.host, port: proxy_uri.port, authorization: [proxy_uri.user, proxy_uri.password] } end options end
build_net_http_response(client)
click to toggle source
# File lib/rest-client-adapters/em_http_request.rb, line 96 def build_net_http_response(client) klass = Net::HTTPResponse.send( :response_class, client.response_header.status.to_s ) response = klass.new( client.response_header.http_version, client.response_header.status.to_s, client.response_header.http_reason ) client.response_header.raw.each do |k, v| response.add_field(k, v) end response.body = client.response response.instance_variable_set :@read, true response end
build_request_options()
click to toggle source
# File lib/rest-client-adapters/em_http_request.rb, line 85 def build_request_options options = {} options[:decoding] = false options[:head] = processed_headers if user options[:head]['authorization'] = [user, password] end options[:body] = payload.to_s options end
sync_transmit(connection, &block)
click to toggle source
# File lib/rest-client-adapters/em_http_request.rb, line 40 def sync_transmit(connection, &block) client = build_client(connection) if client.error client else fiber = Fiber.current client.callback { fiber.resume(client) } client.errback { fiber.resume(client) } Fiber.yield end end
transmit(connection, &block)
click to toggle source
# File lib/rest-client-adapters/em_http_request.rb, line 25 def transmit(connection, &block) client = nil if EM.reactor_running? client = sync_transmit(connection, &block) else EM.run do Fiber.new do client = sync_transmit(connection, &block) EM.stop end.resume end end client end