rubycritic 0.0.5 → 0.0.16

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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -0
  3. data/README.md +72 -11
  4. data/bin/rubycritic +2 -0
  5. data/lib/rubycritic/adapters/complexity/flog.rb +22 -0
  6. data/lib/rubycritic/adapters/smell/flay.rb +68 -0
  7. data/lib/rubycritic/adapters/smell/flog.rb +62 -0
  8. data/lib/rubycritic/adapters/smell/reek.rb +44 -0
  9. data/lib/rubycritic/analysers/churn.rb +19 -0
  10. data/lib/rubycritic/analysers/config.reek +8 -0
  11. data/lib/rubycritic/analysers/flay.rb +15 -0
  12. data/lib/rubycritic/analysers/flog.rb +1 -2
  13. data/lib/rubycritic/analysers/stats.rb +31 -0
  14. data/lib/rubycritic/analysers_runner.rb +15 -14
  15. data/lib/rubycritic/cli.rb +35 -14
  16. data/lib/rubycritic/configuration.rb +24 -0
  17. data/lib/rubycritic/core/analysed_file.rb +50 -0
  18. data/lib/rubycritic/{location.rb → core/location.rb} +6 -2
  19. data/lib/rubycritic/core/rating.rb +22 -0
  20. data/lib/rubycritic/{smell.rb → core/smell.rb} +5 -12
  21. data/lib/rubycritic/files_initializer.rb +15 -0
  22. data/lib/rubycritic/orchestrator.rb +23 -0
  23. data/lib/rubycritic/report_generators/assets/javascripts/application.js +87 -8
  24. data/lib/rubycritic/report_generators/assets/javascripts/highcharts.src-4.0.1.js +17672 -0
  25. data/lib/rubycritic/report_generators/assets/javascripts/jquery.floatThead-v1.2.7.js +754 -0
  26. data/lib/rubycritic/report_generators/assets/javascripts/jquery.scrollTo-1.4.11.js +186 -0
  27. data/lib/rubycritic/report_generators/assets/javascripts/jquery.tablesorter-2.0.js +1031 -0
  28. data/lib/rubycritic/report_generators/assets/javascripts/jquery.timeago-v1.4.1.js +214 -0
  29. data/lib/rubycritic/report_generators/assets/stylesheets/application.css +204 -1
  30. data/lib/rubycritic/report_generators/assets/stylesheets/prettify.custom_theme.css +1 -4
  31. data/lib/rubycritic/report_generators/base.rb +49 -0
  32. data/lib/rubycritic/report_generators/code_file.rb +38 -0
  33. data/lib/rubycritic/report_generators/code_index.rb +24 -0
  34. data/lib/rubycritic/report_generators/current_code_file.rb +17 -0
  35. data/lib/rubycritic/report_generators/line.rb +31 -0
  36. data/lib/rubycritic/report_generators/overview.rb +25 -0
  37. data/lib/rubycritic/report_generators/smells_index.rb +24 -0
  38. data/lib/rubycritic/report_generators/templates/code_file.html.erb +36 -0
  39. data/lib/rubycritic/report_generators/templates/code_index.html.erb +26 -0
  40. data/lib/rubycritic/report_generators/templates/layouts/application.html.erb +27 -16
  41. data/lib/rubycritic/report_generators/templates/overview.html.erb +5 -0
  42. data/lib/rubycritic/report_generators/templates/smells_index.html.erb +20 -0
  43. data/lib/rubycritic/report_generators/view_helpers.rb +28 -9
  44. data/lib/rubycritic/reporters/base.rb +24 -0
  45. data/lib/rubycritic/reporters/main.rb +52 -0
  46. data/lib/rubycritic/reporters/mini.rb +30 -0
  47. data/lib/rubycritic/revision_comparator.rb +21 -28
  48. data/lib/rubycritic/serializer.rb +32 -0
  49. data/lib/rubycritic/smells_status_setter.rb +7 -16
  50. data/lib/rubycritic/source_control_systems/base.rb +60 -0
  51. data/lib/rubycritic/source_control_systems/double.rb +19 -0
  52. data/lib/rubycritic/source_control_systems/git.rb +47 -37
  53. data/lib/rubycritic/source_locator.rb +8 -12
  54. data/lib/rubycritic/turbulence.rb +17 -0
  55. data/lib/rubycritic/version.rb +1 -1
  56. data/lib/rubycritic.rb +2 -27
  57. data/rubycritic.gemspec +3 -0
  58. data/test/lib/rubycritic/adapters/complexity/flog_test.rb +18 -0
  59. data/test/lib/rubycritic/adapters/smell/flay_test.rb +34 -0
  60. data/test/lib/rubycritic/adapters/smell/flog_test.rb +26 -0
  61. data/test/lib/rubycritic/adapters/smell/reek_test.rb +35 -0
  62. data/test/lib/rubycritic/analysers/churn_test.rb +38 -0
  63. data/test/lib/rubycritic/configuration_test.rb +17 -0
  64. data/test/lib/rubycritic/core/analysed_file_test.rb +71 -0
  65. data/test/lib/rubycritic/{location_test.rb → core/location_test.rb} +8 -4
  66. data/test/lib/rubycritic/core/smell_test.rb +73 -0
  67. data/test/lib/rubycritic/{smells_array_test.rb → core/smells_array_test.rb} +1 -1
  68. data/test/lib/rubycritic/smells_status_setter_test.rb +5 -5
  69. data/test/lib/rubycritic/source_control_systems/source_control_system_test.rb +5 -11
  70. data/test/lib/rubycritic/source_locator_test.rb +26 -17
  71. data/test/lib/rubycritic/turbulence_test.rb +17 -0
  72. data/test/lib/rubycritic/version_test.rb +1 -0
  73. data/test/samples/flay/smelly.rb +17 -0
  74. data/test/samples/flog/complex.rb +11 -0
  75. data/test/samples/flog/smelly.rb +7 -2
  76. data/test/samples/reek/not_smelly.rb +31 -3
  77. data/test/test_helper.rb +1 -0
  78. metadata +97 -32
  79. data/SPEC.md +0 -58
  80. data/lib/rubycritic/report_generators/base_generator.rb +0 -42
  81. data/lib/rubycritic/report_generators/file_generator.rb +0 -42
  82. data/lib/rubycritic/report_generators/index_generator.rb +0 -28
  83. data/lib/rubycritic/report_generators/line_generator.rb +0 -27
  84. data/lib/rubycritic/report_generators/reporter.rb +0 -45
  85. data/lib/rubycritic/report_generators/templates/file.html.erb +0 -3
  86. data/lib/rubycritic/report_generators/templates/index.html.erb +0 -14
  87. data/lib/rubycritic/smell_adapters/flog.rb +0 -41
  88. data/lib/rubycritic/smell_adapters/reek.rb +0 -35
  89. data/lib/rubycritic/smells_aggregator.rb +0 -29
  90. data/lib/rubycritic/smelly_pathnames_serializer.rb +0 -34
  91. data/lib/rubycritic/source_control_systems/source_control_system.rb +0 -42
  92. data/test/lib/rubycritic/metric_adapters/flog_adapter_test.rb +0 -25
  93. data/test/lib/rubycritic/metric_adapters/reek_adapter_test.rb +0 -34
  94. data/test/lib/rubycritic/smell_test.rb +0 -71
  95. data/test/lib/rubycritic/smells_aggregator_test.rb +0 -47
  96. /data/lib/rubycritic/report_generators/assets/javascripts/{prettify.js → prettify-4-Mar-2013.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  require "virtus"
2
- require "rubycritic/location"
2
+ require "rubycritic/core/location"
3
3
 
4
4
  module Rubycritic
5
5
 
@@ -7,17 +7,14 @@ module Rubycritic
7
7
  include Virtus.model
8
8
 
9
9
  attribute :context
10
+ attribute :cost
10
11
  attribute :locations
11
12
  attribute :message
12
13
  attribute :score
13
- attribute :type
14
14
  attribute :status
15
+ attribute :type
15
16
 
16
- def pathnames
17
- @pathnames ||= locations.map(&:pathname).uniq
18
- end
19
-
20
- def located_in?(other_location)
17
+ def at_location?(other_location)
21
18
  locations.any? { |location| location == other_location }
22
19
  end
23
20
 
@@ -26,14 +23,10 @@ module Rubycritic
26
23
  end
27
24
 
28
25
  def ==(other)
29
- self.class == other.class && state == other.state
26
+ state == other.state
30
27
  end
31
28
  alias_method :eql?, :==
32
29
 
33
- def <=>(other)
34
- locations <=> other.locations
35
- end
36
-
37
30
  def to_s
38
31
  "(#{type}) #{context} #{message}"
39
32
  end
@@ -0,0 +1,15 @@
1
+ require "rubycritic/source_locator"
2
+ require "rubycritic/core/analysed_file"
3
+
4
+ module Rubycritic
5
+
6
+ module FilesInitializer
7
+ def self.init(paths)
8
+ source = SourceLocator.new(paths)
9
+ source.pathnames.map do |pathname|
10
+ AnalysedFile.new(:pathname => pathname, :smells => [], :duplication => 0)
11
+ end
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,23 @@
1
+ require "rubycritic/source_control_systems/base"
2
+ require "rubycritic/files_initializer"
3
+ require "rubycritic/analysers_runner"
4
+ require "rubycritic/revision_comparator"
5
+
6
+ module Rubycritic
7
+
8
+ class Orchestrator
9
+ def initialize
10
+ @source_control_system = SourceControlSystem::Base.create
11
+ end
12
+
13
+ def critique(paths)
14
+ analysed_files = FilesInitializer.init(paths)
15
+ AnalysersRunner.new(analysed_files, @source_control_system).run
16
+ if @source_control_system.has_revision?
17
+ RevisionComparator.new(analysed_files, @source_control_system).set_statuses
18
+ end
19
+ analysed_files
20
+ end
21
+ end
22
+
23
+ end
@@ -1,17 +1,39 @@
1
1
  prettyPrint();
2
2
 
3
- highlightLineFromFragment();
3
+ emphasizeLineFromFragment();
4
4
 
5
- function highlightLineFromFragment() {
6
- highlightLine(window.location.hash)
5
+ function emphasizeLineFromFragment() {
6
+ emphasizeLine(window.location.hash)
7
7
  }
8
8
 
9
- $(".js-file-code").on("click", ".js-smell-location", highlightSmellyLine);
9
+ $(".js-file-code").on("click", ".js-smell-location", emphasizeLineFromHref);
10
10
 
11
- function highlightSmellyLine() {
12
- var lineId = "#" + this.href.split("#")[1];
13
- $(".js-file-code li").removeClass("highlight");
14
- highlightLine(lineId);
11
+ function emphasizeLineFromHref(event) {
12
+ if (hrefTargetIsOnCurrentPage(this) && !event.ctrlKey) {
13
+ $(".js-file-code li").removeClass("highlight");
14
+ var lineId = "#" + this.href.split("#")[1];
15
+ emphasizeLine(lineId);
16
+ return false;
17
+ }
18
+ }
19
+
20
+ function hrefTargetIsOnCurrentPage(aTag) {
21
+ return (window.location.pathname === aTag.pathname);
22
+ }
23
+
24
+ function emphasizeLine(lineReference) {
25
+ scrollToTarget(lineReference);
26
+ highlightLine(lineReference);
27
+ }
28
+
29
+ function scrollToTarget(lineReference) {
30
+ $.scrollTo(lineReference, {
31
+ duration: 300,
32
+ easing: "linear",
33
+ onAfter: function() {
34
+ window.location.hash = lineReference;
35
+ }
36
+ });
15
37
  }
16
38
 
17
39
  function highlightLine(lineReference) {
@@ -23,3 +45,60 @@ $("#js-toggle-smells").on("click", toggleSmells);
23
45
  function toggleSmells() {
24
46
  $(".js-smells").toggle();
25
47
  }
48
+
49
+ $("#js-index-table")
50
+ .tablesorter({ // Sort the table
51
+ sortList: [[0,0]] // on the first column, in ascending order
52
+ })
53
+ .floatThead(); // Make table headers stick to the top when scrolling
54
+
55
+ $(".js-timeago").timeago();
56
+
57
+ $("#js-chart-container").highcharts({
58
+ chart: {
59
+ type: "scatter",
60
+ zoomType: "xy"
61
+ },
62
+ title: {
63
+ text: "Churn vs Complexity"
64
+ },
65
+ xAxis: {
66
+ title: {
67
+ enabled: true,
68
+ text: "Churn"
69
+ },
70
+ floor: 0,
71
+ startOnTick: true,
72
+ endOnTick: true
73
+ },
74
+ yAxis: {
75
+ title: {
76
+ text: "Complexity"
77
+ },
78
+ floor: 0,
79
+ startOnTick: true,
80
+ endOnTick: true
81
+ },
82
+ plotOptions: {
83
+ scatter: {
84
+ marker: {
85
+ radius: 5,
86
+ states: {
87
+ hover: {
88
+ enabled: true,
89
+ lineColor: "rgb(100,100,100)"
90
+ }
91
+ }
92
+ },
93
+ tooltip: {
94
+ headerFormat: "<b>{point.key}</b><br>",
95
+ pointFormat: "Committed {point.x} times, with Flog score of {point.y}"
96
+ }
97
+ }
98
+ },
99
+ series: [{
100
+ showInLegend: false,
101
+ color: "steelblue",
102
+ data: turbulenceData
103
+ }]
104
+ });