Sha256: d7be7dc6b6159ca879913cc37b130d8b06e7c37b2c136e381bc07e47e4d8166f
Contents?: true
Size: 1.13 KB
Versions: 1
Compression:
Stored size: 1.13 KB
Contents
require 'rest-core/middleware' require 'restclient/payload' require 'em-http-request' class RestCore::EmHttpRequestAsync include RestCore::Middleware def call env payload = ::RestClient::Payload.generate(env[REQUEST_PAYLOAD]) client = ::EventMachine::HttpRequest.new(request_uri(env)).send( env[REQUEST_METHOD], :body => payload.read, :head => payload.headers.merge(env[REQUEST_HEADERS])) client.callback{ respond(env, client) } client. errback{ respond(env, client) } env[TIMER].on_timeout{ client.close env[ASYNC].call(env.merge(RESPONSE_BODY => env[TIMER].error, RESPONSE_STATUS => 0 , RESPONSE_HEADERS => {} )) if env[ASYNC] } if env[TIMER] env end def respond env, client env[TIMER].cancel if env[TIMER] && !env[TIMER].canceled? env[ASYNC].call(env.merge( RESPONSE_BODY => client.response, RESPONSE_STATUS => client.response_header.status, RESPONSE_HEADERS => client.response_header)) if env[ASYNC] end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rest-core-1.0.3 | lib/rest-core/app/em-http-request-async.rb |