metric_fu 4.11.1 → 4.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (206) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +6 -0
  3. data/.rubocop.yml +15 -0
  4. data/.rubocop_todo.yml +69 -0
  5. data/.simplecov +35 -3
  6. data/.travis.yml +6 -10
  7. data/CONTRIBUTORS +12 -11
  8. data/Gemfile +48 -29
  9. data/Guardfile +9 -9
  10. data/HISTORY.md +47 -1
  11. data/README.md +70 -57
  12. data/Rakefile +1 -15
  13. data/appveyor.yml +34 -0
  14. data/certs/bf4.pem +20 -20
  15. data/checksum/metric_fu-4.11.1.gem.sha512 +1 -0
  16. data/checksum/metric_fu-4.11.2.gem.sha512 +1 -0
  17. data/checksum/metric_fu-4.11.3.gem.sha512 +1 -0
  18. data/checksum/metric_fu-4.11.4.gem.sha512 +1 -0
  19. data/checksum/metric_fu-4.12.0.gem.sha512 +1 -0
  20. data/checksum/metric_fu-4.13.0.gem.sha512 +1 -0
  21. data/config/rubocop.yml +269 -0
  22. data/gem_tasks/build.rake +1 -0
  23. data/gem_tasks/rubocop.rake +10 -0
  24. data/gem_tasks/yard.rake +24 -0
  25. data/lib/metric_fu.rb +20 -9
  26. data/lib/metric_fu/calculate.rb +0 -1
  27. data/lib/metric_fu/cli/client.rb +6 -6
  28. data/lib/metric_fu/cli/helper.rb +22 -13
  29. data/lib/metric_fu/cli/parser.rb +14 -18
  30. data/lib/metric_fu/configuration.rb +7 -11
  31. data/lib/metric_fu/constantize.rb +4 -4
  32. data/lib/metric_fu/data_structures/line_numbers.rb +10 -11
  33. data/lib/metric_fu/data_structures/location.rb +12 -14
  34. data/lib/metric_fu/data_structures/sexp_node.rb +31 -13
  35. data/lib/metric_fu/environment.rb +29 -31
  36. data/lib/metric_fu/formatter.rb +4 -6
  37. data/lib/metric_fu/formatter/html.rb +13 -13
  38. data/lib/metric_fu/formatter/syntax.rb +5 -7
  39. data/lib/metric_fu/formatter/yaml.rb +1 -1
  40. data/lib/metric_fu/gem_run.rb +13 -15
  41. data/lib/metric_fu/gem_version.rb +10 -12
  42. data/lib/metric_fu/generator.rb +6 -9
  43. data/lib/metric_fu/io.rb +13 -15
  44. data/lib/metric_fu/loader.rb +17 -18
  45. data/lib/metric_fu/logger.rb +15 -18
  46. data/lib/metric_fu/logging/mf_debugger.rb +4 -4
  47. data/lib/metric_fu/metric.rb +11 -12
  48. data/lib/metric_fu/metrics/cane/generator.rb +10 -9
  49. data/lib/metric_fu/metrics/cane/grapher.rb +5 -7
  50. data/lib/metric_fu/metrics/cane/metric.rb +6 -8
  51. data/lib/metric_fu/metrics/cane/report.html.erb +3 -3
  52. data/lib/metric_fu/metrics/cane/violations.rb +6 -6
  53. data/lib/metric_fu/metrics/churn/generator.rb +2 -6
  54. data/lib/metric_fu/metrics/churn/hotspot.rb +1 -3
  55. data/lib/metric_fu/metrics/churn/metric.rb +5 -7
  56. data/lib/metric_fu/metrics/flay/generator.rb +7 -11
  57. data/lib/metric_fu/metrics/flay/grapher.rb +5 -6
  58. data/lib/metric_fu/metrics/flay/hotspot.rb +5 -7
  59. data/lib/metric_fu/metrics/flay/metric.rb +5 -7
  60. data/lib/metric_fu/metrics/flog/generator.rb +35 -24
  61. data/lib/metric_fu/metrics/flog/grapher.rb +11 -11
  62. data/lib/metric_fu/metrics/flog/hotspot.rb +3 -5
  63. data/lib/metric_fu/metrics/flog/metric.rb +3 -5
  64. data/lib/metric_fu/metrics/hotspots/analysis/analyzed_problems.rb +0 -1
  65. data/lib/metric_fu/metrics/hotspots/analysis/analyzer_tables.rb +19 -18
  66. data/lib/metric_fu/metrics/hotspots/analysis/grouping.rb +0 -2
  67. data/lib/metric_fu/metrics/hotspots/analysis/groupings.rb +1 -3
  68. data/lib/metric_fu/metrics/hotspots/analysis/problems.rb +4 -6
  69. data/lib/metric_fu/metrics/hotspots/analysis/ranked_problem_location.rb +14 -17
  70. data/lib/metric_fu/metrics/hotspots/analysis/ranking.rb +4 -5
  71. data/lib/metric_fu/metrics/hotspots/analysis/rankings.rb +1 -3
  72. data/lib/metric_fu/metrics/hotspots/analysis/record.rb +3 -5
  73. data/lib/metric_fu/metrics/hotspots/analysis/scoring_strategies.rb +0 -2
  74. data/lib/metric_fu/metrics/hotspots/analysis/table.rb +3 -4
  75. data/lib/metric_fu/metrics/hotspots/generator.rb +3 -6
  76. data/lib/metric_fu/metrics/hotspots/hotspot.rb +13 -13
  77. data/lib/metric_fu/metrics/hotspots/hotspot_analyzer.rb +5 -8
  78. data/lib/metric_fu/metrics/hotspots/metric.rb +1 -3
  79. data/lib/metric_fu/metrics/hotspots/report.html.erb +1 -1
  80. data/lib/metric_fu/metrics/rails_best_practices/generator.rb +14 -12
  81. data/lib/metric_fu/metrics/rails_best_practices/grapher.rb +5 -6
  82. data/lib/metric_fu/metrics/rails_best_practices/metric.rb +5 -4
  83. data/lib/metric_fu/metrics/rcov/external_client.rb +1 -3
  84. data/lib/metric_fu/metrics/rcov/generator.rb +13 -15
  85. data/lib/metric_fu/metrics/rcov/grapher.rb +6 -7
  86. data/lib/metric_fu/metrics/rcov/hotspot.rb +5 -7
  87. data/lib/metric_fu/metrics/rcov/metric.rb +5 -7
  88. data/lib/metric_fu/metrics/rcov/rcov_format_coverage.rb +16 -55
  89. data/lib/metric_fu/metrics/rcov/rcov_line.rb +48 -0
  90. data/lib/metric_fu/metrics/rcov/report.html.erb +2 -2
  91. data/lib/metric_fu/metrics/rcov/simplecov_formatter.rb +10 -11
  92. data/lib/metric_fu/metrics/reek/generator.rb +36 -82
  93. data/lib/metric_fu/metrics/reek/grapher.rb +5 -6
  94. data/lib/metric_fu/metrics/reek/hotspot.rb +5 -7
  95. data/lib/metric_fu/metrics/reek/metric.rb +2 -4
  96. data/lib/metric_fu/metrics/roodi/generator.rb +9 -10
  97. data/lib/metric_fu/metrics/roodi/grapher.rb +5 -6
  98. data/lib/metric_fu/metrics/roodi/hotspot.rb +1 -3
  99. data/lib/metric_fu/metrics/roodi/metric.rb +2 -4
  100. data/lib/metric_fu/metrics/saikuro/generator.rb +23 -27
  101. data/lib/metric_fu/metrics/saikuro/hotspot.rb +1 -3
  102. data/lib/metric_fu/metrics/saikuro/metric.rb +7 -8
  103. data/lib/metric_fu/metrics/saikuro/parsing_element.rb +6 -8
  104. data/lib/metric_fu/metrics/saikuro/report.html.erb +1 -1
  105. data/lib/metric_fu/metrics/saikuro/scratch_file.rb +24 -29
  106. data/lib/metric_fu/metrics/stats/generator.rb +9 -12
  107. data/lib/metric_fu/metrics/stats/grapher.rb +8 -9
  108. data/lib/metric_fu/metrics/stats/hotspot.rb +1 -3
  109. data/lib/metric_fu/metrics/stats/metric.rb +3 -5
  110. data/lib/metric_fu/reporter.rb +1 -1
  111. data/lib/metric_fu/reporting/graphs/graph.rb +8 -12
  112. data/lib/metric_fu/reporting/graphs/grapher.rb +7 -9
  113. data/lib/metric_fu/reporting/result.rb +0 -3
  114. data/lib/metric_fu/run.rb +12 -3
  115. data/lib/metric_fu/tasks/metric_fu.rake +8 -8
  116. data/lib/metric_fu/templates/configuration.rb +2 -5
  117. data/lib/metric_fu/templates/metrics_template.rb +45 -32
  118. data/lib/metric_fu/templates/report.rb +5 -8
  119. data/lib/metric_fu/templates/template.rb +20 -24
  120. data/lib/metric_fu/utility.rb +15 -8
  121. data/lib/metric_fu/version.rb +7 -1
  122. data/metric_fu.gemspec +29 -32
  123. data/spec/capture_warnings.rb +29 -22
  124. data/spec/cli/helper_spec.rb +9 -16
  125. data/spec/dummy/lib/bad_encoding.rb +1 -1
  126. data/spec/fixtures/coverage-153.rb +2 -2
  127. data/spec/fixtures/coverage.rb +2 -2
  128. data/spec/metric_fu/calculate_spec.rb +3 -3
  129. data/spec/metric_fu/configuration_spec.rb +71 -83
  130. data/spec/metric_fu/data_structures/line_numbers_spec.rb +3 -5
  131. data/spec/metric_fu/data_structures/location_spec.rb +13 -31
  132. data/spec/metric_fu/formatter/configuration_spec.rb +18 -20
  133. data/spec/metric_fu/formatter/html_spec.rb +21 -28
  134. data/spec/metric_fu/formatter/yaml_spec.rb +9 -17
  135. data/spec/metric_fu/formatter_spec.rb +16 -16
  136. data/spec/metric_fu/gem_version_spec.rb +4 -6
  137. data/spec/metric_fu/generator_spec.rb +33 -43
  138. data/spec/metric_fu/loader_spec.rb +5 -4
  139. data/spec/metric_fu/metric_spec.rb +21 -25
  140. data/spec/metric_fu/metrics/cane/configuration_spec.rb +14 -14
  141. data/spec/metric_fu/metrics/cane/generator_spec.rb +26 -29
  142. data/spec/metric_fu/metrics/churn/configuration_spec.rb +7 -9
  143. data/spec/metric_fu/metrics/churn/generator_spec.rb +6 -11
  144. data/spec/metric_fu/metrics/flay/configuration_spec.rb +7 -9
  145. data/spec/metric_fu/metrics/flay/generator_spec.rb +36 -37
  146. data/spec/metric_fu/metrics/flay/grapher_spec.rb +2 -2
  147. data/spec/metric_fu/metrics/flog/configuration_spec.rb +12 -14
  148. data/spec/metric_fu/metrics/flog/generator_spec.rb +31 -32
  149. data/spec/metric_fu/metrics/flog/grapher_spec.rb +8 -10
  150. data/spec/metric_fu/metrics/hotspots/analysis/analyzed_problems_spec.rb +18 -24
  151. data/spec/metric_fu/metrics/hotspots/analysis/analyzer_tables_spec.rb +12 -17
  152. data/spec/metric_fu/metrics/hotspots/analysis/ranking_spec.rb +2 -6
  153. data/spec/metric_fu/metrics/hotspots/analysis/rankings_spec.rb +5 -14
  154. data/spec/metric_fu/metrics/hotspots/analysis/table_spec.rb +1 -3
  155. data/spec/metric_fu/metrics/hotspots/generator_spec.rb +6 -8
  156. data/spec/metric_fu/metrics/hotspots/hotspot_analyzer_spec.rb +1 -3
  157. data/spec/metric_fu/metrics/hotspots/hotspot_spec.rb +4 -5
  158. data/spec/metric_fu/metrics/rails_best_practices/configuration_spec.rb +25 -17
  159. data/spec/metric_fu/metrics/rails_best_practices/generator_spec.rb +2 -3
  160. data/spec/metric_fu/metrics/rails_best_practices/grapher_spec.rb +3 -3
  161. data/spec/metric_fu/metrics/rcov/configuration_spec.rb +21 -23
  162. data/spec/metric_fu/metrics/rcov/generator_spec.rb +6 -10
  163. data/spec/metric_fu/metrics/rcov/grapher_spec.rb +2 -2
  164. data/spec/metric_fu/metrics/rcov/hotspot_spec.rb +8 -8
  165. data/spec/metric_fu/metrics/rcov/rcov_line_spec.rb +89 -0
  166. data/spec/metric_fu/metrics/rcov/simplecov_formatter_spec.rb +31 -33
  167. data/spec/metric_fu/metrics/reek/configuration_spec.rb +7 -7
  168. data/spec/metric_fu/metrics/reek/generator_spec.rb +131 -111
  169. data/spec/metric_fu/metrics/reek/grapher_spec.rb +4 -4
  170. data/spec/metric_fu/metrics/roodi/configuration_spec.rb +8 -10
  171. data/spec/metric_fu/metrics/roodi/generator_spec.rb +3 -3
  172. data/spec/metric_fu/metrics/roodi/grapher_spec.rb +2 -2
  173. data/spec/metric_fu/metrics/saikuro/configuration_spec.rb +22 -23
  174. data/spec/metric_fu/metrics/saikuro/generator_spec.rb +7 -7
  175. data/spec/metric_fu/metrics/stats/generator_spec.rb +10 -10
  176. data/spec/metric_fu/metrics/stats/grapher_spec.rb +2 -2
  177. data/spec/metric_fu/reporter_spec.rb +8 -9
  178. data/spec/metric_fu/reporting/graphs/graph_spec.rb +1 -4
  179. data/spec/metric_fu/reporting/graphs/grapher_spec.rb +5 -5
  180. data/spec/metric_fu/reporting/result_spec.rb +12 -14
  181. data/spec/metric_fu/run_spec.rb +19 -33
  182. data/spec/metric_fu/templates/configuration_spec.rb +34 -40
  183. data/spec/metric_fu/templates/metrics_template_spec.rb +11 -0
  184. data/spec/metric_fu/templates/report_spec.rb +4 -4
  185. data/spec/metric_fu/templates/template_spec.rb +78 -64
  186. data/spec/metric_fu/utility_spec.rb +3 -3
  187. data/spec/metric_fu_spec.rb +23 -6
  188. data/spec/quality_spec.rb +43 -15
  189. data/spec/shared/configured.rb +9 -11
  190. data/spec/shared/test_coverage.rb +5 -9
  191. data/spec/spec_helper.rb +13 -31
  192. data/spec/{dummy → support}/.metrics +0 -0
  193. data/spec/support/deferred_garbaged_collection.rb +1 -2
  194. data/spec/support/matcher_create_file.rb +6 -4
  195. data/spec/support/matcher_create_files.rb +6 -4
  196. data/spec/support/samples/reek/alfa.rb +1 -0
  197. data/spec/support/suite.rb +3 -3
  198. data/spec/support/test_fixtures.rb +5 -7
  199. data/spec/support/timeout.rb +1 -1
  200. data/spec/support/usage_test.rb +24 -25
  201. data/spec/usage_test_spec.rb +30 -32
  202. metadata +104 -103
  203. checksums.yaml.gz.sig +0 -0
  204. data.tar.gz.sig +0 -0
  205. data/gemfiles/Gemfile.travis +0 -10
  206. metadata.gz.sig +0 -0
