Class: Grape::Middleware::Async
- Inherits:
-
Base
- Object
- Base
- Grape::Middleware::Async
- Defined in:
- lib/grape-async/middleware/async.rb
Instance Method Summary collapse
Instance Method Details
#async_call(result) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/grape-async/middleware/async.rb', line 41 def async_call(result) if @env['async.callback'] async_io.call result elsif @env['rack.hijack'] begin if result.last.is_a?(Rack::BodyProxy) async_io << result.last.body.first result.last.close unless result.last.closed? elsif result.last.is_a?(Array) async_io << result.last.first end ensure EM.stop if endpoint.async_route?(:em) @env['rack.hijack'].close end end end |
#async_io ⇒ Object
59 60 61 62 63 |
# File 'lib/grape-async/middleware/async.rb', line 59 def async_io @env['async.callback'] || begin @env.key?('rack.hijack') ? @env['rack.hijack'].call : nil end end |
#call!(env) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/grape-async/middleware/async.rb', line 5 def call!(env) @env = env if endpoint.async_route? && !async_io.nil? if endpoint.async_route?(:em) proc = lambda { EM.next_tick do super endpoint.deferred_resp.callback do resp = endpoint.file || [endpoint.body] async_call [endpoint.status, endpoint.header, resp] end end } if !EM.reactor_running? EM.run do proc.call end else proc.call end else Thread.new do result = super async_call result yield end end [-1, {}, []] # Return async response else super end end |
#endpoint ⇒ Object
65 66 67 |
# File 'lib/grape-async/middleware/async.rb', line 65 def endpoint @env[Grape::Env::API_ENDPOINT] end |