rspec_log_formatter 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +1 -1
  3. data/.ruby-version +1 -1
  4. data/README.md +53 -7
  5. data/bin/rspec_log_formatter +30 -0
  6. data/dummy/.gitignore +16 -0
  7. data/dummy/.rspec +1 -0
  8. data/dummy/Gemfile +47 -0
  9. data/dummy/README.rdoc +28 -0
  10. data/dummy/Rakefile +6 -0
  11. data/dummy/app/assets/images/.keep +0 -0
  12. data/dummy/app/assets/javascripts/application.js +16 -0
  13. data/dummy/app/assets/stylesheets/application.css +13 -0
  14. data/dummy/app/controllers/application_controller.rb +5 -0
  15. data/dummy/app/controllers/concerns/.keep +0 -0
  16. data/dummy/app/helpers/application_helper.rb +2 -0
  17. data/dummy/app/mailers/.keep +0 -0
  18. data/dummy/app/models/.keep +0 -0
  19. data/dummy/app/models/concerns/.keep +0 -0
  20. data/dummy/app/views/layouts/application.html.erb +14 -0
  21. data/dummy/bin/bundle +3 -0
  22. data/dummy/bin/rails +4 -0
  23. data/dummy/bin/rake +4 -0
  24. data/dummy/config/application.rb +23 -0
  25. data/dummy/config/boot.rb +4 -0
  26. data/dummy/config/database.yml +25 -0
  27. data/dummy/config/environment.rb +5 -0
  28. data/dummy/config/environments/development.rb +29 -0
  29. data/dummy/config/environments/production.rb +80 -0
  30. data/dummy/config/environments/test.rb +36 -0
  31. data/dummy/config/initializers/backtrace_silencers.rb +7 -0
  32. data/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  33. data/dummy/config/initializers/inflections.rb +16 -0
  34. data/dummy/config/initializers/mime_types.rb +5 -0
  35. data/dummy/config/initializers/secret_token.rb +12 -0
  36. data/dummy/config/initializers/session_store.rb +3 -0
  37. data/dummy/config/initializers/wrap_parameters.rb +14 -0
  38. data/dummy/config/locales/en.yml +23 -0
  39. data/dummy/config/routes.rb +56 -0
  40. data/dummy/config.ru +4 -0
  41. data/dummy/db/schema.rb +16 -0
  42. data/dummy/db/seeds.rb +7 -0
  43. data/dummy/lib/assets/.keep +0 -0
  44. data/dummy/lib/tasks/.keep +0 -0
  45. data/dummy/log/.keep +0 -0
  46. data/dummy/public/404.html +58 -0
  47. data/dummy/public/422.html +58 -0
  48. data/dummy/public/500.html +57 -0
  49. data/dummy/public/favicon.ico +0 -0
  50. data/dummy/public/robots.txt +5 -0
  51. data/dummy/spec/dummy_spec.rb +7 -0
  52. data/dummy/spec/spec_helper.rb +46 -0
  53. data/dummy/test/controllers/.keep +0 -0
  54. data/dummy/test/fixtures/.keep +0 -0
  55. data/dummy/test/helpers/.keep +0 -0
  56. data/dummy/test/integration/.keep +0 -0
  57. data/dummy/test/mailers/.keep +0 -0
  58. data/dummy/test/models/.keep +0 -0
  59. data/dummy/test/test_helper.rb +15 -0
  60. data/dummy/vendor/assets/javascripts/.keep +0 -0
  61. data/dummy/vendor/assets/stylesheets/.keep +0 -0
  62. data/lib/rspec_log_formatter/analysis/analyzer.rb +15 -50
  63. data/lib/rspec_log_formatter/analysis/pretty_printer.rb +10 -6
  64. data/lib/rspec_log_formatter/analysis/result.rb +8 -4
  65. data/lib/rspec_log_formatter/analysis/score.rb +42 -6
  66. data/lib/rspec_log_formatter/analyzer_formatter.rb +18 -6
  67. data/lib/rspec_log_formatter/formatter.rb +19 -12
  68. data/lib/rspec_log_formatter/history_manager.rb +46 -0
  69. data/lib/rspec_log_formatter/javascripts/chartkick.js +678 -0
  70. data/lib/rspec_log_formatter/performance_analyzer.rb +40 -0
  71. data/lib/rspec_log_formatter/templates/charts.html.erb +11 -0
  72. data/lib/rspec_log_formatter/version.rb +1 -1
  73. data/lib/rspec_log_formatter.rb +2 -1
  74. data/rspec_log_formatter.gemspec +1 -0
  75. data/spec/fixtures/test_slowing_down_over_time.history +7 -0
  76. data/spec/fixtures/varying_flakiness.history +9 -9
  77. data/spec/lib/rspec_log_analyzer/analysis/analyzer_spec.rb +25 -21
  78. data/spec/lib/rspec_log_analyzer/analysis/pretty_printer_spec.rb +10 -8
  79. data/spec/lib/rspec_log_analyzer/analyzer_formatter_spec.rb +3 -3
  80. data/spec/lib/rspec_log_analyzer/formatter_spec.rb +16 -18
  81. data/spec/lib/rspec_log_analyzer/history_manager_spec.rb +16 -0
  82. data/spec/lib/rspec_log_analyzer/performance_analyzer_spec.rb +16 -0
  83. data/specs.sh +4 -0
  84. metadata +95 -12