@@ -1,4 +1,4 @@
1
- require 'forwardable'
1
+ require "forwardable"
2
2
  module MetricFu
3
3
  class Ranking
4
4
  extend Forwardable
@@ -13,8 +13,8 @@ module MetricFu
13
13
 
14
14
  def percentile(item)
15
15
  index = sorted_items.index(item)
16
- worse_item_count = (length - (index+1))
17
- worse_item_count.to_f/length
16
+ worse_item_count = (length - (index + 1))
17
+ worse_item_count.to_f / length
18
18
  end
19
19
 
20
20
  def_delegator :@items_to_score, :has_key?, :scored?
@@ -23,8 +23,7 @@ module MetricFu
23
23
  private
24
24
 
25
25
  def sorted_items
26
- @sorted_items ||= @items_to_score.sort_by {|item, score| -score}.map {|item, score| item}
26
+ @sorted_items ||= @items_to_score.sort_by { |_item, score| -score }.map { |item, _score| item }
27
27
  end
28
-
29
28
  end
30
29
  end
@@ -1,11 +1,10 @@
1
1
  MetricFu.metrics_require do
2
2
  [
3
- 'hotspots/analysis/ranking'
3
+ "hotspots/analysis/ranking"
4
4
  ]
5
5
  end
6
6
  module MetricFu
