danger-wcc 0.0.2

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 (73) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +46 -0
  3. data/.gitignore +6 -0
  4. data/.rubocop.yml +219 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +12 -0
  7. data/Dangerfile +5 -0
  8. data/Gemfile +6 -0
  9. data/Guardfile +35 -0
  10. data/LICENSE +201 -0
  11. data/README.md +2 -0
  12. data/Rakefile +25 -0
  13. data/danger-wcc.gemspec +58 -0
  14. data/lib/danger_plugin.rb +3 -0
  15. data/lib/version.rb +5 -0
  16. data/lib/wcc/commit_lint.rb +158 -0
  17. data/lib/wcc/commit_lint/README.md +3 -0
  18. data/lib/wcc/commit_lint/commit_check.rb +19 -0
  19. data/lib/wcc/commit_lint/empty_line_check.rb +22 -0
  20. data/lib/wcc/commit_lint/subject_cap_check.rb +22 -0
  21. data/lib/wcc/commit_lint/subject_length_check.rb +28 -0
  22. data/lib/wcc/commit_lint/subject_period_check.rb +22 -0
  23. data/lib/wcc/commit_lint/subject_words_check.rb +22 -0
  24. data/lib/wcc/default.jshintrc +5 -0
  25. data/lib/wcc/defaults.reek +131 -0
  26. data/lib/wcc/github.rb +24 -0
  27. data/lib/wcc/jshint.rb +63 -0
  28. data/lib/wcc/plugin.rb +128 -0
  29. data/lib/wcc/reek.rb +56 -0
  30. data/lib/wcc/rubocop_exceptions.rb +99 -0
  31. data/lib/wcc/todos.rb +78 -0
  32. data/lib/wcc/utils.rb +136 -0
  33. data/spec/fixtures/brakeman/a.tmp +13 -0
  34. data/spec/fixtures/brakeman/b.tmp +14 -0
  35. data/spec/fixtures/brakeman/brakeman.diff +20 -0
  36. data/spec/fixtures/brakeman/brakeman.out +14 -0
  37. data/spec/fixtures/exception_context.diff +15 -0
  38. data/spec/fixtures/exception_insert_context.diff +14 -0
  39. data/spec/fixtures/exception_misspelled.diff +14 -0
  40. data/spec/fixtures/exception_multiline_context.diff +20 -0
  41. data/spec/fixtures/exception_reenabled.diff +13 -0
  42. data/spec/fixtures/find_in_diff.rb +21 -0
  43. data/spec/fixtures/find_in_diff_2_chunks.diff +24 -0
  44. data/spec/fixtures/flay.diff +17 -0
  45. data/spec/fixtures/flay.txt +18 -0
  46. data/spec/fixtures/github/labels.json +72 -0
  47. data/spec/fixtures/github_pr.json +325 -0
  48. data/spec/fixtures/jshint/a.tmp +5 -0
  49. data/spec/fixtures/jshint/b.tmp +7 -0
  50. data/spec/fixtures/jshint/jshint.diff +13 -0
  51. data/spec/fixtures/jshint/out.jshint +7 -0
  52. data/spec/fixtures/no_exception.diff +10 -0
  53. data/spec/fixtures/no_todo.diff +13 -0
  54. data/spec/fixtures/reek/line_numbers.reek +121 -0
  55. data/spec/fixtures/reek/reek.diff +50 -0
  56. data/spec/fixtures/rubocop_exception.rb +39 -0
  57. data/spec/fixtures/todo.rb +21 -0
  58. data/spec/fixtures/todo_link_next_line.diff +14 -0
  59. data/spec/fixtures/todo_link_same_line.diff +13 -0
  60. data/spec/fixtures/todo_no_link.diff +13 -0
  61. data/spec/fixtures/todo_removed.diff +13 -0
  62. data/spec/fixtures_helper.rb +19 -0
  63. data/spec/spec_helper.rb +73 -0
  64. data/spec/wcc/commit_lint_spec.rb +392 -0
  65. data/spec/wcc/github_spec.rb +67 -0
  66. data/spec/wcc/jshint_spec.rb +68 -0
  67. data/spec/wcc/plugin_spec.rb +134 -0
  68. data/spec/wcc/reek_spec.rb +71 -0
  69. data/spec/wcc/rubocop_exceptions_spec.rb +136 -0
  70. data/spec/wcc/todos_spec.rb +96 -0
  71. data/spec/wcc/utils_spec.rb +134 -0
  72. data/spec/wcc_spec.rb +21 -0
  73. metadata +393 -0