@@ -0,0 +1,40 @@
1
+ require 'erb'
2
+ require 'chartkick'
3
+
4
+ module RspecLogFormatter
5
+ class ERBContext
6
+ include Chartkick::Helper
7
+ def initialize(hash)
8
+ hash.each_pair do |key, value|
9
+ instance_variable_set('@' + key.to_s, value)
10
+ end
11
+ end
12
+ def get_binding
13
+ binding
14
+ end
15
+ end
16
+ class PerformanceAnalyzer
17
+ def initialize(filepath)
18
+ @history_manager = HistoryManager.new(filepath)
19
+ end
20
+
21
+ def write(description, filepath)
22
+ chartkick_js = File.open(File.join(File.dirname(__FILE__), './javascripts/chartkick.js')).read
23
+ data = analyze(description)
24
+ context = ERBContext.new({chartkick_js: chartkick_js, plots: data})
25
+ template = ERB.new(File.open(File.join(File.dirname(__FILE__), './templates/charts.html.erb')).read)
26
+ html = template.result(context.get_binding)
27
+
28
+ File.open(filepath, 'w').write(html)
29
+ end
30
+
31
+ def analyze(test_description)
32
+ @history_manager.results
33
+ .select{ |result| Array(test_description).include? result.description }
34
+ .reduce({}) do |memo, result|
35
+ memo[result.time.to_s] = result.duration
36
+ memo
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,11 @@
1
+ <h1>Charts</h1>
2
+ <head>
3
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
4
+ <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/highcharts/3.0.9/highcharts.js"> </script>
5
+ <script>
6
+ <%= @chartkick_js %>
7
+ </script>
8
+ </head>
9
+ <body>
10
+ <%= line_chart @plots %>
11
+ </body>
@@ -1,3 +1,3 @@
1
1
  module RspecLogFormatter
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  require "rspec_log_formatter/version"
2
- Dir[File.join(File.dirname(__FILE__), "./**/*.rb")].each {|file| require file }
3
2
  module RspecLogFormatter
3
+ FILENAME = "rspec.history"
4
4
  end
5
+ Dir[File.join(File.dirname(__FILE__), "./**/*.rb")].each {|file| require file }
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_dependency 'chartkick'
21
22
  spec.add_development_dependency "bundler", "~> 1.5"
22
23
  spec.add_development_dependency "rake"
23
24
  spec.add_development_dependency "rspec"