7
7
  class HotspotRankings
8
-
9
8
  def initialize(tool_tables)
10
9
  @tool_tables = tool_tables
11
10
  @file_ranking = MetricFu::Ranking.new
@@ -88,6 +87,5 @@ module MetricFu
88
87
  master_ranking[item] += analyzer.score(metric_ranking, item) # scaling? Do we just add in the raw score?
89
88
  end
90
89
  end
91
-
92
90
  end
93
91
  end
@@ -1,15 +1,14 @@
1
1
  module MetricFu
2
2
  class Record
3
-
4
3
  attr_reader :data
5
4
 
6
- def initialize(data, columns)
5
+ def initialize(data, _columns)
7
6
  @data = data
8
7
  end
9
8
 
10
9
  def method_missing(name, *args, &block)
11
10
  key = name.to_s
12
- if key == 'fetch'
11
+ if key == "fetch"
13
12
  @data.send(name, *args, &block)
14
13
  elsif @data.has_key?(key)
15
14
  @data[key]
@@ -19,7 +18,7 @@ module MetricFu
19
18
  end
20
19
 
21
20
  def []=(key, value)
22
- @data[key]=value
21
+ @data[key] = value
23
22
  end
24
23
 
25
24
  def [](key)
@@ -29,6 +28,5 @@ module MetricFu
29
28
  def has_key?(key)
