coverband 2.0.0 → 2.0.3

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 (39) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -1
  3. data/README.md +198 -62
  4. data/Rakefile +7 -0
  5. data/changes.md +40 -0
  6. data/config.ru +4 -0
  7. data/coverband.gemspec +1 -2
  8. data/lib/coverband/adapters/memory_cache_store.rb +16 -16
  9. data/lib/coverband/adapters/redis_store.rb +51 -16
  10. data/lib/coverband/collectors/base.rb +1 -1
  11. data/lib/coverband/collectors/coverage.rb +20 -8
  12. data/lib/coverband/collectors/trace.rb +17 -7
  13. data/lib/coverband/configuration.rb +31 -6
  14. data/lib/coverband/reporters/base.rb +2 -2
  15. data/lib/coverband/reporters/simple_cov_report.rb +6 -1
  16. data/lib/coverband/reporters/web.rb +152 -0
  17. data/lib/coverband/s3_report_writer.rb +13 -2
  18. data/lib/coverband/tasks.rb +0 -46
  19. data/lib/coverband/version.rb +1 -1
  20. data/lib/coverband.rb +6 -5
  21. data/test/benchmarks/benchmark.rake +89 -10
  22. data/test/test_helper.rb +0 -5
  23. data/test/unit/adapters_memory_cache_store_test.rb +40 -30
  24. data/test/unit/adapters_redis_store_test.rb +12 -3
  25. data/test/unit/collectors_base_test.rb +3 -1
  26. data/test/unit/collectors_coverage_test.rb +3 -3
  27. data/test/unit/collectors_trace_test.rb +3 -1
  28. data/test/unit/reports_console_test.rb +10 -1
  29. data/test/unit/reports_simple_cov_test.rb +11 -2
  30. data/test/unit/reports_web_test.rb +37 -0
  31. data/test/unit/s3_report_writer_test.rb +7 -1
  32. metadata +7 -26
  33. data/docs/coverband_details.png +0 -0
  34. data/docs/coverband_index.png +0 -0
  35. data/docs/coverband_install.gif +0 -0
  36. data/lib/coverband/baseline.rb +0 -44
  37. data/lib/coverband/s3_web.rb +0 -25
  38. data/test/unit/baseline_test.rb +0 -59
  39. data/test/unit/s3_web_test.rb +0 -28
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  namespace :benchmarks do
3
-
4
3
  # https://github.com/evanphx/benchmark-ips
5
4
  # Enable and start GC before each job run. Disable GC afterwards.
6
5
  #
@@ -48,7 +47,7 @@ namespace :benchmarks do
48
47
  require 'benchmark'
49
48
  require 'benchmark/ips'
50
49
 
51
- # TODO ok this is interesting and weird
50
+ # TODO: ok this is interesting and weird
52
51
  # basically the earlier I require coverage and
53
52
  # then require files the larger perf impact
54
53
  # this is somewhat expected but can lead to significant perf diffs
@@ -67,6 +66,16 @@ namespace :benchmarks do
67
66
  require File.join(File.dirname(__FILE__), 'dog')
68
67
  end
69
68
 
69
+ def benchmark_redis_store
70
+ redis = if ENV['REDIS_TEST_URL']
71
+ Redis.new(url: ENV['REDIS_TEST_URL'])
72
+ else
73
+ Redis.new
74
+ end
75
+ Coverband::Adapters::RedisStore.new(redis,
76
+ redis_namespace: 'coverband_bench')
77
+ end
78
+
70
79
  desc 'set up coverband tracepoint Redis'
71
80
  task :setup_redis do
72
81
  Coverband.configure do |config|
@@ -76,7 +85,7 @@ namespace :benchmarks do
76
85
  config.logger = $stdout
77
86
  config.collector = 'trace'
78
87
  config.memory_caching = ENV['MEMORY_CACHE'] ? true : false
79
- config.store = Coverband::Adapters::RedisStore.new(Redis.new)
88
+ config.store = benchmark_redis_store
80
89
  end
81
90
  end
82
91
 
@@ -88,7 +97,8 @@ namespace :benchmarks do
88
97
  config.logger = $stdout
89
98
  config.collector = 'trace'
90
99
  config.memory_caching = ENV['MEMORY_CACHE'] ? true : false
91
- config.store = Coverband::Adapters::FileStore.new('/tmp/benchmark_store.json')
100
+ file_path = '/tmp/benchmark_store.json'
101
+ config.store = Coverband::Adapters::FileStore.new(file_path)
92
102
  end