@@ -0,0 +1,7 @@
1
+ 1 2014-01-21 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 1.0
2
+ 1 2014-01-22 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 2.0
3
+ 1 2014-01-24 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 3.0
4
+ 1 2014-01-24 16:00:00 -0800 passed desc3 ./spec/m1k1_spec.rb 9.0
5
+ 1 2014-01-24 16:00:00 -0800 passed desc4 ./spec/m1k1_spec.rb 7.0
6
+ 1 2014-01-29 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 4.0
7
+ 1 2014-01-30 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 5.0
@@ -1,9 +1,9 @@
1
- 1 2014-01-21 16:08:25 -0800 failed desc1 ./spec/m1k1_spec.rb msg10 ec10
2
- 1 2014-01-21 16:08:25 -0800 passed desc1 ./spec/m1k1_spec.rb
3
- 1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10
4
- 1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10
5
- 1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10
6
- 1 2014-01-21 16:08:25 -0800 passed desc3 ./spec/m1k1_spec.rb
7
- 1 2014-01-21 16:08:25 -0800 failed desc2 ./spec/m1k1_spec.rb msg10 ec10
8
- 1 2014-01-21 16:08:25 -0800 failed desc2 ./spec/m1k1_spec.rb msg10 ec10
9
- 1 2014-01-21 16:08:25 -0800 passed desc2 ./spec/m1k1_spec.rb
1
+ 1 2014-01-21 16:08:25 -0800 failed desc1 ./spec/m1k1_spec.rb msg10 ec10 16.0
2
+ 1 2014-01-21 16:08:25 -0800 passed desc1 ./spec/m1k1_spec.rb 8.0
3
+ 1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10 16.0
4
+ 1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10 16.0
5
+ 1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10 16.0
6
+ 1 2014-01-21 16:08:25 -0800 passed desc3 ./spec/m1k1_spec.rb 8.0
7
+ 1 2014-01-21 16:08:25 -0800 failed desc2 ./spec/m1k1_spec.rb msg10 ec10 16.0
8
+ 1 2014-01-21 16:08:25 -0800 failed desc2 ./spec/m1k1_spec.rb msg10 ec10 16.0
9
+ 1 2014-01-21 16:08:25 -0800 passed desc2 ./spec/m1k1_spec.rb 8.0
@@ -2,18 +2,23 @@ require "spec_helper"
2
2
  require 'tempfile'
3
3
 
4
4
  describe RspecLogFormatter::Analysis::Analyzer do
5
- it "sorts the parsed results by failure percentage" do
5
+ it "sorts the parsed results by failure fraction" do
6
6
  filepath = File.expand_path("../../../../fixtures/varying_flakiness.history", __FILE__)