30
29
  @data.has_key?(key)
31
30
  end
32
-
33
31
  end
34
32
  end
@@ -1,6 +1,5 @@
1
1
  module MetricFu
2
2
  module HotspotScoringStrategies
3
-
4
3
  module_function
5
4
 
6
5
  # per project score percentile
@@ -21,6 +20,5 @@ module MetricFu
21
20
  def average(scores)
22
21
  sum(scores).to_f / scores.size.to_f
23
22
  end
24
-
25
23
  end
26
24
  end
@@ -10,7 +10,7 @@ module MetricFu
10
10
  @rows = []
11
11
  @columns = opts.fetch(:column_names)
12
12
 
13
- @make_index = opts.fetch(:make_index) {true}
13
+ @make_index = opts.fetch(:make_index) { true }
14
14
  @metric_index = {}
15
15
  end
16
16
 
@@ -58,11 +58,10 @@ module MetricFu
58
58
  private
59
59
 
60
60
  def updated_key_index(record)
61
- if record.has_key?('metric')
62
- @metric_index[record.metric] ||= MetricFu::Table.new(:column_names => @columns, :make_index => false)
61
+ if record.has_key?("metric")
62
+ @metric_index[record.metric] ||= MetricFu::Table.new(column_names: @columns, make_index: false)
63
63
  @metric_index[record.metric] << record