93
103
  end
94
104
 
@@ -104,7 +114,7 @@ namespace :benchmarks do
104
114
  config.logger = $stdout
105
115
  config.collector = 'coverage'
106
116
  config.memory_caching = ENV['MEMORY_CACHE'] ? true : false
107
- config.store = Coverband::Adapters::RedisStore.new(Redis.new)
117
+ config.store = benchmark_redis_store
108
118
  end
109
119
  end
110
120
 
@@ -138,12 +148,12 @@ namespace :benchmarks do
138
148
  10_000.times { Dog.new.bark }
139
149
  end
140
150
 
151
+ # puts "benchmark for: #{Coverband.configuration.inspect}"
152
+ # puts "store: #{Coverband.configuration.store.inspect}"
141
153
  def run_work(hold_work = false)
142
154
  suite = GCSuite.new
143
- #puts "benchmark for: #{Coverband.configuration.inspect}"
144
- #puts "store: #{Coverband.configuration.store.inspect}"
145
155
  Benchmark.ips do |x|
146
- x.config(:time => 12, :warmup => 5, :suite => suite)
156
+ x.config(time: 12, warmup: 5, suite: suite)
147
157
  x.report 'coverband' do
148
158
  Coverband::Collectors::Base.instance.sample do
149
159
  work
@@ -159,6 +169,73 @@ namespace :benchmarks do
159
169
  Coverband::Collectors::Base.instance.reset_instance
160
170
  end
161
171
 
172
+ def fake_line_numbers
173
+ 24.times.each_with_object({}) do |line, line_hash|
174
+ line_hash[(line + 1).to_s] = rand(5)
175
+ end
176
+ end
177
+
178
+ def fake_report
179
+ 2934.times.each_with_object({}) do |file_number, hash|
180
+ hash["file#{file_number + 1}.rb"] = fake_line_numbers
181
+ end
182
+ end
183
+
184
+ def adjust_report(report)
185
+ report.keys.each do |file|
186
+ next unless rand < 0.15
187
+ report[file] = fake_line_numbers
188
+ end
189
+ report
190
+ end
191
+
192
+ def reporting_speed
193
+ report = fake_report
194
+ store = benchmark_redis_store
195
+
196
+ 5.times { store.save_report(report) }
197
+ Benchmark.ips do |x|
198
+ x.config(time: 15, warmup: 5)
199
+ x.report('store_reports') { store.save_report(report) }
200
+ end
201
+ end
202
+
203
+ def reporting_memorycache_speed
204
+ report = fake_report
205
+ redis_store = benchmark_redis_store
206
+ cache_store = Coverband::Adapters::MemoryCacheStore.new(redis_store)
207
+
208
+ 5.times do
209
+ redis_store.save_report(report)
210
+ cache_store.save_report(report)
211
+ adjust_report(report)
212
+ end
213
+ Benchmark.ips do |x|
214
+ x.config(time: 15, warmup: 5)
215
+ x.report('store_redis_reports') do
216
+ redis_store.save_report(report)
217
+ adjust_report(report)
218
+ end
219
+ x.report('store_cache_reports') do
220
+ cache_store.save_report(report)
221
+ adjust_report(report)
222
+ end
223
+ x.compare!
224
+ end
225
+ end
226
+
227
+ desc 'runs benchmarks on reporting large sets of files to redis'
228
+ task redis_reporting: [:setup] do
229
+ puts 'runs benchmarks on reporting large sets of files to redis'
230
+ reporting_speed
231
+ end
232
+
233
+ desc 'benchmarks: reporting large sets of files to redis using memory cache'
234
+ task cache_reporting: [:setup] do
235
+ puts 'benchmarks: reporting large sets of files to redis using memory cache'
236
+ reporting_memorycache_speed
237
+ end
238
+
162
239
  desc 'runs benchmarks on default redis setup'
163
240
  task run_redis: [:setup, :setup_redis] do
164
241
  puts 'Coverband tracepoint configured with default Redis store'
@@ -179,11 +256,13 @@ namespace :benchmarks do
179
256
 
180
257
  desc 'compare Coverband Ruby Coverage with normal Ruby'
181
258
  task :compare_coverage do