7
- described_class.new.analyze(filepath).map{|r| r[:percent] }.should == [
8
- 75.0, 100*2.0/3.0, 50.0
7
+ history_provider = RspecLogFormatter::HistoryManager.new(filepath)
8
+ described_class.new(history_provider).analyze.map{|r| r[:fraction] }.should == [
9
+ 0.75, 2.0/3.0, 0.50
9
10
  ]
11
+ described_class.new(history_provider, max_reruns: 0).analyze.map{|r| r[:cost] }.should == [14.0, 13.333333333333332, 12.0]
12
+ described_class.new(history_provider, max_reruns: 1).analyze.map{|r| r[:cost] }.should == [15.5, 15.11111111111111, 14.0]
13
+ described_class.new(history_provider, max_reruns: 2).analyze.map{|r| r[:cost] }.should == [18.875, 18.666666666666668, 17.0]
14
+ described_class.new(history_provider, max_reruns: 3).analyze.map{|r| r[:cost] }.should == [23.09375, 22.617283950617285, 19.5]
10
15
  end
11
16
 
12
17
  it "works" do
13
18
  filepath = File.expand_path("../../../../fixtures/fail_history_analyzer.rspec.history", __FILE__)
14
- described_class.new.analyze(filepath).first.should == {
19
+ described_class.new(RspecLogFormatter::HistoryManager.new(filepath)).analyze.first.should == {
15
20
  description: "description0",
16
- percent: 85.71428571428571,
21
+ fraction: 0.8571428571428571,
17
22
  failure_messages: [
18
23
  "ec10\n msg10",
19
24
  "ec20\n msg20",
@@ -25,31 +30,30 @@ describe RspecLogFormatter::Analysis::Analyzer do
25
30
  }
26
31
  end
27
32
 
33
+ it "works for a test that only passes" do
34
+ result = double(description: 'desc', build_number: 1, failure?: false, success?: true, time: Time.at(0))
35
+ history_provider = double(builds: [1], results: [result])
36
+ described_class.new(history_provider, max_reruns: 3).analyze.should be_empty
37
+ end
28
38
 
29
- it "can truncate the log file" do
30
- filepath = File.expand_path("../../../../fixtures/test_was_flaky_then_fixed.history", __FILE__)
31
- temp = Tempfile.new('fixture')
32
- FileUtils.copy(filepath, temp.path)
33
- described_class.new.truncate(temp.path, keep_builds: 3)
34
- File.open(temp.path, 'r').read.should == <<HEREDOC
35
- 5 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
36
- 6 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
37
- 7 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
38
- HEREDOC
39
+ it "works for a test that only fails" do
40
+ result = double(description: 'desc', build_number: 1, failure?: true, success?: false, time: Time.at(0))
41
+ history_provider = double(builds: [1], results: [result])
42
+ described_class.new(history_provider, max_reruns: 3).analyze.should be_empty
39
43
  end
40
44
 
41
45
  it "can analyze only a window of builds" do
42
46
  filepath = File.expand_path("../../../../fixtures/test_was_flaky_then_fixed.history", __FILE__)
43
- subject.analyze(filepath, last_builds: 7).first.should == {
47
+ history_provider = RspecLogFormatter::HistoryManager.new(filepath)
48
+ described_class.new(history_provider, builds_to_analyze: 7).analyze.first.should == {
44
49
  description: "desc",
45
- percent: 30.0,
50
+ fraction: 0.30,
46
51
  failure_messages: ["ec10\n msg10", "ec10\n msg10", "ec10\n msg10"]
47
52
  }
48
- subject.analyze(filepath, last_builds: 4).first.should == {
53
+ described_class.new(history_provider, builds_to_analyze: 5).analyze.first.should == {
49
54
  description: "desc",
50
- percent: 0.0,
51
- failure_messages: []
55
+ fraction: 0.16666666666666666,
56
+ failure_messages: ["ec10\n msg10"],
52
57
  }
53
-
54
58
  end
55
59
  end
@@ -4,19 +4,21 @@ describe RspecLogFormatter::Analysis::PrettyPrinter do
4
4
  it "pretty prints the results of an analysis" do
5
5
  results = [{
6
6
  description: "I fail a lot.",
7
- percent: 99,
7
+ fraction: 0.99,
8
+ cost: 7.7,
8
9
  failure_messages: ["I'm a total failure."]
9
10
  },{
10
11
  description: "I fail often.",
11
- percent: 70,
12
+ fraction: 0.70,
13
+ cost: 3.3,
12
14
  failure_messages: ["I am a failure message.", "I'm another failure message."]
13
15
  }]
14
16
 
15
17
  described_class.new(results).to_s.should == <<-TEXT.strip
16
18
  Top 2 flakiest examples
17
- 1) I fail a lot. -- 99%
19
+ 1) I fail a lot. -- 99% (cost: 7s)
18
20
  * I'm a total failure.
19
- 2) I fail often. -- 70%
21
+ 2) I fail often. -- 70% (cost: 3s)
20
22
  * I am a failure message.
21
23
  * I'm another failure message.
22
24
  TEXT
@@ -25,7 +27,7 @@ Top 2 flakiest examples
25
27
  context "when there are more than 10 results" do
26
28
  it "only prints the top 10" do
27
29
  results = (1..11).map do |i|
28
- {description: "hi#{i}", percent: 1, failure_messages: ["bye#{i}"]}
30
+ {description: "hi#{i}", fraction: 0.01, failure_messages: ["bye#{i}"]}
29
31
  end
30
32
 
31
33
  described_class.new(results).to_s.should == <<-TEXT.strip
@@ -56,9 +58,9 @@ Top 10 flakiest examples
56
58
 
57
59
  it "only prints flaky specs" do
58
60
  results = (1..7).map do |i|
59
- {description: "hi#{i}", percent: 1, failure_messages: ["bye#{i}"]}
61
+ {description: "hi#{i}", fraction: 0.01, failure_messages: ["bye#{i}"]}
60
62
  end + (8..10).map do |i|
61
- {description: "hi#{i}", percent: 0.0, failure_messages: ["bye#{i}"]}
63
+ {description: "hi#{i}", fraction: 0.0, failure_messages: ["bye#{i}"]}
62
64
 
63
65
  end
64
66
 
@@ -83,7 +85,7 @@ Top 10 flakiest examples
83
85
 
84
86
  it "only prints flaky specs" do
85
87
  results = (1..11).map do |i|
86
- {description: "hi#{i}", percent: 0, failure_messages: ["bye#{i}"]}
88
+ {description: "hi#{i}", fraction: 0.0, failure_messages: ["bye#{i}"]}
87
89
  end
88
90
 
89
91
  described_class.new(results).to_s.should == "None of the specs were flaky"
@@ -12,19 +12,19 @@ describe RspecLogFormatter::Formatter do
12
12
  out.rewind
13
13
  out.read.should == <<HEREDOC
14
14
  Top 3 flakiest examples
15
- 1) desc3 -- 75.0%
15
+ 1) desc3 -- 75%
16
16
  * ec10