64
64
  end
65
65
  end
66
-
67
66
  end
68
67
  end
@@ -1,13 +1,11 @@
1
- MetricFu.metrics_require { 'hotspots/hotspot_analyzer' }
1
+ MetricFu.metrics_require { "hotspots/hotspot_analyzer" }
2
2
  module MetricFu
3
-
4
3
  class HotspotsGenerator < Generator
5
-
6
4
  def self.metric
7
5
  :hotspots
8
6
  end
9
7
 
10
- def initialize(options={})
8
+ def initialize(options = {})
11
9
  MetricFu::Metric.enabled_metrics.each do |metric|
12
10
  require_hotspot(metric.name)
13
11
  end
@@ -24,7 +22,7 @@ module MetricFu
24
22
  end
25
23
 
26
24
  def to_h
27
- result = {:hotspots => {}}
25
+ result = { hotspots: {} }
28
26
  @hotspots.each do |granularity, hotspots|
29
27
  result[:hotspots][granularity.to_s] = hotspots.map(&:to_hash)
30
28
  end
@@ -39,5 +37,4 @@ module MetricFu
39
37
  mf_debug "*** No hotspot for #{metric_name}"
40
38
  end
41
39
  end
42
-
43
40
  end
@@ -1,10 +1,10 @@
1
- MetricFu.lib_require { 'errors/analysis_error' }
2
- MetricFu.metrics_require { 'hotspots/analysis/scoring_strategies' }
1
+ MetricFu.lib_require { "errors/analysis_error" }
2
+ MetricFu.metrics_require { "hotspots/analysis/scoring_strategies" }
3
3
 