182
- puts 'comparing with Coverage loaded and not, this takes some time for output...'
259
+ puts 'comparing Coverage loaded/not, this takes some time for output...'
183
260
  puts `COVERAGE=true rake benchmarks:run_coverage`
184
261
  puts `rake benchmarks:run_coverage`
185
262
  end
186
263
  end
187
264
 
188
265
  desc 'runs benchmarks'
189
- task benchmarks: ['benchmarks:run_file', 'benchmarks:run_redis', 'benchmarks:compare_coverage']
266
+ task benchmarks: ['benchmarks:run_file',
267
+ 'benchmarks:run_redis',
268
+ 'benchmarks:compare_coverage']
data/test/test_helper.rb CHANGED
@@ -59,11 +59,6 @@ end
59
59
 
60
60
  require 'coverband'
61
61
 
62
- unless File.exist?('./tmp/coverband_baseline.json')
63
- `mkdir -p ./tmp`
64
- `touch ./tmp/coverband_baseline.json`
65
- end
66
-
67
62
  Coverband.configure do |config|
68
63
  config.root = Dir.pwd
69
64
  config.root_paths = ['/app/']
@@ -5,52 +5,62 @@ require File.expand_path('../test_helper', File.dirname(__FILE__))
5
5
  module Coverband
6
6
  class MemoryCacheStoreTest < Test::Unit::TestCase
7
7
  def setup
8
- Adapters::MemoryCacheStore.reset!
9
- @store = mock('store')
8
+ Adapters::MemoryCacheStore.clear!
9
+ @redis = Redis.new
10
+ @store = Coverband::Adapters::RedisStore.new(@redis)
11
+ @store.clear!
10
12
  @memory_store = Adapters::MemoryCacheStore.new(@store)
11
13
  end
12
14
 
13
- def data
14
- {
15
- 'file1' => { 3 => 1, 5 => 2 },
16
- 'file2' => { 1 => 1, 2 => 1 }
17
- }
18
- end
19
-
20
15
  test 'it passes data into store' do
16
+ data = {
17
+ 'file1' => { 1 => 0, 2 => 1, 3 => 0 },
18
+ 'file2' => { 1 => 5, 2 => 2 }
19
+ }
21
20
  @store.expects(:save_report).with data
22
- @store.expects(:covered_lines_for_file).with('file1').returns []
23
- @store.expects(:covered_lines_for_file).with('file2').returns []
24
21
  @memory_store.save_report data
25
22
  end
26
23
 
27
- test 'it passes data into store only once' do
24
+
25
+ test 'it filters coverage with same exact data' do
26
+ data = {
27
+ 'file1' => { 1 => 0, 2 => 1, 3 => 0 },
28
+ 'file2' => { 1 => 5, 2 => 2 }
29
+ }
28
30
  @store.expects(:save_report).once.with data
29
- @store.expects(:covered_lines_for_file).with('file1').returns []
30
- @store.expects(:covered_lines_for_file).with('file2').returns []
31
31
  2.times { @memory_store.save_report data }
32
32
  end
33
+
34
+ test 'it filters coverage for files with same exact data' do
35
+
36
+ report_first_request = {
37
+ 'file1' => { 1 => 0, 2 => 1, 3 => 0 },
38
+ 'file2' => { 1 => 5, 2 => 2 }
39
+ }
33
40
 