17
17
  msg10
18
18
  * ec10
19
19
  msg10
20
20
  * ec10
21
21
  msg10
22
- 2) desc2 -- 66.66666666666667%
22
+ 2) desc2 -- 66%
23
23
  * ec10
24
24
  msg10
25
25
  * ec10
26
26
  msg10
27
- 3) desc1 -- 50.0%
27
+ 3) desc1 -- 50%
28
28
  * ec10
29
29
  msg10
30
30
  HEREDOC
@@ -1,47 +1,45 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe RspecLogFormatter::Formatter do
4
-
5
- def make_example(opts={})
6
- @count ||= 0; @count += 1
4
+ def make_example(count, opts={})
7
5
  double({
8
- full_description: "description_#{@count}",
9
- file_path: "path_#{@count}"
6
+ full_description: "description_#{count}",
7
+ file_path: "path_#{count}"
10
8
  }.merge(opts))
11
9
  end
12
10
 
13
- def formatter_for_build(build)
14
- RspecLogFormatter::Formatter.new(double(now: Time.at(0)), keep_builds: 2, build_number: build)
11
+ def formatter_for_build(build, opts={})
12
+ RspecLogFormatter::Formatter.new({clock: double(now: Time.at(0)), build_number: build}.merge(opts))
15
13
  end
16
14
 
17
15
  it "can truncate the log file" do
18
- the_example = make_example
19
- formatter = formatter_for_build(1)
16
+ the_example = make_example(1, limit_history: 2)
17
+ formatter = formatter_for_build(nil)
20
18
  formatter.example_started(the_example)
21
19
  formatter.example_passed(the_example)
22
20
  formatter.dump_summary(1,2,3,4)
23
21
 
24
- formatter = formatter_for_build(2)
22
+ formatter = formatter_for_build(2, limit_history: 2)
25
23
  formatter.example_started(the_example)
26
24
  formatter.example_passed(the_example)
27
25
  formatter.dump_summary(1,2,3,4)
28
26
 
29
- File.open(RspecLogFormatter::Formatter::FILENAME, 'r').read.should == <<HEREDOC
30
- 1 1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
27
+ File.open(RspecLogFormatter::FILENAME, 'r').read.should == <<HEREDOC
28
+ 1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
31
29
  2 1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
32
30
  HEREDOC
33
31
 
34
- formatter = formatter_for_build(3)
32
+ formatter = formatter_for_build(3, limit_history: 2)
35
33
  formatter.example_started(the_example)
36
34
  formatter.example_passed(the_example)
37
35
  formatter.dump_summary(1,2,3,4)
38
36
 
39
- formatter = formatter_for_build(4)
37
+ formatter = formatter_for_build(4, limit_history: 2)
40
38
  formatter.example_started(the_example)
41
39
  formatter.example_passed(the_example)
42
40
  formatter.dump_summary(1,2,3,4)
43
41
 
44
- File.open(RspecLogFormatter::Formatter::FILENAME, 'r').read.should == <<HEREDOC
42
+ File.open(RspecLogFormatter::FILENAME, 'r').read.should == <<HEREDOC
45
43
  3 1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
46
44
  4 1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
47
45
  HEREDOC
@@ -55,11 +53,11 @@ HEREDOC
55
53
  end
56
54
 
57
55
  it "works" do
58
- failed_example = make_example(exception: Exception.new("Error"))
59
- passed_example = make_example(exception: nil)
56
+ failed_example = make_example(1, exception: Exception.new("Error"))
57
+ passed_example = make_example(2, exception: nil)
60
58
  time = Time.parse("2014-02-06 16:01:10")
61
59
  clock = FakeClock.new(time)
62
- formatter = RspecLogFormatter::Formatter.new(clock)
60
+ formatter = RspecLogFormatter::Formatter.new(clock: clock)
63
61
  formatter.example_started(failed_example)
64
62
  clock.now = time + 5
