module CodeClimate::TestReporter

def self.ci_service_data

def self.ci_service_data
  Ci.service_data
end

def self.configuration

def self.configuration
  @@configuration || configure
end

def self.configure

def self.configure
  @@configuration = Configuration.new
  if block_given?
    yield configuration
  end
  configuration
end

def self.configured_branch

def self.configured_branch
  configuration.branch
end

def self.current_branch

def self.current_branch
  Git.branch_from_git_or_ci
end

def self.environment_variable_set?

def self.environment_variable_set?
  return @environment_variable_set if defined?(@environment_variable_set)
  @environment_variable_set = !!ENV["CODECLIMATE_REPO_TOKEN"]
  if @environment_variable_set
    logger.info("Reporting coverage data to Code Climate.")
  end
  @environment_variable_set
end

def self.logger

def self.logger
  CodeClimate::TestReporter.configuration.logger
end

def self.run(results)

def self.run(results)
  return unless CodeClimate::TestReporter.run?
  formatted_results = CodeClimate::TestReporter::Formatter.new.format(results)
  CodeClimate::TestReporter::PostResults.new(formatted_results).post
end

def self.run?

def self.run?
  environment_variable_set? && run_on_current_branch?
end

def self.run_on_current_branch?

def self.run_on_current_branch?
  return @run_on_current_branch if defined?(@run_on_current_branch)
  @run_on_current_branch = true if configured_branch.nil?
  @run_on_current_branch ||= !!(current_branch =~ /#{configured_branch}/i)
  unless @run_on_current_branch
    logger.info("Not reporting to Code Climate because #{configured_branch} is set as the reporting branch.")
  end
  @run_on_current_branch
end

def self.start

def self.start
  logger.warn(WARNING_MESSAGE)
  exit(1)
end

def self.tddium?

def self.tddium?
  ci_service_data && ci_service_data[:name] == "tddium"
end