Class: LongBody::ThinHandler::ResponseSender
- Inherits:
-
Object
- Object
- LongBody::ThinHandler::ResponseSender
- Defined in:
- lib/long_body/thin_handler.rb
Overview
Controls the scheduling of the trickle-feed using EM.next_tick.
Instance Attribute Summary collapse
-
#deferrable_body ⇒ Object
readonly
Returns the value of attribute deferrable_body.
Instance Method Summary collapse
- #abort! ⇒ Object
-
#initialize(eachable_body) ⇒ ResponseSender
constructor
A new instance of ResponseSender.
- #send_next_chunk ⇒ Object
Constructor Details
#initialize(eachable_body) ⇒ ResponseSender
Returns a new instance of ResponseSender.
36 37 38 39 40 41 42 |
# File 'lib/long_body/thin_handler.rb', line 36 def initialize(eachable_body) require_relative 'deferrable_body' require_relative 'lint_bypass' @eachable_body = eachable_body @enumerator = FiberWrapper.new(eachable_body) @deferrable_body = LongBody::DeferrableBody.new end |
Instance Attribute Details
#deferrable_body ⇒ Object (readonly)
Returns the value of attribute deferrable_body.
35 36 37 |
# File 'lib/long_body/thin_handler.rb', line 35 def deferrable_body @deferrable_body end |
Instance Method Details
#abort! ⇒ Object
44 45 46 47 |
# File 'lib/long_body/thin_handler.rb', line 44 def abort! @eachable_body.abort! @deferrable_body.fail end |
#send_next_chunk ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/long_body/thin_handler.rb', line 49 def send_next_chunk next_chunk = begin @enumerator.take rescue StandardError => e abort! end if next_chunk @deferrable_body.call([next_chunk]) # Has to be given in an Array EM.next_tick { send_next_chunk } else @deferrable_body.succeed end end |