class Skyline::Body

Public Class Methods

new() click to toggle source
# File lib/skyline/body.rb, line 5
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/skyline/body.rb, line 12
def call(body)
  @queue << body
  schedule_dequeue
end
closed?() click to toggle source
# File lib/skyline/body.rb, line 22
def closed?
  @deferred_status != :unknown
end
each(&blk) click to toggle source
# File lib/skyline/body.rb, line 17
def each &blk
  @body_callback = blk
  schedule_dequeue
end
flush() click to toggle source
# File lib/skyline/body.rb, line 26
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/skyline/body.rb, line 34
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