class Cramp::Body

Public Class Methods

new() click to toggle source
# File lib/cramp/body.rb, line 7
def initialize
  @queue = []

  # Make sure to flush out the queue before closing the connection
  callback { flush }
end

Public Instance Methods

call(body) click to toggle source
# File lib/cramp/body.rb, line 14
def call(body)
  @queue << body
  schedule_dequeue
end
closed?() click to toggle source
# File lib/cramp/body.rb, line 24
def closed?
  @deferred_status != :unknown
end
each(&blk) click to toggle source
# File lib/cramp/body.rb, line 19
def each &blk
  @body_callback = blk
  schedule_dequeue
end
flush() click to toggle source
# File lib/cramp/body.rb, line 28
def flush
  return unless @body_callback

  until @queue.empty?
    Array(@queue.shift).each {|chunk| @body_callback.call(chunk) }
  end
end
schedule_dequeue() click to toggle source
# File lib/cramp/body.rb, line 36
def schedule_dequeue
  return unless @body_callback

  EventMachine.next_tick do
    next unless body = @queue.shift

    Array(body).each {|chunk| @body_callback.call(chunk) }
    schedule_dequeue unless @queue.empty?
  end
end