metric_fu 4.4.0 → 4.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.md +12 -0
  3. data/Rakefile +0 -1
  4. data/bin/mf-roodi +2 -2
  5. data/checksum/metric_fu-4.4.0.gem.sha512 +1 -1
  6. data/gem_tasks/build.rake +24 -22
  7. data/lib/metric_fu/configuration.rb +0 -10
  8. data/lib/metric_fu/data_structures/line_numbers.rb +2 -0
  9. data/lib/metric_fu/initial_requires.rb +0 -1
  10. data/lib/metric_fu/metric.rb +1 -1
  11. data/lib/metric_fu/metrics/churn/churn_hotspot.rb +10 -11
  12. data/lib/metric_fu/metrics/flay/flay_hotspot.rb +7 -20
  13. data/lib/metric_fu/metrics/flog/flog_hotspot.rb +7 -14
  14. data/lib/metric_fu/metrics/generator.rb +0 -14
  15. data/lib/metric_fu/metrics/graph.rb +50 -15
  16. data/lib/metric_fu/metrics/hotspots/analysis/analyzed_problems.rb +21 -27
  17. data/lib/metric_fu/metrics/hotspots/analysis/analyzer_tables.rb +0 -6
  18. data/lib/metric_fu/metrics/hotspots/analysis/grouping.rb +2 -17
  19. data/lib/metric_fu/metrics/hotspots/analysis/groupings.rb +1 -9
  20. data/lib/metric_fu/metrics/hotspots/analysis/problems.rb +3 -7
  21. data/lib/metric_fu/metrics/hotspots/analysis/ranking.rb +3 -7
  22. data/lib/metric_fu/metrics/hotspots/analysis/rankings.rb +6 -6
  23. data/lib/metric_fu/metrics/hotspots/analysis/record.rb +3 -12
  24. data/lib/metric_fu/metrics/hotspots/analysis/scoring_strategies.rb +9 -14
  25. data/lib/metric_fu/metrics/hotspots/analysis/table.rb +3 -43
  26. data/lib/metric_fu/metrics/hotspots/hotspot.rb +59 -7
  27. data/lib/metric_fu/metrics/hotspots/hotspot_analyzer.rb +1 -36
  28. data/lib/metric_fu/metrics/hotspots/hotspots.rb +0 -4
  29. data/lib/metric_fu/metrics/rails_best_practices/init.rb +0 -1
  30. data/lib/metric_fu/metrics/rcov/rcov_hotspot.rb +6 -13
  31. data/lib/metric_fu/metrics/reek/reek_hotspot.rb +6 -87
  32. data/lib/metric_fu/metrics/roodi/roodi_hotspot.rb +7 -18
  33. data/lib/metric_fu/metrics/saikuro/saikuro.rb +0 -5
  34. data/lib/metric_fu/metrics/saikuro/saikuro_hotspot.rb +7 -14
  35. data/lib/metric_fu/metrics/stats/stats_hotspot.rb +7 -7
  36. data/lib/metric_fu/reporting/templates/awesome/awesome_template.rb +2 -1
  37. data/lib/metric_fu/utility.rb +20 -0
  38. data/lib/metric_fu/version.rb +1 -1
  39. data/metric_fu.gemspec +6 -6
  40. data/spec/metric_fu/configuration_spec.rb +2 -21
  41. data/spec/metric_fu/metrics/flog/flog_grapher_spec.rb +2 -2
  42. data/spec/metric_fu/metrics/generator_spec.rb +0 -14
  43. data/spec/metric_fu/metrics/graph_spec.rb +7 -6
  44. data/spec/metric_fu/metrics/hotspots/analysis/analyzed_problems_spec.rb +113 -0
  45. data/spec/metric_fu/metrics/hotspots/analysis/analyzer_tables_spec.rb +71 -0
  46. data/spec/metric_fu/metrics/hotspots/analysis/ranking_spec.rb +3 -12
  47. data/spec/metric_fu/metrics/hotspots/analysis/rankings_spec.rb +100 -0
  48. data/spec/metric_fu/metrics/hotspots/analysis/table_spec.rb +1 -30
  49. data/spec/metric_fu/metrics/hotspots/hotspot_analyzer_spec.rb +3 -442
  50. data/spec/metric_fu/metrics/rcov/rcov_spec.rb +2 -0
  51. data/spec/metric_fu/metrics/saikuro/saikuro_spec.rb +0 -11
  52. data/spec/resources/yml/hotspots/flog.yml +86 -0
  53. data/spec/resources/yml/hotspots/reek.yml +14 -0
  54. data/spec/resources/yml/hotspots/roodi.yml +13 -0
  55. data/spec/resources/yml/hotspots/saikuro.yml +27 -0
  56. data/spec/resources/yml/hotspots/several_metrics.yml +47 -0
  57. data/spec/resources/yml/hotspots/stats.yml +4 -0
  58. data/spec/resources/yml/hotspots/three_metrics_on_same_file.yml +36 -0
  59. data/spec/support/helper_methods.rb +13 -0
  60. metadata +62 -21
  61. data/lib/metric_fu/data_structures/careful_array.rb +0 -11
  62. data/lib/metric_fu/metrics/hotspots/analysis/code_issue.rb +0 -109
  63. data/lib/metric_fu/parser_ext.rb +0 -15
  64. data/lib/metric_fu/sexp_ext.rb +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 741f0378823b8b42fce3ad9e4bc36b0312988660