4
4
  module MetricFu
5
5
  class Hotspot
6
6
  def self.metric
7
- self.name.split('::')[-1].split('Hotspot')[0].downcase.to_sym
7
+ name.split("::")[-1].split("Hotspot")[0].downcase.to_sym
8
8
  end
9
9
  @analyzers = {}
10
10
  def self.analyzers
@@ -31,8 +31,8 @@ module MetricFu
31
31
 
32
32
  def mapping_strategies
33
33
  {
34
- :present => 1,
35
- :absent => 0,
34
+ present: 1,
35
+ absent: 0,
36
36
  }
37
37
  end
38
38
 
@@ -42,9 +42,9 @@ module MetricFu
42
42
 
43
43
  def reduce(scores)
44
44
  {
45
- :average => MetricFu::HotspotScoringStrategies.average(scores),
46
- :sum => MetricFu::HotspotScoringStrategies.sum(scores),
47
- :absent => 0,
45
+ average: MetricFu::HotspotScoringStrategies.average(scores),
46
+ sum: MetricFu::HotspotScoringStrategies.sum(scores),
47
+ absent: 0,
48
48
  }.fetch(reduce_strategy) do
49
49
  fail "#{reduce_strategy} not a known reduce strategy"
50
50
  end
@@ -57,9 +57,9 @@ module MetricFu
57
57
  # @return [Integer]
58
58
  def score(metric_ranking, item)
59
59
  {
60
- :identity => MetricFu::HotspotScoringStrategies.identity(metric_ranking, item),
61
- :percentile => MetricFu::HotspotScoringStrategies.percentile(metric_ranking, item),
62
- :absent => 0,
60
+ identity: MetricFu::HotspotScoringStrategies.identity(metric_ranking, item),
61
+ percentile: MetricFu::HotspotScoringStrategies.percentile(metric_ranking, item),
62
+ absent: 0,
63
63
  }.fetch(score_strategy) { method(score_strategy).call(metric_ranking, item) }
64
64
  end
65
65
 
@@ -71,12 +71,12 @@ module MetricFu
71
71
  # 'metric', etc.
72
72
  # and appends the hash to the table param
73
73
  # Has no return value
74
- def generate_records(data, table)
74
+ def generate_records(_data, _table)
75
75
  not_implemented
76
76
  end
77
77
 
78
78
  # @return [String] description result
79
- def present_group(group)
79
+ def present_group(_group)
80
80
  not_implemented
81
81
  end
82
82
 
@@ -1,16 +1,15 @@
1
- require 'yaml'
1
+ require "yaml"
2
2
  MetricFu.metrics_require do
3
3
  [
4
- 'hotspots/hotspot',
5
- 'hotspots/analysis/analyzer_tables',
6
- 'hotspots/analysis/analyzed_problems',
7
- 'hotspots/analysis/rankings'
4
+ "hotspots/hotspot",
5
+ "hotspots/analysis/analyzer_tables",
6
+ "hotspots/analysis/analyzed_problems",
7
+ "hotspots/analysis/rankings"
8
8
  ]
9
9
  end
10
10
 
11
11
  module MetricFu
12
12
  class HotspotAnalyzer
13
-
14
13
  COMMON_COLUMNS = %w{metric}
15
14
  GRANULARITIES = %w{file_path class_name method_name}
16
15
 
@@ -58,7 +57,5 @@ module MetricFu
58
57
  # TODO does it not need to return something here?
59
58
  analyzed_problems
60
59
  end
61
-
62
-
63
60
  end
64
61
  end
@@ -1,13 +1,12 @@
1
1
  module MetricFu
2
2
  class MetricHotspots < Metric
3
-
4
3
  def name
