class Travis::Client::Artifact

def body(stream = block_given?)

def body(stream = block_given?)
  return current_body unless block_given? or stream
  return yield(current_body) unless stream and job.pending?
  number = 0
  session.listen(self) do |listener|
    listener.on 'job:log' do |event|
      next unless event.payload['number'] > number
      number = event.payload['number']
      yield event.payload['_log']
      listener.disconnect if event.payload['final']
    end
    listener.on 'job:finished' do |event|
      listener.disconnect
    end
    listener.on_connect do
      data = session.get_raw("/logs/#{id}", nil, "Accept" => CHUNKED)['log']
      if data['parts']
        data['parts'].each { |p| yield p['content'] }
        number = data['parts'].last['number'] if data['parts'].any?
      else
        yield data['body']
        listener.disconnect
      end
    end
  end
end