4
- data.tar.gz: 66dce50c5876c8dc84d672e5ed5571e6e9854dd5
3
+ metadata.gz: 5b6391c40e351ab9265635b6b35f32662bbe450c
4
+ data.tar.gz: eb534c71875d84de4e477332a365de843ec7dfb3
5
5
  SHA512:
6
- metadata.gz: fc38e9dfd106e6f8c92d9f044a3ee1d9d192d6ae3de367b871efa70bc40bd7c67f877f6bc9628440c05094284eb333a635d96c9626e05f2e79f6be4aacd79b14
7
- data.tar.gz: 1487b7c82f5f8bf932bbd81b1b538fdd0bf03216fd32af2b3c3f294c7d83edd808cae889f827b1c4e0b788667593f2d0f9e159ce149beb7396b1cd29bd270267
6
+ metadata.gz: 7a9d4acd5a6b37a5ce18219ff9e8e363395e7f8c65f0fcaae138f0c6660172eefd49006371df55fd1cad2984e30cd91ccc64aaf6d7d1e170d1c37d2e6d3c9e12
7
+ data.tar.gz: c6dd298de619f6628ae7c5b46026bc7819ff38a9912f1bdd1e13da5e7b70fee82446397b3e6eb08fe602db6e3a7a78f395739874d95e357a6efda95e9eaa5acc
data/HISTORY.md CHANGED
@@ -10,6 +10,18 @@ As such, a _Feature_ would map to either major or minor. A _bug fix_ to a patch.
10
10
  * Fixes
11
11
  * Misc
12
12
 
