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

def clean_body

def clean_body
  attributes['clean_body'] ||= Tools::SafeString.clean(body)
end

def colorized_body

def colorized_body
  attributes['colorized_body'] ||= Tools::SafeString.colorized(body)
end

def current_body

def current_body
  attributes['current_body'] ||= begin
    body = load_attribute('body')
    body.to_s.empty? ? session.get_raw("jobs/#{job_id}/log") : body
  end
end

def encoded_body

def encoded_body
  Tools::SafeString.encoded(body)
end

def pusher_entity

def pusher_entity
  job
end