class Coveralls::Lcov::Runner

Public Class Methods

new(argv) click to toggle source
# File lib/coveralls/lcov/runner.rb, line 14
      def initialize(argv)
        @argv = argv
        @repo_token = nil
        @n_times = 3
        @delay = 3
        @source_encoding = Encoding::UTF_8
        @service_name = "travis-ci"
        @service_job_id = nil
        @branch = nil
        @service_pull_request = nil
        @flag_name = nil
        @verbose = false
        @dry_run = false
        @host = "coveralls.io"
        @port = 443
        @use_ssl = true
        @parallel = ENV["COVERALLS_PARALLEL"] == "true"
        @parser = OptionParser.new(@argv)
        @parser.banner = <<BANNER
  Usage: coveralls-lcov [options] coverage.info

  e.g. coveralls-lcov -v coverage.info

BANNER
        @parser.on("-t", "--repo-token=TOKEN", "Repository token") do |token|
          @repo_token = token
        end
        @parser.on("-s", "--service-name=SERVICENAME", "Service name") do |service_name|
          @service_name = service_name
        end
        @parser.on("--service-job-id=JOB_ID", "Service job id. ex. TRAVIS_JOB_ID") do |service_job_id|
          @service_job_id = service_job_id
        end
        @parser.on("-b", "--branch=BRANCH", "The current Git branch. ex. TRAVIS_BRANCH") do |branch|
          @branch = branch
        end
        @parser.on("--service-pull-request=PULL_REQUEST", "Service pull request number. ex. TRAVIS_PULL_REQUEST") do |service_pull_request|
          @service_pull_request = service_pull_request
        end
        @parser.on("--flag-name=FLAG_NAME", "Flag name. ex. \"domain_layer\"") do |flag_name|
          @flag_name = flag_name
        end
        @parser.on("--retry=N", Integer, "Retry to POST N times (default: 3)") do |n_times|
          @n_times = n_times
        end
        @parser.on("--delay=N", Integer, "Delay in N secs when retry (default: 3)") do |delay|
          @delay = delay
        end
        @parser.on("--source-encoding=ENCODING",
                   "Source files encoding  (default: UTF-8)") do |encoding|
          @source_encoding = Encoding.find(encoding)
        end
        @parser.on("-v", "--verbose", "Print payload") do
          @verbose = true
        end
        @parser.on("-n", "--dry-run", "Dry run") do
          @dry_run = true
        end
        @parser.on("-h", "--host=HOST", "Host of Coveralls endpoint (default: coveralls.io)") do |host|
          @host = host
        end
        @parser.on("-p", "--port=PORT", "Port of Coveralls endpoint (default: 443)") do |port|
          @port = port
        end
        @parser.on("--[no-]ssl", "Use SSL for connecting (default)") do |use_ssl|
          @use_ssl = use_ssl
        end
      end

Public Instance Methods

post(payload) click to toggle source
# File lib/coveralls/lcov/runner.rb, line 118
      def post(payload)
        Net::HTTP.version_1_2
        response = nil

        http = Net::HTTP.new(@host, @port)
        http.use_ssl = @use_ssl
        http.start do
          request = Net::HTTP::Post.new(PATH)
          request["content-type"] = "multipart/form-data; boundary=boundary"
          request.body = <<BODY.gsub(/\n/, "\r\n")
--boundary
content-disposition: form-data; name="json_file"; filename="payload.json"

#{payload}

--boundary--
BODY
          response = http.request(request)
          p response
          puts response.body
        end

        response
      end
run() click to toggle source
# File lib/coveralls/lcov/runner.rb, line 83
def run
  @parser.parse!
  unless @argv.size == 1
    warn "Too many arguments! <#{@argv.join(",")}>"
    warn @parser.help
    exit false
  end
  tracefile = @argv.shift
  converter = Converter.new(tracefile, @source_encoding, @service_name, @service_job_id, @branch)
  payload = converter.convert
  coveralls_config = YAML.load_file(".coveralls.yml") if File.exist? ".coveralls.yml"
  if @repo_token
    payload[:repo_token] = @repo_token
  elsif coveralls_config && coveralls_config["repo_token"]
    payload[:repo_token] = coveralls_config["repo_token"]
  end
  if @service_pull_request
    payload[:service_pull_request] = @service_pull_request
  end
  if @flag_name
    payload[:flag_name] = @flag_name
  end
  payload[:parallel] = @parallel
  payload_json = payload.to_json
  puts payload_json if @verbose
  unless @dry_run
    @n_times.times do
      response = post(payload_json)
      return true if response.is_a?(Net::HTTPSuccess)
      sleep @delay
    end
  end
  false
end