@@ -0,0 +1,136 @@
1
+
2
+ # frozen_string_literal: true
3
+
4
+ require 'git_diff'
5
+ require 'logger'
6
+
7
+ module Utils
8
+ def plugin
9
+ # individual check classes usually set the '@plugin' variable,
10
+ # otherwise this mixin was included on the plugin itself.
11
+ @plugin || self
12
+ end
13
+
14
+ def logger
15
+ return @logger if @logger
16
+ @logger = Logger.new(STDERR)
17
+ @logger.level = ENV['DANGER_LOG_LEVEL'] ||
18
+ (plugin.verbose ? Logger::INFO : Logger::ERROR)
19
+ @logger
20
+ end
21
+
22
+ # All the diffs in the PR parsed into GitDiff objects
23
+ def parsed_diffs
24
+ @parsed_diffs ||=
25
+ plugin.git.diff.map do |d|
26
+ begin
27
+ GitDiff.from_string(d.patch)
28
+ rescue StandardError
29
+ logger.fatal "Error parsing patch:\n#{d.patch}"
30
+ raise
31
+ end
32
+ end
33
+ end
34
+
35
+ # Finds lines in the overall diff matching the given regex, and
36
+ # executes a block for each matched line.
37
+ # The results of the yield block are returned as an array.
38
+ def find_in_diff(regex)
39
+ each_file_in_diff do |file, diff|
40
+ file.hunks.flat_map do |hunk|
41
+ lines = hunk.lines.select { |l| l.addition? && l.content =~ regex }
42
+ if block_given?
43
+ lines =
44
+ lines.map do |l|
45
+ yield(l.content.match(regex), l, hunk, file, diff)
46
+ end
47
+ end
48
+ lines
49
+ end
50
+ end
51
+ end
52
+
53
+ def each_file_in_diff(passed_diff = nil)
54
+ diffs = passed_diff ? [passed_diff] : parsed_diffs
55
+ diffs.flat_map do |diff|
56
+ diff.files.flat_map do |file|
57
+ yield(file, diff)
58
+ end
59
+ end
60
+ end
61
+
62
+ def each_addition_in_diff(passed_diff = nil)
63
+ each_file_in_diff(passed_diff) do |file, diff|
64
+ file.hunks.flat_map do |hunk|
65
+ lines = hunk.lines.select(&:addition?)
66
+ lines = lines.map { |l| yield(l, hunk, file, diff) } if block_given?
67
+ lines
68
+ end
69
+ end
70
+ end
71
+
72
+ def run(command)
73
+ logger.info "Executing command '#{command}'"
74
+ result = `#{command}`
75
+ logger.debug result
76
+ result
77
+ end
78
+
79
+ # Runs a command twice - once on the merge base, and once on the current
80
+ # working directory. Then, returns the git diff of the printed results.
81
+ def run_and_diff(command = nil)
82
+ unless command || block_given?
83
+ raise ArgumentError('Must give command or block')
84
+ end
85
+
86
+ logger.info "Executing diff: '#{command}'"
87
+ with_revision(plugin.github.base_commit) do |dir|
88
+ initial = nil
89
+ Dir.chdir(dir) do
90
+ initial = command ? `#{command}` : yield
91
+ end
92
+ final = command ? `#{command}` : yield
93
+
94
+ diff = diff_strings(initial, final)
95
+ logger.debug diff
96
+ diff
97
+ end
98
+ end
99
+
100
+ # Executes a block after checking out the specified revision into a temp
101
+ # directory.
102
+ def with_revision(revision)
103
+ Dir.mktmpdir do |dir|
104
+ logger.debug "Checking out revision #{revision} into #{dir}"
105
+ system "git --work-tree=#{dir} checkout #{revision.strip} -- ."
106
+
107
+ yield(dir)
108
+ end
109
+ end
110
+
111
+ # Creates a git-format diff of the two strings by writing them to temp files
112
+ def diff_strings(a, b)
113
+ File.write('a.tmp', a)
114
+ File.write('b.tmp', b)
115
+ diff = `git diff --no-index a.tmp b.tmp`
116
+ File.delete('a.tmp', 'b.tmp')
117
+ diff
118
+ end
119
+
120
+ def format_links_as_markdown(line)
121
+ line.gsub(/\[?(https?\:\/\/[^\s\]]+)\]?/i, '[\1](\1)')
122
+ end
123
+
124
+ # Adds a message to the Danger report
125
+ # with the given serverity - 'message', 'warn', or 'fail
126
+ def issue(message, severity: 'message', file: nil, line: nil)
127
+ case severity
128
+ when 'message'
129
+ plugin.message(message, file: file, line: line)
130
+ when 'warn'
131
+ plugin.warn(message, file: file, line: line)
132
+ else
133
+ plugin.fail(message, file: file, line: line)
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,13 @@
1
+ app/controllers/wmoauth_controller.rb Redirect General Possible unprotected redirect near line : redirect_to(Wmoauth.get_client.auth_code.authorize_url(:redirect_uri => ENV["REDIRECT_URI"])) High
2
+ app/controllers/webhooks_controller.rb Cross Site Request Forgery Controller 'protect_from_forgery' should be called in WebhooksController near line High
3
+
4
+ app/views/calendar/show.html.erb Cross Site Scripting Template Unescaped model attribute near line : Calendar.format_calendar_data(Entry.find_by_date((params[:id] + "--"), (params[:id] + "--"), )).to_s Medium
5
+ app/views/sections/_central_truth.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["central_truth"]["journey_central_truth"] High
6
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
7
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
8
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
9
+ app/views/sections/_key_verse.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["key_verse"]["journey_key_verse_html"] High
10
+ app/views/sections/_scripture_memory.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["scripture_memory"]["journey_scripture_memory_html"] High
11
+ app/views/sections/_tweetable_truth.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["tweetable_truth"]["journey_tweetable_truth"] High
12
+ app/views/sections/_writer.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["writer"]["journey_writer_bio"] High
13
+ app/views/sections/comments/_group_comments.html.erb Cross Site Scripting Template Unescaped model attribute near line : { post["post_number"] => ({ :raw => post["cooked"], :name => post["name"], :reply_count => post["reply_count"], :created_at => post["created_at"], :reply_to_post_number => post["reply_to_post_number"], :post_number => post["post_number"] }) }[(Unresolved Model).new.post_no][:raw] Weak
@@ -0,0 +1,14 @@
1
+ app/controllers/wmoauth_controller.rb Redirect General Possible unprotected redirect near line : redirect_to(Wmoauth.get_client.auth_code.authorize_url(:redirect_uri => ENV["REDIRECT_URI"])) High
2
+ app/controllers/wmoauth_controller.rb SSL Verification Bypass General SSL certificate verification was bypassed near line : Net::HTTP.new(URI.parse(URI.escape("https://jointhejourney.us.list-manage.com/subscribe/post?u=#{ENV["MAILCHIMP_ORG_ID"]}&id=#{ENV["MAILCHIMP_LIST_ID"]}&FNAME=#{user["first_name"]}&LNAME=#{user["last_name"]}&EMAIL=#{user["email"]}")).host, URI.parse(URI.escape("https://jointhejourney.us.list-manage.com/subscribe/post?u=#{ENV["MAILCHIMP_ORG_ID"]}&id=#{ENV["MAILCHIMP_LIST_ID"]}&FNAME=#{user["first_name"]}&LNAME=#{user["last_name"]}&EMAIL=#{user["email"]}")).port).verify_mode = OpenSSL::SSL::VERIFY_NONE High
3
+ app/controllers/webhooks_controller.rb Cross Site Request Forgery Controller 'protect_from_forgery' should be called in WebhooksController near line High
4
+
5
+ app/views/calendar/show.html.erb Cross Site Scripting Template Unescaped model attribute near line : Calendar.format_calendar_data(Entry.find_by_date((params[:id] + "--"), (params[:id] + "--"), )).to_s Medium
6
+ app/views/sections/_central_truth.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["central_truth"]["journey_central_truth"] High
7
+ app/views/sections/_discussion_questions.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["discussion_questions"]["journey_discussion_questions"] High
8
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
9
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
10
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
11
+ app/views/sections/_key_verse.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["key_verse"]["journey_key_verse_html"] High
12
+ app/views/sections/_scripture_memory.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["scripture_memory"]["journey_scripture_memory_html"] High
13
+ app/views/sections/_tweetable_truth.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["tweetable_truth"]["journey_tweetable_truth"] High
14
+ app/views/sections/_writer.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["writer"]["journey_writer_bio"] High
@@ -0,0 +1,20 @@
1
+ diff --git a/a.tmp b/b.tmp
2
+ index 1652641..f6e16b1 100644
3
+ --- a/a.tmp
4
+ +++ b/b.tmp
5
+ @@ -1,8 +1,10 @@
6
+ app/controllers/wmoauth_controller.rb Redirect General Possible unprotected redirect near line : redirect_to(Wmoauth.get_client.auth_code.authorize_url(:redirect_uri => ENV["REDIRECT_URI"])) High
7
+ +app/controllers/wmoauth_controller.rb SSL Verification Bypass General SSL certificate verification was bypassed near line : Net::HTTP.new(URI.parse(URI.escape("https://jointhejourney.us.list-manage.com/subscribe/post?u=#{ENV["MAILCHIMP_ORG_ID"]}&id=#{ENV["MAILCHIMP_LIST_ID"]}&FNAME=#{user["first_name"]}&LNAME=#{user["last_name"]}&EMAIL=#{user["email"]}")).host, URI.parse(URI.escape("https://jointhejourney.us.list-manage.com/subscribe/post?u=#{ENV["MAILCHIMP_ORG_ID"]}&id=#{ENV["MAILCHIMP_LIST_ID"]}&FNAME=#{user["first_name"]}&LNAME=#{user["last_name"]}&EMAIL=#{user["email"]}")).port).verify_mode = OpenSSL::SSL::VERIFY_NONE High
8
+ app/controllers/webhooks_controller.rb Cross Site Request Forgery Controller 'protect_from_forgery' should be called in WebhooksController near line High
9
+
10
+ app/views/calendar/show.html.erb Cross Site Scripting Template Unescaped model attribute near line : Calendar.format_calendar_data(Entry.find_by_date((params[:id] + "--"), (params[:id] + "--"), )).to_s Medium
11
+ app/views/sections/_central_truth.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["central_truth"]["journey_central_truth"] High
12
+ +app/views/sections/_discussion_questions.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["discussion_questions"]["journey_discussion_questions"] High
13
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
14
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
15
+ app/views/sections/_introduction.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
16
+ @@ -10,4 +12,3 @@ app/views/sections/_key_verse.html.erb Cross Site Scripting Template Unescaped
17
+ app/views/sections/_scripture_memory.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["scripture_memory"]["journey_scripture_memory_html"] High
18
+ app/views/sections/_tweetable_truth.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["tweetable_truth"]["journey_tweetable_truth"] High
19
+ app/views/sections/_writer.html.erb Cross Site Scripting Template Unescaped model attribute near line : Entry.find(params[:id], params[:preview_code])["writer"]["journey_writer_bio"] High
20
+ -app/views/sections/comments/_group_comments.html.erb Cross Site Scripting Template Unescaped model attribute near line : { post["post_number"] => ({ :raw => post["cooked"], :name => post["name"], :reply_count => post["reply_count"], :created_at => post["created_at"], :reply_to_post_number => post["reply_to_post_number"], :post_number => post["post_number"] }) }[(Unresolved Model).new.post_no][:raw] Weak
@@ -0,0 +1,14 @@
1
+ app/controllers/wmoauth_controller.rb 11 Redirect General Possible unprotected redirect near line 11: redirect_to(Wmoauth.get_client.auth_code.authorize_url(:redirect_uri => ENV["REDIRECT_URI"])) High
2
+ app/controllers/wmoauth_controller.rb 78 SSL Verification Bypass General SSL certificate verification was bypassed near line 78: Net::HTTP.new(URI.parse(URI.escape("https://jointhejourney.us3.list-manage.com/subscribe/post?u=#{ENV["MAILCHIMP_ORG_ID"]}&id=#{ENV["MAILCHIMP_LIST_ID"]}&FNAME=#{user["first_name"]}&LNAME=#{user["last_name"]}&EMAIL=#{user["email"]}")).host, URI.parse(URI.escape("https://jointhejourney.us3.list-manage.com/subscribe/post?u=#{ENV["MAILCHIMP_ORG_ID"]}&id=#{ENV["MAILCHIMP_LIST_ID"]}&FNAME=#{user["first_name"]}&LNAME=#{user["last_name"]}&EMAIL=#{user["email"]}")).port).verify_mode = OpenSSL::SSL::VERIFY_NONE High
3
+ app/controllers/webhooks_controller.rb 2 Cross Site Request Forgery Controller 'protect_from_forgery' should be called in WebhooksController near line 2 High
4
+
5
+ app/views/calendar/show.html.erb 76 Cross Site Scripting Template Unescaped model attribute near line 76: Calendar.format_calendar_data(Entry.find_by_date((params[:id] + "-1-1"), (params[:id] + "-12-31"), 300)).to_s Medium
6
+ app/views/sections/_central_truth.html.erb 4 Cross Site Scripting Template Unescaped model attribute near line 4: Entry.find(params[:id], params[:preview_code])["central_truth"]["journey_central_truth"] High
7
+ app/views/sections/_discussion_questions.html.erb 4 Cross Site Scripting Template Unescaped model attribute near line 4: Entry.find(params[:id], params[:preview_code])["discussion_questions"]["journey_discussion_questions"] High
8
+ app/views/sections/_introduction.html.erb 31 Cross Site Scripting Template Unescaped model attribute near line 31: Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
9
+ app/views/sections/_introduction.html.erb 41 Cross Site Scripting Template Unescaped model attribute near line 41: Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
10
+ app/views/sections/_introduction.html.erb 57 Cross Site Scripting Template Unescaped model attribute near line 57: Entry.find(params[:id], params[:preview_code])["introduction"]["journey_introduction"] High
11
+ app/views/sections/_key_verse.html.erb 6 Cross Site Scripting Template Unescaped model attribute near line 6: Entry.find(params[:id], params[:preview_code])["key_verse"]["journey_key_verse_html"] High
12
+ app/views/sections/_scripture_memory.html.erb 12 Cross Site Scripting Template Unescaped model attribute near line 12: Entry.find(params[:id], params[:preview_code])["scripture_memory"]["journey_scripture_memory_html"] High
13
+ app/views/sections/_tweetable_truth.html.erb 10 Cross Site Scripting Template Unescaped model attribute near line 10: Entry.find(params[:id], params[:preview_code])["tweetable_truth"]["journey_tweetable_truth"] High
14
+ app/views/sections/_writer.html.erb 31 Cross Site Scripting Template Unescaped model attribute near line 31: Entry.find(params[:id], params[:preview_code])["writer"]["journey_writer_bio"] High
@@ -0,0 +1,15 @@
1
+ diff --git a/spec/fixtures/rubocop_exception.rb b/spec/fixtures/rubocop_exception.rb
2
+ index 2122f05..1d51ff5 100644
3
+ --- a/spec/fixtures/rubocop_exception.rb
4
+ +++ b/spec/fixtures/rubocop_exception.rb
5
+ @@ -11,4 +11,10 @@ module RubocopException
6
+ def some_method_misspelled_reenable
7
+ end
8
+ # rubocop:enable Lint/SomLint
9
+ +
10
+ + # rubocop:disable Metrics/LineLength
11
+ + # Disabling because I want to.
12
+ + def some_method_with_context
13
+ + end
14
+ + # rubocop:enable Metrics/LineLength
15
+ end
@@ -0,0 +1,14 @@
1
+ diff --git a/spec/fixtures/rubocop_exception.rb b/spec/fixtures/rubocop_exception.rb
2
+ index c97cbfc..0406593 100644
3
+ --- a/spec/fixtures/rubocop_exception.rb
4
+ +++ b/spec/fixtures/rubocop_exception.rb
5
+ @@ -20,6 +20,9 @@ module RubocopException
6
+
7
+ + # rubocop:disable Metrics/ABC
8
+ + # here is my comment why we are disabling ABC
9
+ # Some existing comments
10
+ # Made by another person
11
+ def some_method_with_existing_comments
12
+ end
13
+ + # rubocop:enable Metrics/ABC
14
+ end
@@ -0,0 +1,14 @@
1
+ diff --git a/spec/fixtures/rubocop_exception.rb b/spec/fixtures/rubocop_exception.rb
2
+ index 7f63af5..2122f05 100644
3
+ --- a/spec/fixtures/rubocop_exception.rb
4
+ +++ b/spec/fixtures/rubocop_exception.rb
5
+ @@ -6,4 +6,9 @@ module RubocopException
6
+ def some_method_with_disabled_rule
7
+ end
8
+ # rubocop:enable Rails/SomeRule
9
+ +
10
+ + # rubocop:disable Lint/SomeLint
11
+ + def some_method_misspelled_reenable
12
+ + end
13
+ + # rubocop:enable Lint/SomLint
14
+ end
@@ -0,0 +1,20 @@
1
+ diff --git a/spec/fixtures/rubocop_exception.rb b/spec/fixtures/rubocop_exception.rb
2
+ index 0406593..c59d48e 100644
3
+ --- a/spec/fixtures/rubocop_exception.rb
4
+ +++ b/spec/fixtures/rubocop_exception.rb
5
+ @@ -25,4 +25,15 @@ module RubocopException
6
+ def some_method_with_existing_comments
7
+ end
8
+ # rubocop:enable Metrics/ABC
9
+ +
10
+ + def some_method_with_multiline_context
11
+ + # rubocop:disable Layout/AlignHash
12
+ + # I want to disable this because..
13
+ + # I forgot the reasons.
14
+ + {
15
+ + a: 'a',
16
+ + b: 'b'
17
+ + }
18
+ + # rubocop:enable Layout/AlignHash
19
+ + end
20
+ end
@@ -0,0 +1,13 @@
1
+ diff --git a/spec/fixtures/rubocop_exception.rb b/spec/fixtures/rubocop_exception.rb
2
+ index 663661c..7f63af5 100644
3
+ --- a/spec/fixtures/rubocop_exception.rb
4
+ +++ b/spec/fixtures/rubocop_exception.rb
5
+ @@ -2,4 +2,8 @@
6
+ # frozen_string_literal: true
7
+
8
+ module RubocopException
9
+ + # rubocop:disable Rails/SomeRule
10
+ + def some_method_with_disabled_rule
11
+ + end
12
+ + # rubocop:enable Rails/SomeRule
13
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FindInDiff
4
+ def added_hunk_1
5
+ # This should appear in hunk 1
6
+ end
7
+
8
+ def method_in_the_middle
9
+ # Something something...
10
+
11
+ # This is several rows wide
12
+
13
+ # So that it has to end up in multiple hunks
14
+
15
+ # la dee da...
16
+ end
17
+
18
+ def added_hunk_2
19
+ # This should appear in hunk 2
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ diff --git a/spec/fixtures/find_in_diff.rb b/spec/fixtures/find_in_diff.rb
2
+ index ea14920..bef5732 100644
3
+ --- a/spec/fixtures/find_in_diff.rb
4
+ +++ b/spec/fixtures/find_in_diff.rb
5
+ @@ -1,6 +1,10 @@
6
+ # frozen_string_literal: true
7
+
8
+ module FindInDiff
9
+ + def added_hunk_1
10
+ + # This should appear in hunk 1
11
+ + end
12
+ +
13
+ def method_in_the_middle
14
+ # Something something...
15
+
16
+ @@ -10,4 +14,8 @@ module FindInDiff
17
+
18
+ # la dee da...
19
+ end
20
+ +
21
+ + def added_hunk_2
22
+ + # This should appear in hunk 2
23
+ + end
24
+ end
@@ -0,0 +1,17 @@
1
+ diff --git a/app/models/discourse.rb b/app/models/discourse.rb
2
+ index 5451817..93b5fdf 100644
3
+ --- a/app/models/discourse.rb
4
+ +++ b/app/models/discourse.rb
5
+ @@ -121,6 +121,12 @@ class Discourse
6
+ prefix_var = ENV['DISCOURSE_TOPIC_PREFIX']
7
+ prefix = '-' + prefix_var unless prefix_var.blank?
8
+
9
+ + if entry['title'].nil?
10
+ + title= "JTJ#{prefix.to_s}-#{Date.parse(entry['date']).strftime("%Y/%m/%d")}"
11
+ + else
12
+ + title= "JTJ#{prefix.to_s}-#{Date.parse(entry['date']).strftime("%Y/%m/%d")}-#{entry['title']}"
13
+ + end
14
+ +
15
+ topic = Topic.find_by(entry_id: entry['id'])
16
+ unless topic.present?
17
+ Rails.logger.info "[Discourse](create_discourse_topic) Creating new topic for entry #{entry} with title #{title}"
@@ -0,0 +1,18 @@
1
+ Total score (lower is better) = 502
2
+
3
+ 1) IDENTICAL code found in :iter (mass*2 = 232)
4
+ app/controllers/pages_controller.rb:41
5
+ app/controllers/pages_controller.rb:96
6
+
7
+ 2) IDENTICAL code found in :if (mass*2 = 152)
8
+ app/models/discourse.rb:124
9
+ app/models/discourse.rb:177
10
+
11
+ 3) IDENTICAL code found in :lasgn (mass*2 = 64)
12
+ app/helpers/application_helper.rb:3
13
+ app/mailers/jtj_mailer.rb:39
14
+
15
+ 4) Similar code found in :defn (mass = 54)
16
+ app/controllers/pages_controller.rb:127
17
+ app/controllers/pages_controller.rb:134
18
+ app/controllers/pages_controller.rb:141
@@ -0,0 +1,72 @@
1
+ [
2
+ {
3
+ "id": 662033598,
4
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/backlog",
5
+ "name": "backlog",
6
+ "color": "ededed",
7
+ "default": false
8
+ },
9
+ {
10
+ "id": 592468992,
11
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/bug",
12
+ "name": "bug",
13
+ "color": "ee0701",
14
+ "default": true
15
+ },
16
+ {
17
+ "id": 592468993,
18
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/duplicate",
19
+ "name": "duplicate",
20
+ "color": "cccccc",
21
+ "default": true
22
+ },
23
+ {
24
+ "id": 592468994,
25
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/enhancement",
26
+ "name": "enhancement",
27
+ "color": "84b6eb",
28
+ "default": true
29
+ },
30
+ {
31
+ "id": 592468995,
32
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/help%20wanted",
33
+ "name": "help wanted",
34
+ "color": "128A0C",
35
+ "default": true
36
+ },
37
+ {
38
+ "id": 592468996,
39
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/invalid",
40
+ "name": "invalid",
41
+ "color": "e6e6e6",
42
+ "default": true
43
+ },
44
+ {
45
+ "id": 765977835,
46
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/Ops",
47
+ "name": "Ops",
48
+ "color": "000000",
49
+ "default": false
50
+ },
51
+ {
52
+ "id": 592468997,
53
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/question",
54
+ "name": "question",
55
+ "color": "cc317c",
56
+ "default": true
57
+ },
58
+ {
59
+ "id": 782232325,
60
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/schema%20changes",
61
+ "name": "schema changes",
62
+ "color": "82e5c7",
63
+ "default": false
64
+ },
65
+ {
66
+ "id": 592468999,
67
+ "url": "https://api.github.com/repos/watermarkchurch/jtj-cms/labels/wontfix",
68
+ "name": "wontfix",
69
+ "color": "ffffff",
70
+ "default": true
71
+ }
72
+ ]