Class: LearnTest::Reporter

Inherits:
Object
  • Object
show all
Defined in:
lib/learn_test/reporter.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(strategy, options = {}) ⇒ Reporter



19
20
21
22
23
24
# File 'lib/learn_test/reporter.rb', line 19

def initialize(strategy, options = {})
  @strategy = strategy
  @output_path = options[:output_path] || File.join(Dir.home, '.learn.debug')
  @client = options[:client] || LearnTest::Client.new
  @debug = options[:debug]
end

Instance Attribute Details

#debugObject

Returns the value of attribute debug.



11
12
13
# File 'lib/learn_test/reporter.rb', line 11

def debug
  @debug
end

#output_pathObject

Returns the value of attribute output_path.



11
12
13
# File 'lib/learn_test/reporter.rb', line 11

def output_path
  @output_path
end

Class Method Details

.report(strategy, options = {}) ⇒ Object



13
14
15
16
17
# File 'lib/learn_test/reporter.rb', line 13

def self.report(strategy, options = {})
  reporter = new(strategy, options)
  reporter.report
  reporter.retry_failed_reports
end

Instance Method Details

#failed_reportsObject



26
27
28
29
# File 'lib/learn_test/reporter.rb', line 26

def failed_reports
  return {} unless File.exists?(output_path)
  JSON.load(File.read(output_path)) || {}
end

#reportObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/learn_test/reporter.rb', line 48

def report
  results = strategy.results
  endpoint = strategy.service_endpoint
  augment_results!(results)

  if client.post_results(endpoint, results)
    if !LearnTest::GitWip.run! && @debug
      puts 'There was a problem connecting to Github. Not pushing current branch state.'.red
    end
  else
    if @debug
      puts 'There was a problem connecting to Learn. Not pushing test results.'.red
    end

    save_failed_attempt(endpoint, results)
  end
end

#retry_failed_reportsObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/learn_test/reporter.rb', line 31

def retry_failed_reports
  previous_reports = failed_reports
  previous_reports.delete_if do |endpoint, results|
    results.delete_if do |result|
      !!client.post_results(endpoint, result)
    end.empty?
  end

  if previous_reports.empty?
    FileUtils.rm_f(output_path)
  else
    File.open(output_path, 'w') do |file|
      file.write("#{JSON.dump(previous_reports)}\n")
    end
  end
end