5
4
  :hotspots
6
5
  end
7
6
 
8
7
  # TODO remove explicit Churn dependency
9
8
  def default_run_options
10
- { :start_date => "1 year ago", :minimum_churn_count => 10}
9
+ { start_date: "1 year ago", minimum_churn_count: 10 }
11
10
  end
12
11
 
13
12
  def has_graph?
@@ -17,6 +16,5 @@ module MetricFu
17
16
  def enable
18
17
  super
19
18
  end
20
-
21
19
  end
22
20
  end
@@ -36,7 +36,7 @@
36
36
  </b>
37
37
  <% unless per_file_data[file].empty? %>
38
38
  <small>&laquo;
39
- <b><a href="<%= file.gsub(%r{/}, '_') %>.html<%= (line.nil? ? '' : "#line#{line}") %>">annotate</a></b>
39
+ <b><a href="<%= html_filename(file) %><%= (line.nil? ? '' : "#line#{line}") %>">annotate</a></b>
40
40
  &raquo;</small>
41
41
  <% end %>
42
42
  <br/><br/>
@@ -1,14 +1,17 @@
1
1
  module MetricFu
2
2
  class RailsBestPracticesGenerator < Generator
3
-
4
3
  def self.metric
5
4
  :rails_best_practices
6
5
  end
7
6
 
7
+ def initialize(options = {})
8
+ super(MetricFu::Utility.stringify_keys(options))
9
+ end
10
+
8
11
  def emit
9
12
  mf_debug "** Rails Best Practices"
10
- path = '.'
11
- analyzer = ::RailsBestPractices::Analyzer.new(path, { 'silent' => true })
13
+ path = "."
14
+ analyzer = ::RailsBestPractices::Analyzer.new(path, options)
12
15
  analyzer.analyze
13
16
  @output = analyzer.errors
14
17
  end
@@ -16,28 +19,27 @@ module MetricFu
16
19
  def analyze
17
20
  @problems = @output.collect do |problem|
18
21
  {
19
- :file => problem.filename,
20
- :line => problem.line_number,
21
- :problem => problem.message,
22
- :url => problem.url
22
+ file: problem.filename,
23
+ line: problem.line_number,
24
+ problem: problem.message,
25
+ url: problem.url
23
26
  }
24
27
  end
25
28
  total = ["Found #{@problems.count} errors."]
26
- @rails_best_practices_results = {:total => total, :problems => @problems}
29
+ @rails_best_practices_results = { total: total, problems: @problems }
27
30
  end
28
31
 
29
32
  def to_h
30
- {:rails_best_practices => @rails_best_practices_results}
33
+ { rails_best_practices: @rails_best_practices_results }
31
34
  end
32
35
 
33
36
  def per_file_info(out)
34
37
  @rails_best_practices_results[:problems].each do |problem|
35
- next if problem[:file] == '' || problem[:problem].nil?
36
-
38
+ next if problem[:file] == "" || problem[:problem].nil?
37
39
 
38
40
  lines = problem[:line].split(/\s*,\s*/)
39
41
  lines.each do |line|
40
- out[problem[:file]][line] << {:type => :rails_best_practices, :description => problem[:problem]}
42
+ out[problem[:file]][line] << { type: :rails_best_practices, description: problem[:problem] }
41
43
  end
42
44
  end
43
45
  end
@@ -1,4 +1,4 @@
1
- MetricFu.reporting_require { 'graphs/grapher' }
1
+ MetricFu.reporting_require { "graphs/grapher" }
2
2
  module MetricFu
3
3
  class RailsBestPracticesGrapher < Grapher
4
4
  attr_accessor :rails_best_practices_count, :labels
@@ -17,23 +17,22 @@ module MetricFu
17
17
  if metrics && metrics[:rails_best_practices]
18
18
  size = (metrics[:rails_best_practices][:problems] || []).size
19
19
  @rails_best_practices_count.push(size)
20
- @labels.update( { @labels.size => date })
20
+ @labels.update(@labels.size => date)
21
21
  end
22
22
  end
23
23
 
24
24
  def title
25
- 'Rails Best Practices: design problems'
25
+ "Rails Best Practices: design problems"
26
26
  end
27
27
 
28
28
  def data
