rubycritic 1.3.0 → 1.4.0

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -1
  3. data/CONTRIBUTING.md +2 -1
  4. data/README.md +1 -0
  5. data/lib/rubycritic/cli/options.rb +17 -1
  6. data/lib/rubycritic/commands/ci.rb +2 -3
  7. data/lib/rubycritic/commands/default.rb +2 -3
  8. data/lib/rubycritic/configuration.rb +4 -1
  9. data/lib/rubycritic/core/analysed_module.rb +19 -0
  10. data/lib/rubycritic/core/location.rb +11 -0
  11. data/lib/rubycritic/core/rating.rb +8 -0
  12. data/lib/rubycritic/core/smell.rb +16 -0
  13. data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/application.js +0 -0
  14. data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/highcharts.src-4.0.1.js +0 -0
  15. data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/jquery-2.1.0.js +0 -0
  16. data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/jquery.floatThead-v1.2.7.js +0 -0
  17. data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/jquery.scrollTo-1.4.11.js +0 -0
  18. data/lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.js +2089 -0
  19. data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/jquery.timeago-v1.4.1.js +0 -0
  20. data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/prettify-4-Mar-2013.js +0 -0
  21. data/lib/rubycritic/{report_generators → generators/html}/assets/stylesheets/application.css +87 -25
  22. data/lib/rubycritic/{report_generators → generators/html}/assets/stylesheets/prettify.custom_theme.css +0 -0
  23. data/lib/rubycritic/generators/html/base.rb +52 -0
  24. data/lib/rubycritic/generators/html/code_file.rb +40 -0
  25. data/lib/rubycritic/generators/html/code_index.rb +26 -0
  26. data/lib/rubycritic/generators/html/line.rb +37 -0
  27. data/lib/rubycritic/generators/html/overview.rb +27 -0
  28. data/lib/rubycritic/generators/html/smells_index.rb +38 -0
  29. data/lib/rubycritic/{report_generators → generators/html}/templates/code_file.html.erb +4 -2
  30. data/lib/rubycritic/{report_generators → generators/html}/templates/code_index.html.erb +8 -4
  31. data/lib/rubycritic/{report_generators → generators/html}/templates/layouts/application.html.erb +12 -8
  32. data/lib/rubycritic/{report_generators → generators/html}/templates/line.html.erb +0 -0
  33. data/lib/rubycritic/{report_generators → generators/html}/templates/overview.html.erb +0 -0
  34. data/lib/rubycritic/{report_generators → generators/html}/templates/smells_index.html.erb +4 -4
  35. data/lib/rubycritic/{report_generators → generators/html}/templates/smelly_line.html.erb +0 -0
  36. data/lib/rubycritic/{report_generators → generators/html}/turbulence.rb +0 -0
  37. data/lib/rubycritic/{report_generators → generators/html}/view_helpers.rb +0 -0
  38. data/lib/rubycritic/generators/html_report.rb +66 -0
  39. data/lib/rubycritic/generators/json/simple.rb +30 -0
  40. data/lib/rubycritic/generators/json_report.rb +23 -0
  41. data/lib/rubycritic/reporter.rb +20 -0
  42. data/lib/rubycritic/version.rb +1 -1
  43. data/test/lib/rubycritic/analysers/churn_test.rb +12 -13
  44. data/test/lib/rubycritic/analysers/complexity_test.rb +9 -5
  45. data/test/lib/rubycritic/analysers/smells/flay_test.rb +27 -20
  46. data/test/lib/rubycritic/analysers/smells/flog_test.rb +17 -15
  47. data/test/lib/rubycritic/analysers/smells/reek_test.rb +2 -2
  48. data/test/lib/rubycritic/report_generators/turbulence_test.rb +1 -1
  49. data/test/lib/rubycritic/report_generators/view_helpers_test.rb +1 -1
  50. data/test/lib/rubycritic/source_control_systems/base_test.rb +2 -2
  51. data/test/lib/rubycritic/source_locator_test.rb +1 -1
  52. data/test/samples/flay/smelly.rb +0 -9
  53. data/test/samples/flay/smelly2.rb +8 -0
  54. metadata +33 -31
  55. data/lib/rubycritic/report_generators/assets/javascripts/jquery.tablesorter-2.0.js +0 -1031
  56. data/lib/rubycritic/report_generators/base.rb +0 -50
  57. data/lib/rubycritic/report_generators/code_file.rb +0 -38
  58. data/lib/rubycritic/report_generators/code_index.rb +0 -24
  59. data/lib/rubycritic/report_generators/current_code_file.rb +0 -17
  60. data/lib/rubycritic/report_generators/line.rb +0 -31
  61. data/lib/rubycritic/report_generators/overview.rb +0 -25
  62. data/lib/rubycritic/report_generators/smells_index.rb +0 -36
  63. data/lib/rubycritic/reporters/base.rb +0 -24
  64. data/lib/rubycritic/reporters/main.rb +0 -51
  65. data/lib/rubycritic/reporters/mini.rb +0 -30
