lib/travis/client/artifact.rb in travis-1.4.0 vs lib/travis/client/artifact.rb in travis-1.5.0

- old
+ new

@@ -1,27 +1,63 @@ # encoding: utf-8 require 'travis/client' +require 'travis/tools/safe_string' module Travis module Client class Artifact < Entity + CHUNKED = "application/json; chunked=true; version=2, application/json; version=2" + # @!parse attr_reader :job_id, :type, :body attributes :job_id, :type, :body # @!parse attr_reader :job has :job def encoded_body - return body unless body.respond_to? :encode - body.encode 'utf-8' + Tools::SafeString.encoded(body) end def colorized_body - attributes['colorized_body'] ||= encoded_body.gsub(/[^[:print:]\e\n]/, '') + attributes['colorized_body'] ||= Tools::SafeString.colorized(body) end def clean_body - attributes['clean_body'] ||= colorized_body.gsub(/\e[^m]+m/, '') + attributes['clean_body'] ||= Tools::SafeString.clean(body) + end + + def body(stream = block_given?) + return load_attribute('body') unless block_given? or stream + return yield(load_attribute('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("/artifacts/#{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 pusher_entity + job end one :log many :logs aka :artifact