29
29
  [
30
- ['rails_best_practices', @rails_best_practices_count.join(',')]
30
+ ["rails_best_practices", @rails_best_practices_count.join(",")]
31
31
  ]
32
32
  end
33
33
 
34
34
  def output_filename
35
- 'rails_best_practices.js'
35
+ "rails_best_practices.js"
36
36
  end
37
-
38
37
  end
39
38
  end
@@ -1,12 +1,14 @@
1
1
  module MetricFu
2
2
  class MetricRailsBestPractices < Metric
3
-
4
3
  def name
5
4
  :rails_best_practices
6
5
  end
7
6
 
8
7
  def default_run_options
9
- {}
8
+ {
9
+ silent: true,
10
+ exclude: []
11
+ }
10
12
  end
11
13
 
12
14
  def has_graph?
@@ -22,9 +24,8 @@ module MetricFu
22
24
  end
23
25
 
24
26
  def activate
25
- activate_library('rails_best_practices')
27
+ activate_library("rails_best_practices")
26
28
  super
27
29
  end
28
-
29
30
  end
30
31
  end
@@ -1,7 +1,6 @@
1
1
  # Reads and writes external coverage files as BINARY
2
2
  module MetricFu
3
3
  class RCovTestCoverageClient
4
-
5
4
  def initialize(coverage_file)
6
5
  @file_path = Pathname(coverage_file)
7
6
  @file_path.dirname.mkpath
@@ -17,8 +16,7 @@ module MetricFu
17
16
  end
18
17
 
19
18
  def dump(payload)
20
- File.open(@file_path, 'wb') {|file| file.write(payload) }
19
+ File.open(@file_path, "wb") { |file| file.write(payload) }
21
20
  end
22
-
23
21
  end
24
22
  end
@@ -1,13 +1,12 @@
1
- MetricFu.lib_require { 'utility' }
2
- MetricFu.lib_require { 'calculate' }
3
- MetricFu.data_structures_require { 'line_numbers' }
4
- require_relative 'rcov_format_coverage'
5
- require_relative 'external_client'
1
+ MetricFu.lib_require { "utility" }
2
+ MetricFu.lib_require { "calculate" }
3
+ MetricFu.data_structures_require { "line_numbers" }
4
+ require_relative "rcov_format_coverage"
5
+ require_relative "rcov_line"
6
+ require_relative "external_client"
6
7
 
7
8
  module MetricFu
8
-
9
9
  class RcovGenerator < MetricFu::Generator
10
-
11
10
  def self.metric
12
11
  :rcov
13
12
  end
@@ -29,16 +28,16 @@ module MetricFu
29
28
  end
30
29
 
31
30
  def reset_output_location
32
- MetricFu::Utility.rm_rf(metric_directory, :verbose => false)
31
+ MetricFu::Utility.rm_rf(metric_directory, verbose: false)
33
32
  MetricFu::Utility.mkdir_p(metric_directory)
34
33
  end
35
34
 
36
35
  def default_command
37
- require 'rake'
36
+ require "rake"
38
37
  reset_output_location
39
- test_files = FileList[*options[:test_files]].join(' ')
40
- rcov_opts = options[:rcov_opts].join(' ')
41
- %Q(RAILS_ENV=#{options[:environment]} rcov #{test_files} #{rcov_opts} >> #{default_output_file})
38
+ test_files = FileList[*options[:test_files]].join(" ")
39
+ rcov_opts = options[:rcov_opts].join(" ")
40
+ %(RAILS_ENV=#{options[:environment]} rcov #{test_files} #{rcov_opts} >> #{default_output_file})
42
41
  end
43
42
 
44
43
  def analyze
@@ -49,7 +48,7 @@ module MetricFu
49
48
 
50
49
  def to_h
51
50
  {
52
- :rcov => @rcov
51
+ rcov: @rcov
53
52
  }
54
53
  end
55
54
 
@@ -70,8 +69,7 @@ module MetricFu
70
69
 
71
70
  # Only used if run_rcov? is true
72
71
  def default_output_file
73
- output_file || File.join(metric_directory, 'rcov.txt')
72
+ output_file || File.join(metric_directory, "rcov.txt")
74
73
  end
75
-
76
74
  end
77
75
  end