@@ -1,50 +0,0 @@
1
- require "erb"
2
- require "pathname"
3
- require "rubycritic/report_generators/view_helpers"
4
-
5
- module Rubycritic
6
- module Generator
7
-
8
- class Base
9
- def self.erb_template(template_path)
10
- ERB.new(File.read(File.join(TEMPLATES_DIR, template_path)))
11
- end
12
-
13
- TEMPLATES_DIR = File.expand_path("../templates", __FILE__)
14
- LAYOUT_TEMPLATE = erb_template(File.join("layouts", "application.html.erb"))
15
-
16
- include ViewHelpers
17
-
18
- def file_href
19
- "file://#{file_pathname}"
20
- end
21
-
22
- def file_pathname
23
- File.join(file_directory, file_name)
24
- end
25
-
26
- def file_directory
27
- @file_directory ||= root_directory
28
- end
29
-
30
- def file_name
31
- raise NotImplementedError.new("The #{self.class} class must implement the #{__method__} method.")
32
- end
33
-
34
- def render
35
- raise NotImplementedError.new("The #{self.class} class must implement the #{__method__} method.")
36
- end
37
-
38
- private
39
-
40
- def root_directory
41
- @root_directory ||= Pathname.new(Config.root)
42
- end
43
-
44
- def get_binding
45
- binding
46
- end
47
- end
48
-
49
- end
50
- end
@@ -1,38 +0,0 @@
1
- require "rubycritic/report_generators/base"
2
- require "rubycritic/report_generators/line"
3
-
4
- module Rubycritic
5
- module Generator
6
-
7
- class CodeFile < Base
8
- LINE_NUMBER_OFFSET = 1
9
- TEMPLATE = erb_template("code_file.html.erb")
10
-
11
- def initialize(analysed_module)
12
- @analysed_module = analysed_module
13
- @pathname = @analysed_module.pathname
14
- end
15
-
16
- def file_directory
17
- @file_directory ||= root_directory + @pathname.dirname
18
- end
19
-
20
- def file_name
21
- @pathname.basename.sub_ext(".html")
22
- end
23
-
24
- def render
25
- file_code = ""
26
- File.readlines(@pathname).each.with_index(LINE_NUMBER_OFFSET) do |line_text, line_number|
27
- location = Location.new(@pathname, line_number)
28
- line_smells = @analysed_module.smells_at_location(location)
29
- file_code << Line.new(file_directory, line_text, line_smells).render
30
- end
31
-
32
- file_body = TEMPLATE.result(get_binding { file_code })
33
- LAYOUT_TEMPLATE.result(get_binding { file_body })
34
- end
35
- end
36
-
37
- end
38
- end
@@ -1,24 +0,0 @@
1
- require "rubycritic/report_generators/base"
2
-
3
- module Rubycritic
4
- module Generator
5
-
6
- class CodeIndex < Base
7
- TEMPLATE = erb_template("code_index.html.erb")
8
-
9
- def initialize(analysed_modules)
10
- @analysed_modules = analysed_modules
11
- end
12
-
13
- def file_name
14
- "code_index.html"
15
- end
16
-
17
- def render
18
- index_body = TEMPLATE.result(get_binding)
19
- LAYOUT_TEMPLATE.result(get_binding { index_body })
20
- end
21
- end
22
-
23
- end
24
- end
@@ -1,17 +0,0 @@
1
- require "rubycritic/report_generators/code_file"
2
-
3
- module Rubycritic
4
- module Generator
5
-
6
- class CurrentCodeFile < CodeFile
7
- def file_directory
8
- @file_directory ||= root_directory
9
- end
10
-
11
- def file_name
12
- "current_file.html"
13
- end
14
- end
15
-
16
- end
17
- end
@@ -1,31 +0,0 @@
1
- require "rubycritic/report_generators/base"
2
- require "cgi"
3
-
4
- module Rubycritic
5
- module Generator
6
-
7
- class Line < Base
8
- NORMAL_TEMPLATE = erb_template("line.html.erb")
9
- SMELLY_TEMPLATE = erb_template("smelly_line.html.erb")
10
-
11
- attr_reader :file_directory
12
-
13
- def initialize(file_directory, text, smells)
14
- @file_directory = file_directory
15
- @text = CGI.escapeHTML(text.chomp)
16
- @smells = smells
17
- @template =
18
- if @smells.empty?
19
- NORMAL_TEMPLATE
20
- else
21
- SMELLY_TEMPLATE
22
- end
23
- end
24
-
25
- def render
26
- @template.result(binding).delete("\n") + "\n"
27
- end
28
- end
29
-
30
- end
31
- end
@@ -1,25 +0,0 @@
1
- require "rubycritic/report_generators/base"
2
- require "rubycritic/report_generators/turbulence"
3
-
4
- module Rubycritic
5
- module Generator
6
-
7
- class Overview < Base
8
- TEMPLATE = erb_template("overview.html.erb")
9
-
10
- def initialize(analysed_modules)
11
- @turbulence_data = Turbulence.data(analysed_modules)
12
- end
13
-
14
- def file_name
15
- "overview.html"
16
- end
17
-
18
- def render
19
- index_body = TEMPLATE.result(get_binding)
20
- LAYOUT_TEMPLATE.result(get_binding { index_body })
21
- end
22
- end
23
-
24
- end
25
- end
@@ -1,36 +0,0 @@
1
- require "rubycritic/report_generators/base"
2
-
3
- module Rubycritic
4
- module Generator
5
-
6
- class SmellsIndex < Base
7
- TEMPLATE = erb_template("smells_index.html.erb")
8
-
9
- def initialize(analysed_modules)
10
- @smells = analysed_modules.flat_map(&:smells).uniq
11
- @analysed_module_names = analysed_module_names(analysed_modules)
12
- @show_status = (Config.mode == :default)
13
- end
14
-
15
- def file_name
16
- "smells_index.html"
17
- end
18
-
19
- def render
20
- index_body = TEMPLATE.result(get_binding)
21
- LAYOUT_TEMPLATE.result(get_binding { index_body })
22
- end
23
-
24
- private
25
-
26
- def analysed_module_names(analysed_modules)
27
- names = {}
28
- analysed_modules.each do |analysed_module|
29
- names[analysed_module.pathname] = analysed_module.name
30
- end
31
- names
32
- end
33
- end
34
-
35
- end
36
- end
@@ -1,24 +0,0 @@
1
- require "fileutils"
2
-
3
- module Rubycritic
4
- module Reporter
5
-
6
- class Base
7
- ASSETS_DIR = File.expand_path("../../report_generators/assets", __FILE__)
8
-
9
- def create_directories_and_files(generators)
10
- Array(generators).each do |generator|
11
- FileUtils.mkdir_p(generator.file_directory)
12
- File.open(generator.file_pathname, "w+") do |file|
13
- file.write(generator.render)
14
- end
15
- end
16
- end
17
-
18
- def copy_assets_to_report_directory
19
- FileUtils.cp_r(ASSETS_DIR, Config.root)
20
- end
21
- end
22
-
23
- end
24
- end
@@ -1,51 +0,0 @@
1
- require "rubycritic/reporters/base"
2
- require "rubycritic/report_generators/overview"
3
- require "rubycritic/report_generators/smells_index"
4
- require "rubycritic/report_generators/code_index"
5
- require "rubycritic/report_generators/code_file"
6
-
7
- module Rubycritic
8
- module Reporter
9
-
10
- class Main < Base
11
- def initialize(analysed_modules)
12
- @analysed_modules = analysed_modules
13
- end
14
-
15
- def generate_report
16
- create_directories_and_files(generators)
17
- copy_assets_to_report_directory
18
- report_location
19
- end
20
-
21
- private
22
-
23
- def generators
24
- [overview_generator, code_index_generator, smells_index_generator] + file_generators
25
- end
26
-
27
- def overview_generator
28
- @overview_generator ||= Generator::Overview.new(@analysed_modules)
29
- end
30
-
31
- def code_index_generator
32
- Generator::CodeIndex.new(@analysed_modules)
33
- end
34
-
35
- def smells_index_generator
36
- Generator::SmellsIndex.new(@analysed_modules)
37
- end
38
-
39
- def file_generators
40
- @analysed_modules.map do |analysed_module|
41
- Generator::CodeFile.new(analysed_module)
42
- end
43
- end
44
-
45
- def report_location
46
- overview_generator.file_href
47
- end
48
- end
49
-
50
- end
51
- end
@@ -1,30 +0,0 @@
1
- require "rubycritic/reporters/base"
2
- require "rubycritic/report_generators/current_code_file"
3
-
4
- module Rubycritic
5
- module Reporter
6
-
7
- class Mini < Base
8
- def initialize(analysed_modules)
9
- @analysed_module = analysed_modules.first
10
- end
11
-
12
- def generate_report
13
- create_directories_and_files(file_generator)
14
- copy_assets_to_report_directory
15
- report_location
16
- end
17
-
18
- private
19
-
20
- def file_generator
21
- @file_generator ||= Generator::CurrentCodeFile.new(@analysed_module)
22
- end
23
-
24
- def report_location
25
- file_generator.file_href
26
- end
27
- end
28
-
29
- end
30
- end