65
63
  formatter.example_failed(failed_example)
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe RspecLogFormatter::HistoryManager do
4
+ it "can truncate the log file" do
5
+ filepath = File.expand_path("../../../fixtures/test_was_flaky_then_fixed.history", __FILE__)
6
+ temp = Tempfile.new('fixture')
7
+ FileUtils.copy(filepath, temp.path)
8
+ RspecLogFormatter::HistoryManager.new(temp.path).truncate(3)
9
+ File.open(temp.path, 'r').read.should == <<HEREDOC
10
+ 5 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
11
+ 6 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
12
+ 7 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
13
+ HEREDOC
14
+ end
15
+ end
16
+
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe RspecLogFormatter::PerformanceAnalyzer do
4
+ it "produces a csv of run durations" do
5
+ filepath = File.expand_path("../../../fixtures/test_slowing_down_over_time.history", __FILE__)
6
+
7
+ results = RspecLogFormatter::PerformanceAnalyzer.new(filepath).analyze("desc1")
8
+ results.should == {
9
+ "2014-01-21 16:00:00 -0800" => 1.0,
10
+ "2014-01-22 16:00:00 -0800" => 2.0,
11
+ "2014-01-24 16:00:00 -0800" => 3.0,
12
+ "2014-01-29 16:00:00 -0800" => 4.0,
13
+ "2014-01-30 16:00:00 -0800" => 5.0,
14
+ }
15
+ end
16
+ end
data/specs.sh ADDED
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ rm -f dummy/rspec.history
3
+ rspec && cd dummy && rspec && cd ..
4
+ cat dummy/rspec.history
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec_log_formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Serguei Filimonov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-08 00:00:00.000000000 Z
11
+ date: 2014-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: chartkick
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -28,48 +42,49 @@ dependencies:
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ! '>='
45
+ - - '>='
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ! '>='
52
+ - - '>='
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ! '>='
59
+ - - '>='
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ! '>='
66
+ - - '>='
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: pry
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ! '>='
73
+ - - '>='
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ! '>='
80
+ - - '>='
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  description: Logs the outcomes of the tests to a file
70
84
  email:
71
85
  - sfilimonov@pivotallabs.com
72
- executables: []
86
+ executables:
87
+ - rspec_log_formatter
73
88
  extensions: []
74
89
  extra_rdoc_files: []
75
90
  files:
@@ -80,6 +95,63 @@ files:
80
95
  - LICENSE.txt
81
96
  - README.md
82
97
  - Rakefile
98
+ - bin/rspec_log_formatter
99
+ - dummy/.gitignore
100
+ - dummy/.rspec
101
+ - dummy/Gemfile
102
+ - dummy/README.rdoc
103
+ - dummy/Rakefile
104
+ - dummy/app/assets/images/.keep
105
+ - dummy/app/assets/javascripts/application.js
106
+ - dummy/app/assets/stylesheets/application.css
107
+ - dummy/app/controllers/application_controller.rb
108
+ - dummy/app/controllers/concerns/.keep
109
+ - dummy/app/helpers/application_helper.rb
110
+ - dummy/app/mailers/.keep
111
+ - dummy/app/models/.keep
112
+ - dummy/app/models/concerns/.keep
113
+ - dummy/app/views/layouts/application.html.erb
114
+ - dummy/bin/bundle
115
+ - dummy/bin/rails
116
+ - dummy/bin/rake
117
+ - dummy/config.ru
118
+ - dummy/config/application.rb
119
+ - dummy/config/boot.rb
120
+ - dummy/config/database.yml
121
+ - dummy/config/environment.rb
122
+ - dummy/config/environments/development.rb
123
+ - dummy/config/environments/production.rb
124
+ - dummy/config/environments/test.rb
125
+ - dummy/config/initializers/backtrace_silencers.rb
126
+ - dummy/config/initializers/filter_parameter_logging.rb
127
+ - dummy/config/initializers/inflections.rb
128
+ - dummy/config/initializers/mime_types.rb
129
+ - dummy/config/initializers/secret_token.rb
130
+ - dummy/config/initializers/session_store.rb
131
+ - dummy/config/initializers/wrap_parameters.rb
132
+ - dummy/config/locales/en.yml
133
+ - dummy/config/routes.rb
134
+ - dummy/db/schema.rb
135
+ - dummy/db/seeds.rb
136
+ - dummy/lib/assets/.keep
137
+ - dummy/lib/tasks/.keep
138
+ - dummy/log/.keep
139
+ - dummy/public/404.html
140
+ - dummy/public/422.html
141
+ - dummy/public/500.html
142
+ - dummy/public/favicon.ico
143
+ - dummy/public/robots.txt
144
+ - dummy/spec/dummy_spec.rb
145
+ - dummy/spec/spec_helper.rb
146
+ - dummy/test/controllers/.keep
147
+ - dummy/test/fixtures/.keep
148
+ - dummy/test/helpers/.keep
149
+ - dummy/test/integration/.keep
150
+ - dummy/test/mailers/.keep
151
+ - dummy/test/models/.keep
152
+ - dummy/test/test_helper.rb
153
+ - dummy/vendor/assets/javascripts/.keep
154
+ - dummy/vendor/assets/stylesheets/.keep
83
155
  - lib/rspec_log_formatter.rb