13
+ ### MetricFu [4.4.1 / 2013-08-29](https://github.com/metricfu/metric_fu/compare/v4.4.0...v4.4.1)
14
+
15
+ * Features
16
+ * Fixes
17
+ * No longer consider an ampty sexp in LineNumbers an error. A file with only comments is empty of code. (Benjamin Fleischer)
18
+ * Prevent encoding errors when using syntax highlighting via coderay (Benjamin Fleischer #120, #131)
19
+ * Misc
20
+ * Update dependencies: cane, flay, flog, reek; switch from metric_fu-roodi to revived roodi (Benjamin Fleischer #130)
21
+ * Update to fully ruby_parser-compatible rails_best_practices (Benjamin Fleischer #133)
22
+ * Hotspots: remove legacy test code, reduce duplication (Benjamin Fleischer, #127, #77)
23
+ * Remove a lot of dead code (Benjamin Fleischer, #77)
24
+
13
25
  ### MetricFu 4.4.0 / 2013-08-15
14
26
 
15
27
  * Features
data/Rakefile CHANGED
@@ -6,7 +6,6 @@ Dir['./gem_tasks/*.rake'].each do |task|
6
6
  import(task)
7
7
  end
8
8
 
9
- # $LOAD_PATH << '.'
10
9
  begin
11
10
  require 'spec/rake/spectask'
12
11
  desc "Run all specs in spec directory"
data/bin/mf-roodi CHANGED
@@ -5,5 +5,5 @@ require 'rubygems'
5
5
  require 'metric_fu_requires'
6
6
 
7
7
  version = MetricFu::MetricVersion.roodi
8
- gem 'metric_fu-roodi', version
9
- load Gem.bin_path('metric_fu-roodi', 'metric_fu-roodi', version)
8
+ gem 'roodi', version
9
+ load Gem.bin_path('roodi', 'roodi', version)
@@ -1 +1 @@
1
- 1f9be27229b5a441bc4e4367d099f6f92641d994246b88f9a396fc8c99d832a00412fe7c9a5dc5078c9beecc8d77d575d9b9ab55b50ab7b0b7583130763369bf
1
+ c01694dc4a374806bd6cfaf5091808d223db1ea07a85d90a9749ed8e603c3abee283a36a6aacde81072b7c0ec2eec64f85d977caa6cd69687a532040a2137bd4
data/gem_tasks/build.rake CHANGED
@@ -2,37 +2,25 @@
2
2
  desc 'override bundler release task'
3
3
  task :release => ['build'] do
4
4
  STDOUT.puts "Running Bundler Release Task Override"
5
+ Rake::Task['checksum'].invoke
5
6
  end
6
7
  require 'bundler/gem_tasks'
7
8
 
8
9
  GEMSPEC = Bundler::GemHelper.gemspec
9
10
 
10
- # bundler-free alternative
11
- # packaging
12
- # https://github.com/YorickPeterse/ruby-lint/blob/master/Rakefile
13
- # require 'rubygems/package_task'
14
- # GEMSPEC = Gem::Specification.load('metric_fu.gemspec')
15
- #
16
- # Gem::PackageTask.new(GEMSPEC) do |pkg|
17
- # pkg.need_tar = false
18
- # pkg.need_zip = false
19
- # end
20
-
21
- # gem signing
22
- # desc 'Builds and signs a new Gem'
23
- # task :build => [:gem] do
24
- # name = "#{GEMSPEC.name}-#{GEMSPEC.version}.gem"
25
- # path = File.join(File.expand_path('../../pkg', __FILE__), name)
26
- #
27
- # sh("gem sign #{path}")
28
- #
29
- # Rake::Task['checksum'].invoke
30
- # end
11
+ desc 'Builds and signs a new Gem'
12
+ task :signed_build => [:build] do
13
+ name = "#{GEMSPEC.name}-#{GEMSPEC.version}.gem"
14
+ path = File.join(File.expand_path('../../pkg', __FILE__), name)
31
15
 
16
+ sh("gem sign #{path}")
17
+
18
+ Rake::Task['checksum'].invoke
19
+ end
32
20
  require 'digest/sha2'
33
21
 
34
22
  desc 'Creates a SHA512 checksum of the current version'
35
- task :checksum => ['build'] do
23
+ task :checksum do
36
24
  checksums = File.expand_path('../../checksum', __FILE__)
37
25
  name = "#{GEMSPEC.name}-#{GEMSPEC.version}.gem"
38
26
  path = File.join(File.expand_path('../../pkg', __FILE__), name)
@@ -44,3 +32,17 @@ task :checksum => ['build'] do
44
32
  handle.write(checksum)
45
33
  end
46
34
  end
35
+
36
+ desc 'Creates a Git tag for the current version'
37
+ task :tag do
38
+ version = MetricFu::VERSION
39
+
40
+ sh %Q{git tag -a -m "Version #{version}" -s #{version}}
41
+ end
42
+
43
+ desc 'Extracts TODO tags and the likes'
44
+ task :todo do
45
+ regex = %w{NOTE: FIXME: TODO: THINK: @todo}.join('|')
46
+
47
+ sh "ack '#{regex}' lib"
48
+ end
@@ -19,16 +19,6 @@ module MetricFu
19
19
  end
20
20
  end
21
21
 
22
- # TODO: Remove this method. It is really a test concern for identifying
23
- # metrics turned off for environmental reasons
24
- def self.mri_only_metrics
25
- if MetricFu.configuration.mri?
26
- []
27
- else
28
- [:cane, :flog, :rails_best_practices]
29
- end
30
- end
31
-
32
22
  # = Configuration
33
23
  #
34
24
  # The Configuration class, as it sounds, provides methods for
@@ -16,6 +16,8 @@ module MetricFu
16
16
  @locations = {}
17
17
  file_sexp = rp.parse(contents)
18
18
  case file_sexp[0]
19
+ when nil
20
+ mf_log "No ruby code found in #{file_path}"
19
21
  when :class
20
22
  process_class(file_sexp)
21
23
  when :module
@@ -8,7 +8,6 @@ require 'redcard'
8
8
  require 'multi_json'
9
9
 
10
10
  MetricFu.configure
11
- MetricFu.lib_require { 'parser_ext' }
12
11
  MetricFu.logging_require { 'mf_debugger' }
13
12
  include MfDebugger
14
13
  MfDebugger::Logger.debug_on = !!(ENV['MF_DEBUG'] =~ /true/i)
@@ -20,7 +20,7 @@ module MetricFu
20
20
  @libraries.each {|library| require(library) }
21
21
  self.activated = true
22
22
  rescue LoadError => e
23
- MetricFu.configuration.mf_log("#{name} metric not activated, #{e.message}")
23
+ mf_log "#{name} metric not activated, #{e.message}"
24
24
  end
25
25
 
26
26
  # @return metric name [Symbol]
@@ -1,5 +1,4 @@
1
- class ChurnHotspot < MetricFu::Hotspot
2
- include MetricFu::HotspotScoringStrategies
1
+ class MetricFu::ChurnHotspot < MetricFu::Hotspot
3
2
 
4
3
  COLUMNS = %w{times_changed}
5
4
 
@@ -11,15 +10,19 @@ class ChurnHotspot < MetricFu::Hotspot
11
10
  :churn
12
11
  end
13
12
 
14
- def map(row)
15
- MetricFu::HotspotScoringStrategies.present(row)
13
+ def map_strategy
14
+ :present
16
15
  end
17
16
 
18
- def reduce(scores)
19
- MetricFu::HotspotScoringStrategies.sum(scores)
17
+ def reduce_strategy
18
+ :sum
20
19
  end
21
20
 
22
- def score(metric_ranking, item)
21
+ def score_strategy
22
+ :calculate_score
23
+ end
24
+
25
+ def calculate_score(metric_ranking, item)
23
26
  flat_churn_score = 0.50
24
27
  metric_ranking.scored?(item) ? flat_churn_score : 0
25
28
  end
@@ -39,8 +42,4 @@ class ChurnHotspot < MetricFu::Hotspot
39
42
  "detected high level of churn (changed #{group[0].times_changed} times)"
40
43
  end
41
44
 
42
- def present_group_details(group)
43
- "detected high level of churn (changed #{group[0].times_changed} times)"
44
- end
45
-
46
45
  end
@@ -1,5 +1,4 @@
1
- class FlayHotspot < MetricFu::Hotspot
2
- include MetricFu::HotspotScoringStrategies
1
+ class MetricFu::FlayHotspot < MetricFu::Hotspot
3
2
 
4
3
  COLUMNS = %w{flay_reason flay_matching_reason}
5
4
 
@@ -11,16 +10,16 @@ class FlayHotspot < MetricFu::Hotspot
11
10
  :flay
12
11
  end
13
12
 
14
- def map(row)
15
- MetricFu::HotspotScoringStrategies.present(row)
13
+ def map_strategy
14
+ :present
16
15
  end
17
16
 
18
- def reduce(scores)
19
- MetricFu::HotspotScoringStrategies.sum(scores)
17
+ def reduce_strategy
18
+ :sum
20
19
  end
21
20
 
22
- def score(metric_ranking, item)
23
- MetricFu::HotspotScoringStrategies.percentile(metric_ranking, item)
21
+ def score_strategy
22
+ :percentile
24
23
  end
25
24
 
26
25
  def generate_records(data, table)
@@ -52,16 +51,4 @@ class FlayHotspot < MetricFu::Hotspot
52
51
  "found #{occurences} code duplications"
53
52
  end
54
53
 
55
- def present_group_details(group)
56
- occurences = group.size
57
- message = "found #{occurences} code duplications<br/>"
58
- group.each do |item|
59
- problem = item.data["flay_reason"]
60
- problem = problem.gsub(/^[0-9]*\)/,'')
61
- problem = problem.gsub(/files\:/,' <br>&nbsp;&nbsp;&nbsp;files:')
62
- message << "* #{problem}<br/>"
63
- end
64
- message
65
- end
66
-
67
54
  end
@@ -1,5 +1,4 @@
1
- class FlogHotspot < MetricFu::Hotspot
2
- include MetricFu::HotspotScoringStrategies
1
+ class MetricFu::FlogHotspot < MetricFu::Hotspot
3
2
 
4
3
  COLUMNS = %w{score}
5
4
 
@@ -11,16 +10,16 @@ class FlogHotspot < MetricFu::Hotspot
11
10
  :flog
12
11
  end
13
12
 
14
- def map(row)
15
- row.score
13
+ def map_strategy
14
+ :score
16
15
  end
17
16
 
18
- def reduce(scores)
19
- MetricFu::HotspotScoringStrategies.average(scores)
17
+ def reduce_strategy
18
+ :average
20
19
  end
21
20
 
22
- def score(metric_ranking, item)
23
- MetricFu::HotspotScoringStrategies.identity(metric_ranking, item)
21
+ def score_strategy
22
+ :identity
24
23
  end
25
24
 
26
25
  def generate_records(data, table)
@@ -46,10 +45,4 @@ class FlogHotspot < MetricFu::Hotspot
46
45
  "#{"average " if occurences > 1}complexity is %.1f" % complexity
47
46
  end
48
47
 
49
- def present_group_details(group)
50
- occurences = group.size
51
- complexity = get_mean(group.column("score"))
52
- "#{"average " if occurences > 1}complexity is %.1f" % complexity
53
- end
54
-
55
48
  end
@@ -54,20 +54,6 @@ module MetricFu
54
54
  @generators << subclass
55
55
  end
56
56
 
57
- # Creates a new generator and returns the output of the
58
- # #generate_result method. This is the typical way to
59
- # generate a new MetricFu result. For more information see
60
- # the #generate_result instance method.
61
- #
62
- # @params options Hash
63
- # A currently unused hash to configure the Generator
64
- #
65
- # @see generate_result
66
- def self.generate_result(options={})
67
- generator = self.new(options)
68
- generator.generate_result
69
- end
70
-
71
57
  # Provides the unqualified class name of an implemented concrete
72
58
  # class, as a string. For example:
73
59
  #
@@ -6,36 +6,71 @@ module MetricFu
6
6
 
7
7
  class Graph
8
8
 
9
- attr_accessor :clazz
9
+ attr_accessor :graphers
10
10
 
11
11
  def initialize
12
- self.clazz = []
12
+ self.graphers = []
13
13
  end
14
14
 
15
15
  def add(graph_type, graph_engine, output_directory = MetricFu::Io::FileSystem.directory('output_directory'))
16
- grapher_name = graph_type.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } + graph_engine.to_s.capitalize + "Grapher"
17
- self.clazz.push MetricFu.const_get(grapher_name).new.tap{|g| g.output_directory = output_directory }
16
+ grapher = grapher_from_type_and_engine(graph_type, graph_engine)
17
+ self.graphers.push grapher.new.tap{|g| g.output_directory = output_directory }
18
+ rescue NameError => e
19
+ mf_log "#{e.message} called in MetricFu::Graph.add with #{graph_type}"
18
20
  end
19
21
 
20
22
 
21
23
  def generate
22
- return if self.clazz.empty?
24
+ return if self.graphers.empty?
23
25
  mf_log "Generating graphs"
24
- Dir[File.join(MetricFu::Io::FileSystem.directory('data_directory'), '*.yml')].sort.each do |metric_file|
25
- mf_log "Generating graphs for #{metric_file}"
26
- date_parts = year_month_day_from_filename(metric_file)
27
- metrics = YAML::load(File.open(metric_file))
28
-
29
- self.clazz.each do |grapher|
30
- grapher.get_metrics(metrics, "#{date_parts[:m]}/#{date_parts[:d]}")
31
- end
26
+ generate_graphs_for_files
27
+ graph!
28
+ rescue NameError => e
29
+ mf_log "#{e.message} called in MetricFu::Graph generate"
30
+ end
31
+
32
+ private
33
+
34
+ def grapher_from_type_and_engine(graph_type, graph_engine)
35
+ grapher_name = graph_type.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } + graph_engine.to_s.capitalize + "Grapher"
36
+ MetricFu.const_get(grapher_name)
37
+ end
38
+ def metric_files
39
+ Dir[File.join(MetricFu::Io::FileSystem.directory('data_directory'), '*.yml')].sort
40
+ end
41
+
42
+ def generate_graphs_for_files
43
+ metric_files.each do |metric_file|
44
+ generate_graphs_for_file(metric_file)
45
+ end
46
+ end
47
+
48
+ def generate_graphs_for_file(metric_file)
49
+ mf_log "Generating graphs for #{metric_file}"
50
+ date_parts = year_month_day_from_filename(metric_file)
51
+ metrics = load_yaml_metric_file(metric_file)
52
+
53
+ build_graph(metrics, "#{date_parts[:m]}/#{date_parts[:d]}")
54
+ rescue NameError => e
55
+ mf_log "#{e.message} called in MetricFu::Graph.generate with #{metric_file}"
56
+ end
57
+
58
+ def load_yaml_metric_file(metric_file)
59
+ YAML.load(File.open(metric_file))
60
+ end
61
+
62
+ def build_graph(metrics, sortable_prefix)
63
+ self.graphers.each do |grapher|
64
+ grapher.get_metrics(metrics, sortable_prefix)
32
65
  end
33
- self.clazz.each do |grapher|
66
+ end
67
+
68
+ def graph!
69
+ self.graphers.each do |grapher|
34
70
  grapher.graph!
35
71
  end
36
72
  end
37
73
 
38
- private
39
74
  def year_month_day_from_filename(path_to_file_with_date)
40
75
  date = path_to_file_with_date.match(/\/(\d+).yml$/)[1]
41
76
  {:y => date[0..3].to_i, :m => date[4..5].to_i, :d => date[6..7].to_i}
@@ -7,41 +7,35 @@ module MetricFu
7
7
  @analyzer_tables = analyzer_tables
8
8
  end
9
9
  def worst_items
10
- num = nil
11
10
  worst_items = {}
12
- worst_items[:files] =
13
- @hotspot_rankings.worst_files(num).inject([]) do |array, worst_file|
14
- array <<
15
- {:location => self.location(:file, worst_file),
16
- :details => self.problems_with(:file, worst_file)}
17
- array
18
- end
19
- worst_items[:classes] = @hotspot_rankings.worst_classes(num).inject([]) do |array, class_name|
20
- location = self.location(:class, class_name)
21
- array <<
22
- {:location => location,
23
- :details => self.problems_with(:class, class_name)}
24
- array
25
- end
26
- worst_items[:methods] = @hotspot_rankings.worst_methods(num).inject([]) do |array, method_name|
27
- location = self.location(:method, method_name)
28
- array <<
29
- {:location => location,
30
- :details => self.problems_with(:method, method_name)}
31
- array
32
- end
11
+ worst_items[:files] = worst(@hotspot_rankings.worst_files, :file)
12
+ worst_items[:classes] = worst(@hotspot_rankings.worst_classes, :class)
13
+ worst_items[:methods] = worst(@hotspot_rankings.worst_methods, :method)
33
14
  worst_items
34
15
  end
16
+
35
17
  private
36
- #todo redo as item,value, options = {}
18
+
19
+ # @param rankings [Array<MetricFu::HotspotRankings>]
20
+ # @param granularity [Symbol] one of :class, :method, :file
21
+ def worst(rankings,granularity)
22
+ rankings.map do |ranked_item_name|
23
+ location = location(granularity, ranked_item_name)
24
+ details = problems_with(granularity, ranked_item_name)
25
+ {:location => location, :details => details}
26
+ end
27
+ end
28
+
29
+ # @todo redo as item,value, options = {}
37
30
  # Note that the other option for 'details' is :detailed (this isn't
38
31
  # at all clear from this method itself
39
- def problems_with(item, value, details = :summary, exclude_details = [])
32
+ def problems_with(item, value)
40
33
  sub_table = get_sub_table(item, value)
41
34
  #grouping = Ruport::Data::Grouping.new(sub_table, :by => 'metric')
42
35
  grouping = get_grouping(sub_table, :by => 'metric')
43
- MetricFu::HotspotProblems.new(grouping, details, exclude_details).problems
36
+ MetricFu::HotspotProblems.new(grouping).problems
44
37
  end
38
+
45
39
  def location(item, value)
46
40
  sub_table = get_sub_table(item, value)
47
41
  assert_sub_table_has_data(item, sub_table, value)
@@ -64,14 +58,14 @@ module MetricFu
64
58
  end
65
59
  end
66
60
 
67
- # just for testing
68
- public :location, :problems_with
69
61
  def get_sub_table(item, value)
70
62
  tables = @analyzer_tables.tables_for(item)
71
63
  tables[value]
72
64
  end
65
+
73
66
  def get_grouping(table, opts)
74
67
  MetricFu::HotspotGroupings.new(table, opts).get_grouping
75
68
  end
69
+
76
70
  end
77
71
  end