34
- test 'it only passes files and lines we have not hit yet' do
35
- second_data = {
36
- 'file1' => { 3 => 1, 5 => 1, 10 => 1 },
37
- 'file2' => { 1 => 1, 2 => 1 }
41
+ report_second_request = {
42
+ 'file1' => { 1 => 0, 2 => 1, 3 => 0 },
43
+ 'file2' => { 1 => 5, 2 => 3 }
38
44
  }
39
- @store.expects(:covered_lines_for_file).with('file1').returns []
40
- @store.expects(:covered_lines_for_file).with('file2').returns []
41
- @store.expects(:save_report).once.with data
42
- @store.expects(:save_report).once.with(
43
- 'file1' => { 10 => 1 }
44
- )
45
- @memory_store.save_report data
46
- @memory_store.save_report second_data
45
+ @store.expects(:save_report).with({
46
+ 'file1' => { 1 => 0, 2 => 1, 3 => 0 },
47
+ 'file2' => { 1 => 5, 2 => 2 }
48
+ })
49
+ @store.expects(:save_report).with({
50
+ 'file2' => { 1 => 5, 2 => 3 }
51
+ })
52
+ @memory_store.save_report(report_first_request)
53
+ @memory_store.save_report(report_second_request)
47
54
  end
48
55
 
49
56
  test 'it initializes cache with what is in store' do
50
- @store.expects(:covered_lines_for_file).with('file1').returns [3, 5]
51
- @store.expects(:covered_lines_for_file).with('file2').returns [2]
52
- @store.expects(:save_report).with('file2' => { 1 => 1 })
53
- @memory_store.save_report data
57
+ data = {
58
+ 'file1' => { 1 => 0, 2 => 1, 3 => 0 },
59
+ 'file2' => { 1 => 5, 2 => 2 }
60
+ }
61
+ Coverband::Adapters::RedisStore.new(@redis).save_report(data)
62
+ @store.expects(:save_report).never
63
+ @memory_store.save_report(data)
54
64
  end
55
65
  end
56
66
  end
@@ -17,13 +17,13 @@ class RedisTest < Test::Unit::TestCase
17
17
 
18
18
  def test_coverage
19
19
  @redis.sadd(BASE_KEY, 'dog.rb')
20
- @store.send(:store_map, "#{BASE_KEY}.dog.rb", example_hash)
21
- expected = { 'dog.rb' => example_hash }
20
+ @store.send(:pipelined_save, combined_report)
21
+ expected = {'dog.rb' => example_hash}
22
22
  assert_equal expected, @store.coverage
23
23
  end
24
24
 
25
25
  def test_covered_lines_for_file
26
- @store.send(:store_map, "#{BASE_KEY}.dog.rb", example_hash)
26
+ @store.send(:pipelined_save, combined_report)
27
27
  assert_equal [["1", "1"], ["2", "2"]], @store.covered_lines_for_file('dog.rb').sort
28
28
  end
29
29
 
@@ -47,6 +47,15 @@ class RedisTest < Test::Unit::TestCase
47
47
 
48
48
  private
49
49
 
50
+ def combined_report
51
+ {
52
+ "#{BASE_KEY}.dog.rb" => {
53
+ new: example_hash,
54
+ existing: {}
55
+ }
56
+ }
57
+ end
58
+
50
59
  def test_data
51
60
  {
52
61
  '/Users/danmayer/projects/cover_band_server/app.rb' => { 54 => 1, 55 => 2 },
@@ -49,6 +49,7 @@ class CollectorsBaseTest < Test::Unit::TestCase
49
49
  coverband.instance_variable_set('@store', nil)
50
50
  assert_equal false, coverband.instance_variable_get('@enabled')
51
51
  logger.expects(:info).at_least_once
52
+ logger.stubs('debug')
52
53
  coverband.sample { 1 + 1 }
53
54
  assert_equal true, coverband.instance_variable_get('@enabled')
54
55
  end
@@ -62,8 +63,8 @@ class CollectorsBaseTest < Test::Unit::TestCase
62
63
  coverband.instance_variable_set('@store', nil)
63
64
  assert_equal false, coverband.instance_variable_get('@enabled')
64
65
  logger.expects(:info).at_least_once
66
+ logger.stubs('debug')
65
67
  coverband.start
66
- logger.info(1 + 1)
67
68
  coverband.stop
68
69
  coverband.save
69
70
  end
@@ -74,6 +75,7 @@ class CollectorsBaseTest < Test::Unit::TestCase
74
75
  coverband.instance_variable_set('@sample_percentage', 100.0)
75
76
  coverband.instance_variable_set('@verbose', true)
76
77
  Coverband.configuration.logger.stubs('info')
78
+ Coverband.configuration.logger.stubs('debug')
77
79
  store = Coverband::Adapters::RedisStore.new(Redis.new)
78
80
  coverband.instance_variable_set('@store', store)
79
81
  store.expects(:save_report).once.with(has_entries(dog_file => {5 => 5}))
@@ -61,7 +61,8 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.3.0')
61
61
  coverband.instance_variable_set('@logger', logger)
62
62
  coverband.instance_variable_set('@store', nil)
63
63
  assert_equal false, coverband.instance_variable_get('@enabled')
64
- logger.expects(:info).at_least_once
64
+ logger.stubs('info')
65
+ logger.expects(:debug).at_least_once
65
66
  coverband.sample { 1 + 1 }
66
67
  assert_equal true, coverband.instance_variable_get('@enabled')
67
68
  end
@@ -74,6 +75,7 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.3.0')
74
75
  coverband.instance_variable_set('@store', nil)
75
76
  assert_equal false, coverband.instance_variable_get('@enabled')
76
77
  logger.expects(:info).at_least_once
78
+ logger.stubs('debug')
77
79
  coverband.start
78
80
  logger.info(1 + 1)
79
81
  coverband.stop
@@ -83,8 +85,6 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.3.0')
83
85
  test 'allow reporting to redis start stop save' do
84
86
  dog_file = File.expand_path('./dog.rb', File.dirname(__FILE__))
85
87
  coverband.instance_variable_set('@sample_percentage', 100.0)
86
- coverband.instance_variable_set('@verbose', true)
87
- Coverband.configuration.logger.stubs('info')
88
88
  store = Coverband::Adapters::RedisStore.new(Redis.new)
89
89
  coverband.instance_variable_set('@store', store)
90
90
 
@@ -50,6 +50,7 @@ class CollectorsTraceTest < Test::Unit::TestCase
50
50
  coverband.instance_variable_set('@store', nil)
51
51
  assert_equal false, coverband.instance_variable_get('@enabled')
52
52
  logger.expects(:info).at_least_once
53
+ logger.stubs('debug')
53
54
  coverband.sample { 1 + 1 }
54
55
  assert_equal true, coverband.instance_variable_get('@enabled')
55
56
  end
@@ -63,8 +64,8 @@ class CollectorsTraceTest < Test::Unit::TestCase
63
64
  coverband.instance_variable_set('@store', nil)
64
65
  assert_equal false, coverband.instance_variable_get('@enabled')
65
66
  logger.expects(:info).at_least_once
67
+ logger.stubs('debug')
66
68
  coverband.start
67
- logger.info(1 + 1)
68
69
  coverband.stop
69
70
  coverband.save
70
71
  end
@@ -75,6 +76,7 @@ class CollectorsTraceTest < Test::Unit::TestCase
75
76
  coverband.instance_variable_set('@sample_percentage', 100.0)
76
77
  coverband.instance_variable_set('@verbose', true)
77
78
  Coverband.configuration.logger.stubs('info')
79
+ Coverband.configuration.logger.stubs('debug')
78
80
  store = Coverband::Adapters::RedisStore.new(Redis.new)
79
81
  coverband.instance_variable_set('@store', store)
80
82
  store.expects(:save_report).once.with(has_entries(dog_file => { 5 => 5 }))
@@ -15,6 +15,15 @@ class SimpleCovReportTest < Test::Unit::TestCase
15
15
  {'1' => '1', '2' => '2'}
16
16
  end
17
17
 
18
+ def combined_report
19
+ {
20
+ "#{BASE_KEY}.test/unit/dog.rb" => {
21
+ new: example_hash,
22
+ existing: {}
23
+ }
24
+ }
25
+ end
26
+
18
27
  test 'report data' do
19
28
  Coverband.configure do |config|
20
29
  config.redis = @redis
@@ -25,7 +34,7 @@ class SimpleCovReportTest < Test::Unit::TestCase
25
34
  Coverband::Reporters::ConsoleReport.expects(:current_root).returns('./test/unit')
26
35
 
27
36
  @redis.sadd(BASE_KEY, 'test/unit/dog.rb')
28
- @store.send(:store_map, "#{BASE_KEY}.test/unit/dog.rb", example_hash)
37
+ @store.send(:pipelined_save, combined_report)
29
38
 
30
39
  report = Coverband::Reporters::ConsoleReport.report(@store)
31
40
  expected = {"test/unit/dog.rb"=>[1, 2, nil, nil, nil, nil, nil]}
@@ -15,6 +15,15 @@ class ReportsSimpleCovTest < Test::Unit::TestCase
15
15
  {'1' => '1', '2' => '2'}
16
16
  end
17
17
 
18
+ def combined_report
19
+ {
20
+ "#{BASE_KEY}.test/unit/dog.rb" => {
21
+ new: example_hash,
22
+ existing: {}
23
+ }
24
+ }
25
+ end
26
+
18
27
  test 'generate scov report' do
19
28
  Coverband.configure do |config|
20
29
  config.redis = @redis
@@ -26,7 +35,7 @@ class ReportsSimpleCovTest < Test::Unit::TestCase
26
35
  Coverband.configuration.logger.stubs('info')
27
36
 
28
37
  @redis.sadd(BASE_KEY, 'test/unit/dog.rb')
29
- @store.send(:store_map, "#{BASE_KEY}.test/unit/dog.rb", example_hash)
38
+ @store.send(:pipelined_save, combined_report)
30
39
 
31
40
  SimpleCov.expects(:track_files)
32
41
  SimpleCov.expects(:add_not_loaded_files).returns({})
@@ -48,7 +57,7 @@ class ReportsSimpleCovTest < Test::Unit::TestCase
48
57
  Coverband::Reporters::SimpleCovReport.expects(:current_root).at_least_once.returns('/tmp/root_dir')
49
58
 
50
59
  @redis.sadd(BASE_KEY, 'test/unit/dog.rb')
51
- @store.send(:store_map, "#{BASE_KEY}.test/unit/dog.rb", example_hash)
60
+ @store.send(:pipelined_save, combined_report)
52
61
  SimpleCov.expects(:track_files)
53
62
  SimpleCov.expects(:add_not_loaded_files).returns('fake_file.rb' => [1])
54
63
  SimpleCov::Result.any_instance.expects(:format!)
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+ require 'aws-sdk'
5
+ require File.expand_path('../../lib/coverband/reporters/web', File.dirname(__FILE__))
6
+ require 'rack/test'
7
+
8
+ ENV['RACK_ENV'] = 'test'
9
+
10
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.0')
11
+ module Coverband
12
+ class S3WebTest < Test::Unit::TestCase
13
+ include Rack::Test::Methods
14
+
15
+ def app
16
+ Coverband::Reporters::Web.new
17
+ end
18
+
19
+ # TODO add tests for all endpoints
20
+ test 'renders index content' do
21
+ get '/'
22
+ assert last_response.ok?
23
+ assert_match 'Coverband Web Admin Index', last_response.body
24
+ end
25
+
26
+ test 'renders show content' do
27
+ Coverband.configuration.s3_bucket = 'coverage-bucket'
28
+ s3 = mock('s3')
29
+ Aws::S3::Client.expects(:new).returns(s3)
30
+ s3.expects(:get_object).with(bucket: 'coverage-bucket', key: 'coverband/index.html').returns mock('response', body: mock('body', read: 'content'))
31
+ get '/show'
32
+ assert last_response.ok?
33
+ assert_equal 'content', last_response.body
34
+ end
35
+ end
36
+ end
37
+ end
@@ -18,7 +18,13 @@ module Coverband
18
18
  File.expects(:read).at_least(0).returns("content ./assets/#{html_version}/")
19
19
  object.expects(:put).with(body: 'content ')
20
20
  Aws::S3::Resource.expects(:new).returns(s3)
21
- S3ReportWriter.new('coverage-bucket').persist!
21
+
22
+ s3_writer_options = {
23
+ region: 'us-west-1',
24
+ access_key_id: '',
25
+ secret_access_key: ''
26
+ }
27
+ S3ReportWriter.new('coverage-bucket', s3_writer_options).persist!
22
28
  end
23
29
  end
24
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coverband
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Mayer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-23 00:00:00.000000000 Z
11
+ date: 2018-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -108,20 +108,6 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: sinatra
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: test-unit
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -207,16 +193,13 @@ files:
207
193
  - README.md
208
194
  - Rakefile
209
195
  - changes.md
196
+ - config.ru
210
197
  - coverband.gemspec
211
- - docs/coverband_details.png
212
- - docs/coverband_index.png
213
- - docs/coverband_install.gif
214
198
  - lib/coverband.rb
215
199
  - lib/coverband/adapters/base.rb
216
200
  - lib/coverband/adapters/file_store.rb
217
201
  - lib/coverband/adapters/memory_cache_store.rb
218
202
  - lib/coverband/adapters/redis_store.rb
219
- - lib/coverband/baseline.rb
220
203
  - lib/coverband/collectors/base.rb
221
204
  - lib/coverband/collectors/coverage.rb
222
205
  - lib/coverband/collectors/trace.rb
@@ -225,8 +208,8 @@ files:
225
208
  - lib/coverband/reporters/base.rb
226
209
  - lib/coverband/reporters/console_report.rb
227
210
  - lib/coverband/reporters/simple_cov_report.rb
211
+ - lib/coverband/reporters/web.rb
228
212
  - lib/coverband/s3_report_writer.rb
229
- - lib/coverband/s3_web.rb
230
213
  - lib/coverband/tasks.rb
231
214
  - lib/coverband/version.rb
232
215
  - test/benchmarks/.gitignore
@@ -237,7 +220,6 @@ files:
237
220
  - test/unit/adapters_file_store_test.rb
238
221
  - test/unit/adapters_memory_cache_store_test.rb
239
222
  - test/unit/adapters_redis_store_test.rb
240
- - test/unit/baseline_test.rb
241
223
  - test/unit/collectors_base_test.rb
242
224
  - test/unit/collectors_coverage_test.rb
243
225
  - test/unit/collectors_trace_test.rb
@@ -247,8 +229,8 @@ files:
247
229
  - test/unit/reports_base_test.rb
248
230
  - test/unit/reports_console_test.rb
249
231
  - test/unit/reports_simple_cov_test.rb
232
+ - test/unit/reports_web_test.rb
250
233
  - test/unit/s3_report_writer_test.rb
251
- - test/unit/s3_web_test.rb
252
234
  homepage: https://github.com/danmayer/coverband
253
235
  licenses:
254
236
  - MIT
@@ -269,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
269
251
  version: '0'
270
252
  requirements: []
271
253
  rubyforge_project:
272
- rubygems_version: 2.7.3
254
+ rubygems_version: 2.5.1
273
255
  signing_key:
274
256
  specification_version: 4
275
257
  summary: Rack middleware to help measure production code usage (LOC runtime usage)
@@ -282,7 +264,6 @@ test_files:
282
264
  - test/unit/adapters_file_store_test.rb
283
265
  - test/unit/adapters_memory_cache_store_test.rb
284
266
  - test/unit/adapters_redis_store_test.rb
285
- - test/unit/baseline_test.rb
286
267
  - test/unit/collectors_base_test.rb
287
268
  - test/unit/collectors_coverage_test.rb
288
269
  - test/unit/collectors_trace_test.rb
@@ -292,5 +273,5 @@ test_files:
292
273
  - test/unit/reports_base_test.rb
293
274
  - test/unit/reports_console_test.rb
294
275
  - test/unit/reports_simple_cov_test.rb
276
+ - test/unit/reports_web_test.rb
295
277
  - test/unit/s3_report_writer_test.rb
296
- - test/unit/s3_web_test.rb
Binary file
Binary file
Binary file
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Coverband
4
- class Baseline
5
- def self.record
6
- require 'coverage'
7
- Coverage.start
8
- yield
9
-
10
- project_directory = File.expand_path(Coverband.configuration.root)
11
- results = Coverage.result
12
- results = results.reject { |key, _val| !key.match(project_directory) || Coverband.configuration.ignore.any? { |pattern| key.match(/#{pattern}/) } }
13
-
14
- Coverband.configuration.store.save_report(convert_coverage_format(results))
15
- end
16
-
17
- def self.parse_baseline(_back_compat = nil)
18
- Coverband.configuration.store.coverage
19
- end
20
-
21
- def self.exclude_files(files)
22
- Coverband.configuration.ignore.each do |ignore|
23
- path = Coverband.configuration.root + "/#{ignore}"
24
- excludes = File.directory?(path) ? Dir.glob("#{path}/**/*") : [path]
25
- files -= excludes
26
- end
27
- files
28
- end
29
-
30
- private
31
-
32
- def self.convert_coverage_format(results)
33
- file_map = {}
34
- results.each_pair do |file, data|
35
- lines_map = {}
36
- data.each_with_index do |hits, index|
37
- lines_map[(index + 1)] = hits unless hits.nil?
38
- end
39
- file_map[file] = lines_map
40
- end
41
- file_map
42
- end
43
- end
44
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'sinatra/base'
4
-
5
- module Coverband
6
- class S3Web < Sinatra::Base
7
- set :public_folder, proc(){ File.expand_path('public', Gem::Specification.find_by_name('simplecov-html').full_gem_path) }
8
-
9
- get '/' do
10
- s3.get_object(bucket: Coverband.configuration.s3_bucket, key: 'coverband/index.html').body.read
11
- end
12
-
13
- private
14
-
15
- def s3
16
- begin
17
- require 'aws-sdk'
18
- rescue StandardError
19
- Coverband.configuration.logger.error "coverband requires 'aws-sdk' in order use S3ReportWriter."
20
- return
21
- end
22
- @s3 ||= Aws::S3::Client.new
23
- end
24
- end
25
- end