@@ -6,11 +6,13 @@ module SimpleCovJSONFormatter
66 class ResultHashFormatter
77 def initialize ( result )
88 @result = result
9+ @parent_path = "#{ Dir . pwd } /"
910 end
1011
1112 def format
1213 format_files
1314 format_groups
15+ format_total
1416
1517 formatted_result
1618 end
@@ -19,34 +21,65 @@ def format
1921
2022 def format_files
2123 @result . files . each do |source_file |
22- formatted_result [ :coverage ] [ source_file . filename ] =
23- format_source_file ( source_file )
24+ formatted_file = format_source_file ( source_file )
25+
26+ formatted_result [ :coverage ] [ source_file . filename ] = formatted_file
27+ minimum_coverage_check_for_file! ( source_file , formatted_file )
2428 end
2529 end
2630
2731 def format_groups
2832 @result . groups . each do |name , file_list |
2933 formatted_result [ :groups ] [ name ] = {
3034 lines : {
31- covered_percent : file_list . covered_percent
35+ covered_percent : file_list . covered_percent ,
36+ covered_lines : file_list . covered_lines ,
37+ missed_lines : file_list . missed_lines ,
38+ lines_of_code : file_list . lines_of_code
3239 }
3340 }
3441 end
3542 end
3643
44+ def format_total
45+ formatted_result [ :total ] = {
46+ covered_percent : @result . covered_percent ,
47+ covered_lines : @result . covered_lines ,
48+ missed_lines : @result . missed_lines ,
49+ lines_of_code : @result . total_lines
50+ }
51+ end
52+
3753 def formatted_result
3854 @formatted_result ||= {
3955 meta : {
40- simplecov_version : SimpleCov ::VERSION
56+ simplecov_version : SimpleCov ::VERSION , config : config
4157 } ,
4258 coverage : { } ,
43- groups : { }
59+ groups : { } ,
60+ errors : { less_than_minimum_coverage : { } } ,
61+ total : { }
4462 }
4563 end
4664
4765 def format_source_file ( source_file )
4866 source_file_formatter = SourceFileFormatter . new ( source_file )
4967 source_file_formatter . format
5068 end
69+
70+ def config
71+ @config ||= {
72+ minimum_coverage : SimpleCov . minimum_coverage [ :line ] ,
73+ minimum_coverage_by_file : SimpleCov . minimum_coverage_by_file [ :line ]
74+ }
75+ end
76+
77+ def minimum_coverage_check_for_file! ( source_file , formatted_file )
78+ return nil unless config [ :minimum_coverage_by_file ]
79+ return nil unless formatted_file [ :percent ] < config [ :minimum_coverage_by_file ]
80+
81+ file_name = source_file . filename . delete_prefix ( @parent_path )
82+ formatted_result [ :errors ] [ :less_than_minimum_coverage ] [ file_name ] = formatted_file [ :percent ]
83+ end
5184 end
5285end
0 commit comments