Class: ReportAssembler

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

Constant Summary collapse

MAXIMUM_RECENTS =
10
ROOT_PATH =
File.expand_path(File.dirname(__FILE__))
TEMPLATES_PATH =
File.join(ROOT_PATH, *%w[.. templates])

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output_directory) ⇒ ReportAssembler

Returns a new instance of ReportAssembler.



8
9
10
11
# File 'lib/report_assembler.rb', line 8

def initialize(output_directory)
  @test_results = []
  @output_directory = output_directory
end

Instance Attribute Details

#test_resultsObject

Returns the value of attribute test_results.



6
7
8
# File 'lib/report_assembler.rb', line 6

def test_results
  @test_results
end

Instance Method Details

#filename_from_version(string) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/report_assembler.rb', line 24

def filename_from_version(string)
  s = string[0..240]
  
  if Dir["#{s}*.json"].size > 0
    s += "-#{Dir["#{s}*.json"].size}"
  end
  
  s
end

#generateObject



13
14
15
16
17
18
19
20
21
22
# File 'lib/report_assembler.rb', line 13

def generate
  Dir.chdir(@output_directory) do
    @test_results.each do |result|
      update_project(result)
    end
    
    update_projects
    update_index
  end
end

#update_indexObject



78
79
80
81
82
83
84
# File 'lib/report_assembler.rb', line 78

def update_index
  index_template = HtmlAssetCrush.crush(File.join(TEMPLATES_PATH, "index.html"))
  
  File.open('index.html', 'w+') do |f|
    f.print index_template
  end
end

#update_project(result) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/report_assembler.rb', line 34

def update_project(result)
  FileUtils.mkdir_p(result.project_name)
  Dir.chdir(result.project_name) do
    filename = filename_from_version(result.version_output)
    File.open("#{filename}.json", 'w+') do |f|
      f.puts({
               "version" => result.version_output,
               "timestamp" => result.timestamp,
               "update" => result.update_output,
               "update_error" => result.update_error,
               "test" => result.test_output,
               "test_error" => result.test_error
             }.to_json)
    end
    
    update_recent(result, filename)
  end
end

#update_projectsObject



70
71
72
73
74
75
76
# File 'lib/report_assembler.rb', line 70

def update_projects
  projects = @test_results.map {|r| "#{r.project_name}"}
  
  File.open('projects.json', 'w+') do |f|
    f.print({"projects" => projects}.to_json)
  end
end

#update_recent(result, filename) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/report_assembler.rb', line 53

def update_recent(result, filename)
  recent_versions_json = File.open('recent.json', File::RDWR|File::CREAT).read
  
  recent_versions = []
  
  if !recent_versions_json.empty?
    recent_versions = JSON.parse(recent_versions_json)["recent_versions"]
  end
  
  recent_versions << filename
  recent_versions.shift if recent_versions.size > MAXIMUM_RECENTS
  
  File.open('recent.json', 'w+') do |f|
    f.print({"recent_versions" => recent_versions}.to_json)
  end
end