84
156
  - lib/rspec_log_formatter/analysis/analyzer.rb
85
157
  - lib/rspec_log_formatter/analysis/pretty_printer.rb
@@ -87,16 +159,24 @@ files:
87
159
  - lib/rspec_log_formatter/analysis/score.rb
88
160
  - lib/rspec_log_formatter/analyzer_formatter.rb
89
161
  - lib/rspec_log_formatter/formatter.rb
162
+ - lib/rspec_log_formatter/history_manager.rb
163
+ - lib/rspec_log_formatter/javascripts/chartkick.js
164
+ - lib/rspec_log_formatter/performance_analyzer.rb
165
+ - lib/rspec_log_formatter/templates/charts.html.erb
90
166
  - lib/rspec_log_formatter/version.rb
91
167
  - rspec_log_formatter.gemspec
92
168
  - spec/fixtures/fail_history_analyzer.rspec.history
169
+ - spec/fixtures/test_slowing_down_over_time.history
93
170
  - spec/fixtures/test_was_flaky_then_fixed.history
94
171
  - spec/fixtures/varying_flakiness.history
95
172
  - spec/lib/rspec_log_analyzer/analysis/analyzer_spec.rb
96
173
  - spec/lib/rspec_log_analyzer/analysis/pretty_printer_spec.rb
97
174
  - spec/lib/rspec_log_analyzer/analyzer_formatter_spec.rb
98
175
  - spec/lib/rspec_log_analyzer/formatter_spec.rb
176
+ - spec/lib/rspec_log_analyzer/history_manager_spec.rb
177
+ - spec/lib/rspec_log_analyzer/performance_analyzer_spec.rb
99
178
  - spec/spec_helper.rb
179
+ - specs.sh
100
180
  homepage: ''
101
181
  licenses:
102
182
  - MIT
@@ -107,26 +187,29 @@ require_paths:
107
187
  - lib
108
188
  required_ruby_version: !ruby/object:Gem::Requirement
109
189
  requirements:
110
- - - ! '>='
190
+ - - '>='
111
191
  - !ruby/object:Gem::Version
112
192
  version: '0'
113
193
  required_rubygems_version: !ruby/object:Gem::Requirement
114
194
  requirements:
115
- - - ! '>='
195
+ - - '>='
116
196
  - !ruby/object:Gem::Version
117
197
  version: '0'
118
198
  requirements: []
119
199
  rubyforge_project:
120
- rubygems_version: 2.2.2
200
+ rubygems_version: 2.2.1
121
201
  signing_key:
122
202
  specification_version: 4
123
203
  summary: Logs the outcomes of the tests to a file
124
204
  test_files:
125
205
  - spec/fixtures/fail_history_analyzer.rspec.history
206
+ - spec/fixtures/test_slowing_down_over_time.history
126
207
  - spec/fixtures/test_was_flaky_then_fixed.history
127
208
  - spec/fixtures/varying_flakiness.history
128
209
  - spec/lib/rspec_log_analyzer/analysis/analyzer_spec.rb
129
210
  - spec/lib/rspec_log_analyzer/analysis/pretty_printer_spec.rb
130
211
  - spec/lib/rspec_log_analyzer/analyzer_formatter_spec.rb
131
212
  - spec/lib/rspec_log_analyzer/formatter_spec.rb
213
+ - spec/lib/rspec_log_analyzer/history_manager_spec.rb
214
+ - spec/lib/rspec_log_analyzer/performance_analyzer_spec.rb
132
215
  - spec/spec_helper.rb